【Udemy】『Linux とネットワークの基礎から学ぶ Docker 入門』やってみた
はじめに
Dockerが分からん × ネットワークも分からん × Udemyを使ってみたい、ということで『Linux とネットワークの基礎から学ぶ Docker 入門』を購入してみました。ハンズオンしながら、分からなかったことや重要なことなどをメモしていきます。
ネットワーク超入門
ここら辺から難しくなってきました。ちなみにぼくは、Web開発が少しできてHTTPリクエスト・HTTPレスポンスはなんとなく分かる人です。HTTP通信はTCP/IPがベースになっています。TCP/IPは一般的なネットワークの通信方式で、データをパケットに分割してやり取りします。
講座ではNGINXのサーバーを使ったあとにRubyのサーバーを扱うのですが、2つの違いがよく分からず混乱しました。結論としては、NGINXのサーバーはWebサーバーでしたが、Rubyで実装したサーバーはアプリケーションサーバーになっていました[1](たぶん)。
NGINXサーバーは0.0.0.0:80
(任意のアドレス宛・80番ポート)へのアクセスを受け付けていますが、Rubyサーバーは127.0.0.1:7777
(自身宛, ローカルホスト・7777番ポート)へのアクセスのみを受け付けています。
80番ポートはそのようなポート番号の一つで、Webサーバがクライアントからの接続を待ち受けてHTTPでデータを返信する標準のポートとして用いられる。この用途はインターネット運用団体のIANAに登録されており、いわゆるウェルノウンポート(システムポート)の一つとして定着している。[2]
ぼくの理解としては、以下のような流れかなと考えています(違ったらごめんなさい)。
- WebサーバーとしてNGINXがアクセスを受け付ける。
- ローカルホスト宛のアクセスはRubyのアプリケーションサーバーに受け渡す。
Linuxでの典型的なWebアプリケーションの環境構築の章に説明があった。
メインのサーバーの手前に噛ませるサーバーをリバースプロキシと呼ぶ。上記の場合、RubyサーバーのリバースプロキシとしてNGINXが存在すると言える。
Linux での典型的な Web アプリケーションの環境構築
Ruby(Sinatra) × MySQLでAPIサーバーを構築した。フロントエンドはJavaScript(Vanilla)で実装。講座的にはかなりこの章に時間を割いていて、Webアプリケーションの仕組みや最近流行りのSPAの仕組みも(無意識に)理解することができる。
この章を見ればWeb開発の基礎が分かるし他の章でLinuxやDockerの知識も身につくので、Dockerが分からない人と言わず、プログラミングに入門した人でWeb開発をしたい人全員にこの講座をおすすめできるかもしれない。
Dockerの概要
Compute EngineがCloud Runより高いのってCEが仮想OS入れる手間があるからかな
Docker を使った開発環境の構築に挑戦
今までブラウザでしか使い方が分からない(Linuxとか使えない)のに苦労していた
docker run -it {hoge} bash
でbashに入れた
Dockerライフサイクル[1]
docker commit
でコンテナからイメージを作成できる。
- Sinatra の開発環境の作成について
DockerfileのCOPY Gemfile .
は、ホストのカレントディレクトリにあるGemfileをコンテナのルートディレクトリにコピーしている。コンテナをstartしてls /するとGemfileが確認できる
Portはhostと分離されてるのでマッピングする
あと今書いてて気付いたけど、Dockerfile触ってないのにいちいちビルドからやり直してたわ。
-p 80:80 はホスト側の80番ポートをコンテナ側の80番ポートに転送するように指定しています。-p 8080:80 と指定すれば http://localhost:8080 でアクセスできるようになります。
ポートフォワーディングというらしい。
React
Docker環境にインストールしたいけど、プロジェクトはホストに作りたいところでハマった。
nginx start
消したら動いた。理由は不明。
FROM nginx
-
stdin_open: true
:docker run
の-i
オプション -
tty: true
:docker run
の-t
オプション
他のサービス
kubernetes
Gamma Dockerより早いらしい
build
docker build --no-cache --tag [name] .