docker-compose を使ってミニマムのコンテナを作って起動してみます。(2019年5月現在)
まず最初に、ディレクトリ名が docker-compose におけるプロジェクト名(Docker コンテナ等の接頭辞)になるので、ディレクトリを作ります。
mkdir myproj
cd myproj
Dockerfile を作ります。
ドキュメント → http://docs.docker.jp/engine/reference/builder.html
# 軽量な Alpine Linux をベースにする
FROM alpine
# ログインしたときに便利なように bash・ps・curl を入れておく。
RUN apk add bash procps curl
# 1秒ごとに時刻を STDERR に書き出す
CMD sh -c "(while :; do date; sleep 1; done) >&2"
docker-compose.yml を作ります。
ドキュメント → https://docs.docker.com/compose/compose-file/compose-file-v2/
なお、tty などのオプションについては、docker 側のドキュメント http://docs.docker.jp/engine/reference/run.html を参照します。
version: "3"
services:
myalpine:
build: "."
tty: true
イメージを作ります。
イメージ名は、サービス名の前に、プロジェクト名(ディレクトリ名)が自動で付きます。
プロジェクト名を指定する場合は -p
オプションを指定します。
$ docker-compose build
Building myalpine
Successfully built e4215b22f7c8
Successfully tagged myproj_myalpine:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myproj_myalpine latest e4215b22f7c8 2 minutes ago 13MB
detach モードで起動します。
$ docker-compose up -d
Creating network "myproj_default" with the default driver
Creating myproj_myalpine_1 ... done
コンテナ名は、イメージ名の末尾に _1
が付きます。
起動中のコンテナ・プロセスを確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc95a9d44519 myproj_myalpine "/bin/sh -c 'sh -c \"…" 23 seconds ago Up 22 seconds myproj_myalpine_1
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------
myproj_myalpine_1 /bin/sh -c sh -c "(while : ... Up
STDERR 標準エラー出力を確認します。
docker logs
だとコンテナ単位のログを、
docker-compose logs
だとプロジェクト単位のログを確認できます。
-f
は tail -f
と同じ --follow
の意味です。
$ docker logs -f myproj_myalpine_1
Tue May 28 15:13:50 UTC 2019
Tue May 28 15:13:51 UTC 2019
Tue May 28 15:13:52 UTC 2019
Tue May 28 15:13:53 UTC 2019
$ docker-compose logs -f
myalpine_1 | Tue May 28 15:13:50 UTC 2019
myalpine_1 | Tue May 28 15:13:51 UTC 2019
myalpine_1 | Tue May 28 15:13:52 UTC 2019
myalpine_1 | Tue May 28 15:13:53 UTC 2019
稼働中のコンテナにログイン(bash を起動)してみます。
$ docker exec -it myproj_myalpine_1 bash
bash-4.4# uname -a
Linux cc95a9d44519 4.14.114-105.126.amzn2.x86_64 #1 SMP Tue May 7 02:26:40 UTC 2019 x86_64 Linux
bash-4.4# grep PRETTY /etc/os-release
PRETTY_NAME="Alpine Linux v3.9"
bash-4.4# exit
コンテナを stop
で停止してみます。
$ docker-compose stop
Stopping myproj_myalpine_1 ... done
$ docker ps
不要なコンテナを削除して後片付けします。
$ docker image prune -f
Total reclaimed space: 0B
$ docker image list
$ docker image rm myproj_myalpine
今回は1サービスのみでしたが、docker-compose を使うと
1プロジェクトで複数のサービスを束ねられます。