先月から少しずつ色んな記事を見ながら勉強してDockerfileとdocker-composeのいじり方が徐々に分かってきた感じなので、
アウトプットの練習も兼ねて記事にしたいと思いました。今回nginxを立ち上げるだけなのですが練習の意味でdocker-composeも利用してコンテナの設定を構築します。
環境
- Docker 19.03.13
- docker-compose 1.27.4
- nginx 1.16
Dockerfileの設定
なにはともあれDockerfileの設定をしましょう。適当なディレクトリを作成してDockerfileを作成します。
FROM nginx:1.16
ADD index.html /usr/share/nginx/html/index.html
CMD /usr/sbin/nginx -g 'daemon off;'
FROM
DockerHubからイメージをプルしてきます。
ADD
同じディレクトリのファイルをコンテナ内の指定したディレクトリにあるファイルに上書きします。今回Dockerfileと同じディレクトリにあるindex.htmlにてコンテナ内のファイルを上書きします。
CMD
コンテナが起動した際に走らせるコマンドを指定します。nginxはデフォルトだとデーモンで起動するのでここではデーモンオフにしてフォアグラウンドで実行する設定にしています。こうしないとdockerがコマンド実行したのち停止します。
表示するhtml
this is nginx test!!!!
書くほどのこともないですが上書き用のhtmlも用意します。
docker-composeの設定
一個のコンテナで使う意味はないですが、設定を書きます。
version: '3'
services:
web:
build: .
ports:
- 80:80
webサーバーなのでwebという名前にしています。同じディレクトリのDockerfileを使ってbuild。
ホスト80番、コンテナ80番でポートフォワーディングさせています。
nginx_test
┣ Dockerfile
┣ docker-compose.yml
┣ index.html
最終的にはこんな感じ
コンテナを起動
コンテナを起動して起動しているか確認します。
$ docker-compose up -d
$ docker ps
確かに80番でnginxが80番ポートで待ってます。今行くぜ!
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec41e6accd3e nginx_test_web "/bin/sh -c '/usr/sb…" 20 minutes ago Up 20 minutes 0.0.0.0:80->80/tcp nginx_test_web_1
http://localhost にてアクセスしてindex.htmlの記述が表示されれば成功です。
所感
自分の中ではADDというのがしっかり理解できず、技術記事を見ていても、なんでローカルのファイルがコンテナに反映されるかが分からずに悩んでいましたがnginxのdockerでの起動について調べていくうちに理解できました。