docker-compose起動・停止

Dart用docker環境Docker

docker-composeの起動・停止についてメモ書き。

概要

docker-composeにはいくつか起動・停止のオプションがある。
起動停止の要約は以下の通り。

起動/停止オプション説明
起動startコンテナ起動。
起動upコンテナ作成→起動。
起動up –buildイメージビルド→コンテナ作成→起動。
停止stopコンテナ停止。
停止downコンテナ停止→コンテナ削除。

設定

PostgreSQL検証用のコンテナで確認。
設定ファイルは以下の通り。

  • dockerfile
FROM postgres:13.9-alpine3.17
ENV LANG ja_JP.utf8
RUN apk update && apk add vim
  • docker-compose.yaml
version: '3'
services:
 db:
    build: .
    ports:
      - 5433:5432
    volumes:
      - ./data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: testuser
      POSTGRES_PASSWORD: testp@ssword

起動確認

イメージファイル無し

PostgreSQLのイメージファイルが無い状態で各起動コマンドを実行。

% docker image ls   
REPOSITORY      TAG       IMAGE ID       CREATED      SIZE
mysql_mysqldb   latest    3b546580ac85   3 days ago   790MB
  • docker-compose start・・・×

コンテナが無いのでエラー。

% docker-compose start
Starting db ... failed
ERROR: No containers to start
ERROR: 1
  • docker-compose up・・・△

ビルドしていないのでWARNINGが出るが、コンテナを起動できる。
ちなみに-dはデタッチするためのオプション。コンテナをバックグラウンドで実行する。

% docker-compose up -d
Creating network "postgresql_default" with the default driver
Building db
[+] Building 2.6s (7/7) FINISHED                                                                                                             
 => [internal] load build definition from Dockerfile                                                                                    0.0s
 => => transferring dockerfile: 122B                                                                                                    0.0s
 => [internal] load .dockerignore                                                                                                       0.0s
 => => transferring context: 2B                                                                                                         0.0s
 => [internal] load metadata for docker.io/library/postgres:13.9-alpine3.17                                                             2.4s
 => [auth] library/postgres:pull token for registry-1.docker.io                                                                         0.0s
 => [1/2] FROM docker.io/library/postgres:13.9-alpine3.17@sha256:46e0328440ac2b9bb0e22cd07eba248a95f1e575256850a0ef98995891bb9af6       0.0s
 => CACHED [2/2] RUN apk update && apk add vim                                                                                          0.0s
 => exporting to image                                                                                                                  0.0s
 => => exporting layers                                                                                                                 0.0s
 => => writing image sha256:6f6640a850ada8d04697f421f699cb5f91956105926e1d500ba516cc3526b92c                                            0.0s
 => => naming to docker.io/library/postgresql_db                                                                                        0.0s
WARNING: Image for service db was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating postgresql_db_1 ... done

% docker image ls
REPOSITORY      TAG       IMAGE ID       CREATED      SIZE
mysql_mysqldb   latest    3b546580ac85   3 days ago   790MB
postgresql_db   latest    6f6640a850ad   6 days ago   266MB

% docker container ls
CONTAINER ID   IMAGE           COMMAND                  CREATED              STATUS              PORTS                                                  NAMES
34de33402c12   postgresql_db   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp              postgresql_db_1
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   3 days ago           Up 3 days           33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1
  • docker-compose up –build・・・○

正常起動。
イメージをビルドしていない初回実行時には–buildオプションを付ける。

% docker-compose up -d --build
Creating network "postgresql_default" with the default driver
Building db
[+] Building 5.4s (7/7) FINISHED                                                                                                             
 => [internal] load build definition from Dockerfile                                                                                    0.0s
 => => transferring dockerfile: 36B                                                                                                     0.0s
 => [internal] load .dockerignore                                                                                                       0.0s
 => => transferring context: 2B                                                                                                         0.0s
 => [internal] load metadata for docker.io/library/postgres:13.9-alpine3.17                                                             5.3s
 => [auth] library/postgres:pull token for registry-1.docker.io                                                                         0.0s
 => [1/2] FROM docker.io/library/postgres:13.9-alpine3.17@sha256:46e0328440ac2b9bb0e22cd07eba248a95f1e575256850a0ef98995891bb9af6       0.0s
 => CACHED [2/2] RUN apk update && apk add vim                                                                                          0.0s
 => exporting to image                                                                                                                  0.0s
 => => exporting layers                                                                                                                 0.0s
 => => writing image sha256:6f6640a850ada8d04697f421f699cb5f91956105926e1d500ba516cc3526b92c                                            0.0s
 => => naming to docker.io/library/postgresql_db                                                                                        0.0s
Creating postgresql_db_1 ... done

% docker image ls
REPOSITORY      TAG       IMAGE ID       CREATED      SIZE
mysql_mysqldb   latest    3b546580ac85   3 days ago   790MB
postgresql_db   latest    6f6640a850ad   6 days ago   266MB

% docker container ls
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
49044b08a02e   postgresql_db   "docker-entrypoint.s…"   29 seconds ago   Up 25 seconds   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp              postgresql_db_1
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   3 days ago       Up 3 days       33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1
watanabekiyoshi@mac1 postgresql %

イメージファイル有り、コンテナ無し

PostgreSQLのイメージファイルが有る状態で各起動コマンドを実行。

watanabekiyoshi@mac1 postgresql % docker image ls    
REPOSITORY      TAG       IMAGE ID       CREATED      SIZE
mysql_mysqldb   latest    3b546580ac85   3 days ago   790MB
postgresql_db   latest    6f6640a850ad   6 days ago   266MB
  • docker-compose start・・・×

コンテナが無いのでエラー。

% docker-compose start
Starting db ... failed
ERROR: No containers to start
ERROR: 1
  • docker-compose up・・・○

イメージファイルからコンテナを作成し起動。
docker-compose.ymlを更新し、コンテナを再作成する時に使用。

% docker-compose up -d 
Creating network "postgresql_default" with the default driver
Creating postgresql_db_1 ... done

% docker container ls
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
2a7e656ec368   postgresql_db   "docker-entrypoint.s…"   23 seconds ago   Up 19 seconds   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp              postgresql_db_1
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   3 days ago       Up 3 days       33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1
  • docker-compose up –build・・・△

イメージの再ビルドを行う。
ただし、イメージ再構築時にdockerfileのキャッシュが残っていると変更が反映されない。そんな時は「docker-compose build –no-cache」でイメージを作り直す。余計な処理をしているので△。

% docker-compose up -d --build
Creating network "postgresql_default" with the default driver
Building db
[+] Building 5.2s (7/7) FINISHED                                                                                                             
 => [internal] load build definition from Dockerfile                                                                                    0.0s
 => => transferring dockerfile: 36B                                                                                                     0.0s
 => [internal] load .dockerignore                                                                                                       0.0s
 => => transferring context: 2B                                                                                                         0.0s
 => [internal] load metadata for docker.io/library/postgres:13.9-alpine3.17                                                             5.0s
 => [auth] library/postgres:pull token for registry-1.docker.io                                                                         0.0s
 => [1/2] FROM docker.io/library/postgres:13.9-alpine3.17@sha256:46e0328440ac2b9bb0e22cd07eba248a95f1e575256850a0ef98995891bb9af6       0.0s
 => CACHED [2/2] RUN apk update && apk add vim                                                                                          0.0s
 => exporting to image                                                                                                                  0.0s
 => => exporting layers                                                                                                                 0.0s
 => => writing image sha256:6f6640a850ada8d04697f421f699cb5f91956105926e1d500ba516cc3526b92c                                            0.0s
 => => naming to docker.io/library/postgresql_db                                                                                        0.0s
Creating postgresql_db_1 ... done

% docker container ls         
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
68c7fcadb75b   postgresql_db   "docker-entrypoint.s…"   15 seconds ago   Up 11 seconds   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp              postgresql_db_1
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   3 days ago       Up 3 days       33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1

イメージファイル有り、コンテナ有り

PostgreSQLのイメージファイルとコンテナが有る状態で各起動コマンドを実行。
なお各コマンド実行時、コンテナは停止している。

% docker container ls -a
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS                      PORTS                                                  NAMES
68c7fcadb75b   postgresql_db   "docker-entrypoint.s…"   9 minutes ago   Exited (0) 17 seconds ago                                                          postgresql_db_1
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   3 days ago      Up 3 days                   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1
  • docker-compose start・・・○

コンテナ正常起動。

% docker-compose start  
Starting db ... done
  • docker-compose up・・・○

コンテナ正常起動。
コンテナを再作成しない。

% docker-compose up -d  
Starting postgresql_db_1 ... done
  • docker-compose up -d –build・・・△

コンテナ正常起動。
コンテナの「CREATED」が「9 hours ago」になっているのでキャッシュを使用している模様。
起動するだけなら余計な処理をしない方が良いので△。

% docker-compose up -d --build
Building db
[+] Building 5.4s (7/7) FINISHED                                                                                                             
 => [internal] load build definition from Dockerfile                                                                                    0.0s
 => => transferring dockerfile: 36B                                                                                                     0.0s
 => [internal] load .dockerignore                                                                                                       0.0s
 => => transferring context: 2B                                                                                                         0.0s
 => [internal] load metadata for docker.io/library/postgres:13.9-alpine3.17                                                             5.3s
 => [auth] library/postgres:pull token for registry-1.docker.io                                                                         0.0s
 => [1/2] FROM docker.io/library/postgres:13.9-alpine3.17@sha256:46e0328440ac2b9bb0e22cd07eba248a95f1e575256850a0ef98995891bb9af6       0.0s
 => CACHED [2/2] RUN apk update && apk add vim                                                                                          0.0s
 => exporting to image                                                                                                                  0.0s
 => => exporting layers                                                                                                                 0.0s
 => => writing image sha256:6f6640a850ada8d04697f421f699cb5f91956105926e1d500ba516cc3526b92c                                            0.0s
 => => naming to docker.io/library/postgresql_db                                                                                        0.0s
Starting postgresql_db_1 ... done

% docker image ls -a
REPOSITORY      TAG       IMAGE ID       CREATED      SIZE
mysql_mysqldb   latest    3b546580ac85   4 days ago   790MB
postgresql_db   latest    6f6640a850ad   7 days ago   266MB

% docker container ls -a
CONTAINER ID   IMAGE           COMMAND                  CREATED       STATUS          PORTS                                                  NAMES
68c7fcadb75b   postgresql_db   "docker-entrypoint.s…"   9 hours ago   Up 31 seconds   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp              postgresql_db_1
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   3 days ago    Up 3 days       33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1

停止確認

  • docker-compose stop  

コンテナ停止。
コンテナを削除しない。

% docker-compose stop  
Stopping postgresql_db_1 ... done

% docker container ls -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS                     PORTS                                                  NAMES
55e44710e8bb   postgresql_db   "docker-entrypoint.s…"   17 seconds ago   Exited (0) 8 seconds ago                                                          postgresql_db_1
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   4 days ago       Up 4 days                  33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1
 

docker-compose down

コンテナ停止。
コンテナを削除する。

% docker-compose down 
Stopping postgresql_db_1 ... done
Removing postgresql_db_1 ... done
Removing network postgresql_default

% docker container ls -a
CONTAINER ID   IMAGE           COMMAND                  CREATED      STATUS      PORTS                                                  NAMES
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   4 days ago   Up 4 days   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1

おまけ

イメージファイル有り、コンテナ無しでコマンド実行

  • docker-compose run

コンテナでコマンドを実行後、コンテナを停止。

% docker-compose run db ls /
Creating postgresql_db_run ... done
bin                         proc
dev                         root
docker-entrypoint-initdb.d  run
etc                         sbin
home                        srv
lib                         sys
media                       tmp
mnt                         usr
opt                         var

% docker container ls -a
CONTAINER ID   IMAGE           COMMAND                  CREATED              STATUS                          PORTS                                                  NAMES
945faf48cc96   postgresql_db   "docker-entrypoint.s…"   About a minute ago   Exited (0) About a minute ago                                                          postgresql_db_run_4fc7e2cf8af0
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   4 days ago           Up 4 days                       33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1

コマンド実行後にコンテナを削除する場合は、–rmオプションを付ける。
コンテナを削除しないと溜まっていくので注意。

% docker-compose run --rm db ls / 
Creating postgresql_db_run ... done
bin                         proc
dev                         root
docker-entrypoint-initdb.d  run
etc                         sbin
home                        srv
lib                         sys
media                       tmp
mnt                         usr
opt                         var

% docker container ls -a         
CONTAINER ID   IMAGE           COMMAND                  CREATED      STATUS      PORTS                                                  NAMES
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   4 days ago   Up 4 days   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1

起動中のコンテナでコマンド実行

  • docker-compose exec

起動中のコンテナでコマンドを実行する場合はexecを使用。
コマンド実行後もコンテナは起動している。

% docker-compose up -d
Creating postgresql_db_1 ... done

% docker-compose exec db ls /
bin                         proc
dev                         root
docker-entrypoint-initdb.d  run
etc                         sbin
home                        srv
lib                         sys
media                       tmp
mnt                         usr
opt                         var

% docker container ls -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
657d4f2f878b   postgresql_db   "docker-entrypoint.s…"   51 seconds ago   Up 47 seconds   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp              postgresql_db_1
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   4 days ago       Up 4 days       33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1

起動中のコンテナでコマンドを対話的に実行するにはexecコマンドでbashを実行する。

% docker-compose exec db bash  ←コンテナに接続
# ls /  ←コマンド実行
bin                         home                        opt                         sbin                        usr
dev                         lib                         proc                        srv                         var
docker-entrypoint-initdb.d  media                       root                        sys
etc                         mnt                         run                         tmp
# exit  ←切断
exit
% docker container ls -a  ←コンテナが起動している事を確認
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
657d4f2f878b   postgresql_db   "docker-entrypoint.s…"   9 minutes ago   Up 9 minutes   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp              postgresql_db_1
0f06e09020e2   mysql_mysqldb   "docker-entrypoint.s…"   4 days ago      Up 4 days      33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql_mysqldb_1

コメント

タイトルとURLをコピーしました