Qiita とか調べていると、いきなり docker と docker-compose が混在してなんだこりゃ?となったりします。
(少なくとも自分は)
特に、他人の作ったdocker-compose.yml を docker の基礎がわからないと何をしているのか読み取れません。
例えば、Laravel を Docker で動かす Laradock はすごく便利で少しの知識があれば開発環境を動作せることが可能ですが、「やっぱり自分で構築したい!」となると、その設定を全部把握するのはかなりの時間がかかりそうです。
最初は docker の基本コマンドを繰り返し実感するのが良いのでは?と思います。
まず、docker-compose コマンドが存在するか確認します。
$ docker-compose version
docker-compose version 1.25.4, build 8d51620a
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.1d 10 Sep 2019
あらかじめ、Dockerfile でイメージを作成済みであることを前提とします。
#!/bin/sh
echo "Hello Shell Script"
FROM ubuntu:18.04
COPY hello.sh /usr/local/bin
RUN chmod +x /usr/local/bin/hello.sh
CMD ["hello.sh"]
docker-compose を利用する前にまず docker コマンドでの起動を確認します。
$ docker image build -t
example/hello:latest . $ docker container run
example/hello:latest
起動確認ができたら、一度 dockerコンテナを落としておきます。
$ docker stop コンテナID
docker-compose を利用するには、「docker-compose.yml」の設定が必要となります。
version: "3"
services:
hello:
image: example/hello:latest
ports:
- 9000:8080
docker-compose up で、docker-compose.yml を読み込み、「hello.sh」が実行されます。
docker-compose.yml のフォーマットバージョンで、「3」は2020/3時点での最新です。
services: の第一階層に、各コンテナの名前を複数定義します。
例では、hello がコンテナ名となります。
Dockerイメージ名を設定します。
ホストと docker のポートフォワーディング設定(ホストポート:dockerポート)
$ docker-compose up
Creating network "docker-hello_default" with the default driver
Creating docker-hello_hello_1 ... done
Attaching to docker-hello_hello_1
hello_1 | Hello Shell Script
docker-hello_hello_1 exited with code 0
ちなみに、このサンプルは hello.sh を実行したのちに exit しているため、状態は「Exit 0」となっています。
docker のプロセス確認は docker-compose コマンドでも可能です。
$ docker-compose ps
Name Command State Ports
-----------------------------------------------
docker-hello_echo_1 hello.sh Exit 0
docker-compose.yml で設定しているコンテナを全て停止します。
$ docker-compose down