tech美られでぃ #4 Docker どっか〜ん!(初心者向け) のハンズオンで必要なファイルとか置いてます。 Docker や Docker Compose に関連するファイルは含まれていないので、手を動かして自分で作っていきましょう。
完成版が欲しい人は以下のリポジトリをどうぞー。
https://github.com/kkznch/20200215_docker-hands-on_completed
README.md
- README です。ハンズオンの手順とかこっちに書いていきます。
Makefile
- Makefile です。アプリの初期処理をする際に使います。
conf.d/nginx/default.conf
- nginx の Docker コンテナに差し込む設定ファイルです。
local-app
- Laravel がたくさん詰まったフォルダです。
- Docker の操作的なハンズオン
- 最小限の Dockerfile を書く
- Dockerfile からイメージを作成する
- 作成したイメージからコンテナを起動する
- Dockerfile を書いていくハンズオン
- コンテナを起動しログインする
- 必要なパッケージをインストールしていく
- パッケージのインストールが確認できたら Dockerfile に記述していく
- Dockerfile からイメージを作成できることを確認する
- docker-compose なハンズオン
- docker-compose.yml を書いていく
- docker-compose コマンドで起動する
まずは Terminal を開いて好きな場所でこのリポジトリを clone するのだ。 リポジトリの名前が長いので別名を付けても良いよ。
$ git clone https://github.com/kkznch/20200215_docker-hands-on_starter.git
そしてフォルダの中に移動する。
$ cd 20200215_docker-hands-on_starter
これで全ての準備は整った。
- まずは最小限の Dockerfile を書こう
FROM alpine RUN echo "Docker のビルド中..." CMD echo "Docker 起動したよ!やったね!"
- 以下のコマンドで Dockerfile からイメージを作成しよう
$ docker image build -t my-image .
- Tips:
docker image build .
だけでもビルドできるけど、作ったイメージの区別がしづらいので-t タグ名
を付けて実行するのオススメ
- Tips:
- 以下のコマンドで作成したイメージを確認しよう
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my-image latest a73b017b994d 19 minutes ago 5.59MB
- さっきタグ付けしてビルドした
my-image
なイメージがあるね!
- さっきタグ付けしてビルドした
- 以下のコマンドで作成したイメージからコンテナを起動しよう
$ docker container run my-image Docker 起動したよ!やったね!
- Dockerfile で実行した echo の内容が出力されたので起動できた!
- このコンテナは echo を実行すると役目を終えて勝手に消えるよ
- Tips:
docker container ls
コマンドで起動してるコンテナの一覧が見えるよ
実務では手順 1, 2 に沿ってコンテナで欲しいパッケージを確認しながら Dockerfile を書いていくのだけど、今回は手順 1 と 2 は飛ばしていいよ。
- 以下のコマンドでコンテナを起動しログインしよう
$ docker container run --rm --name my-container -it my-image ash
- Tips: さっきの
docker container run
コマンドに--name コンテナ名
をつけることで起動したコンテナの区別が分かりやすくできるよ - Tips:
docker container run
コマンドについてる--rm
オプションは、コンテナを起動して実行した後に自動で消えてくれるようにする設定だよ
- Tips: さっきの
- コンテナの中で必要なパッケージをインストールして確認しよう
$ apk add パッケージ名
- パッケージのインストールが確認できたら Dockerfile に記述していこう(さっきの Dockerfile をまるまる書き換えよう)
FROM php:7.3-fpm-alpine RUN apk --no-cache update && apk --no-cache upgrade RUN docker-php-ext-install bcmath pdo_mysql COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
- 今回は Laravel アプリを動かすために必要なパッケージとかコマンドをインストールするよ
- Dockerfile からイメージを作成できるか確認しよう
$ docker image build -t my-image .
- イメージのビルドでエラーが発生しなければ成功!
Docker コマンドだけで nginx と php-fpm のコンテナを連携させると凄く面倒くさい。 そこで docker-compose を使って楽にコンテナを連携させよう。
- docker-compose.yml を書いてみよう
version: '3.7' services: php-fpm: build: context: . dockerfile: ./Dockerfile volumes: - ./local-app:/app:cached working_dir: /app nginx: image: nginx:latest ports: - 80:80 depends_on: - php-fpm volumes: - ./conf.d/nginx/default.conf:/etc/nginx/conf.d/default.conf
- 以下のコマンドで docker-compose.yml に書かれた通りにビルドしよう
$ docker-compose build
- 以下のコマンドでイメージが作られたことを確認しよう
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE starter_php-fpm latest fed4dbf5d3f2 28 hours ago 83.5MB
- ビルドに成功してたらちゃんと一覧に表示されているはず...
- nginx はコンテナ起動時に pull されるので大丈夫
- 以下のコマンドでコンテナ郡を起動してみよう
$ docker-compose up -d
- 多分起動できていることでしょう、以下のコマンドで確認しよう
$ docker-compose ps Name Command State Ports -------------------------------------------------------------------------------- starter_nginx_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp starter_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
- Tips: 起動してるコンテナは以下のコマンドで停止、削除できるよ
$ docker-compose down
- 多分起動できていることでしょう、以下のコマンドで確認しよう
- コンテナを起動させた状態で以下のコマンドで初期処理を実行しよう
$ make init
- ブラウザから以下の URL にアクセスしよう!