Docker Composeによるコンテナ作成の流れを説明します。
Docker Composeのインストールは本記事では説明しません。ただしDocker for MacおよびDocker for WindowsにはDocker Composeはすでにインストールされています。
Docker Composeを利用すると、複数のコンテナを管理し、イメージ作成からコンテナ起動までいっぺんに実行することができます。その設計図のようなものが「docker-compose.yml」ファイルです。
まずは1つだけのコンテナですが、下記関連ページと同じようなことを、本記事ではDocker Composeを利用してMySQLを立ち上げてみます。
関連ページ
まずは適当なディレクトリにおいて「docker-compose.yml」ファイルを作成します。
1 2 3 |
mkdir docker01 cd docker01 vi docker-compose.yml |
docker-compose.ymlには下記のように記述しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
version: '3' services: mysql: image: mysql:5.7 container_name: test-mysql environment: MYSQL_ROOT_USER: root MYSQL_ROOT_PASSWORD: pass MYSQL_DATABASE: sampledb volumes: - db-volume:/var/lib/mysql volumes: db-volume: |
mysqlのバージョン5.7をイメージとし、test-mysqlという名前のコンテナを作成します。environmentにはそれぞれの環境変数を設定し、あらかじめsampledbという名前のデータベースが生成されるように指定しています。
volumesにはデータボリュームを指定しています。データボリュームについては下記ページをご参照下さい。
Data Volume Container について [Dockerの永続化]
コンテナを起動します。「docker-compose up」コマンドを利用します。「-d」オプションによってバックグラウンドによる実行となります。
1 |
docker-compose up -d |
「docker-compose ps」で生成されたコンテナを表示させてみます。Nameにdocker-compose.ymlで指定したコンテナ名(test-mysql)が反映されていることを確認します。
1 2 3 4 5 |
docker-compose ps Name Command State Ports ---------------------------------------------------------------------- test-mysql docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp |
すでに起動しているので、test-mysqlコンテナに入ってみます。
1 |
docker exec -it test-mysql /bin/bash |
コンテナに入ったら、MySQLに接続します。
1 |
root@f1ec6db04a2f:/# mysql -u root -ppass |
docker-compose.ymlで指定したsampledbがすでに生成されていることを確認。
1 2 3 4 5 6 7 8 9 10 11 |
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sampledb | | sys | +--------------------+ 5 rows in set (0.00 sec) |
データボリュームも生成されていることを確認できます。
1 2 3 4 |
docker volume ls DRIVER VOLUME NAME local docker01_db-volume |
名前のdocker01は、docker-compose.ymlが配置されているディレクトリ名となります。
コンテナを停止させます。また起動する場合は「docker-compose start」を利用します。
1 2 3 4 5 |
docker-compose stop Name Command State Ports --------------------------------------------------------- test-mysql docker-entrypoint.sh mysqld Exit 0 |
StateでExitを確認。
コンテナの停止と破棄を一気に実行します。
1 |
docker-compose down |