Open25

【Udemy】『Linux とネットワークの基礎から学ぶ Docker 入門』やってみた

winnie279winnie279

Linux 環境のセットアップ

Google Cloud Platform(GCP)のCompute Engine[1]を使ってUbuntu環境を構築しました。有料の東京リージョンでインスタンスを立てるように言われますが、今のところ(セクション4まで)は無料枠[2]で実行できています(料金が発生しても責任は負えません。初心者の発言なのでご自身でよく調べてください)。

脚注
  1. https://cloud.google.com/compute?hl=ja ↩︎

  2. https://cloud.google.com/free/docs/free-cloud-features#compute ↩︎

winnie279winnie279

Web サーバを構築しながらプロセスの基本を学ぶ

NGINX[1]を使いました。NGINXはオープンソースのWebサーバーです。
ちなみに「エンジンエックス」と読みます。ぼくは「ンギックス」と読んでました🙈

Linuxのsystemctlコマンドを使って起動すると良い感じになるっぽい[2]です。

脚注
  1. https://www.nginx.co.jp/ ↩︎

  2. https://qiita.com/wms2a4i1/items/04a1250229b12da33b87 ↩︎

winnie279winnie279

ネットワーク超入門

ここら辺から難しくなってきました。ちなみにぼくは、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]

ぼくの理解としては、以下のような流れかなと考えています(違ったらごめんなさい)。

  1. WebサーバーとしてNGINXがアクセスを受け付ける。
  2. ローカルホスト宛のアクセスはRubyのアプリケーションサーバーに受け渡す。
脚注
  1. https://www.nginx.co.jp/resources/glossary/application-server-vs-web-server/ ↩︎

  2. https://e-words.jp/w/80番ポート.html ↩︎

winnie279winnie279

Linux での典型的な Web アプリケーションの環境構築

Ruby(Sinatra) × MySQLでAPIサーバーを構築した。フロントエンドはJavaScript(Vanilla)で実装。講座的にはかなりこの章に時間を割いていて、Webアプリケーションの仕組みや最近流行りのSPAの仕組みも(無意識に)理解することができる。

この章を見ればWeb開発の基礎が分かるし他の章でLinuxやDockerの知識も身につくので、Dockerが分からない人と言わず、プログラミングに入門した人でWeb開発をしたい人全員にこの講座をおすすめできるかもしれない。

winnie279winnie279

Dockerの概要

Compute EngineがCloud Runより高いのってCEが仮想OS入れる手間があるからかな

winnie279winnie279

Docker を使った開発環境の構築に挑戦

今までブラウザでしか使い方が分からない(Linuxとか使えない)のに苦労していた
docker run -it {hoge} bashでbashに入れた

Dockerライフサイクル[1]

docker commitでコンテナからイメージを作成できる。

  1. Sinatra の開発環境の作成について
    DockerfileのCOPY Gemfile .は、ホストのカレントディレクトリにあるGemfileをコンテナのルートディレクトリにコピーしている。コンテナをstartしてls /するとGemfileが確認できる

Portはhostと分離されてるのでマッピングする

脚注
  1. https://yzhums.com/6928/ ↩︎

winnie279winnie279

大元の流れとして、Dockerコンテナを作成してその中で環境構築したあと、それをイメージに変換することで同じコンテナを使い回すことができる。

ただし、その場合だと環境構築の手順が分からなくなってしまうので、Dockerfileを使うことで環境構築の手順をコード化する(Infrastructure as Code)

winnie279winnie279

あと今書いてて気付いたけど、Dockerfile触ってないのにいちいちビルドからやり直してたわ。

winnie279winnie279

React
Docker環境にインストールしたいけど、プロジェクトはホストに作りたいところでハマった。
https://zenn.dev/rihito/articles/96dfad8d4990f9