LoginSignup
25
25

More than 3 years have passed since last update.

docker-compose でコンテナを起動する

Posted at

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 を参照します。

docker-compose.yml
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 だとプロジェクト単位のログを確認できます。
-ftail -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プロジェクトで複数のサービスを束ねられます。

25
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
25