Docker Composeをもう少し試してみる
コンテナを起動させ続ける場合
CentOSのコンテナを起動。
$ vi docker-compose.yml
version: '3' services: srv: image: centos
$ docker-compose up -d
しかし、終了してしまう。
$ docker-compose ps Name Command State Ports ------------------------------------------ vagrant_srv_1 /bin/bash Exit 0
停止。
$ docker-compose down
「tty: true」を付けると、
$ vi docker-compose.yml
version: '3' services: srv: image: centos tty: true
終了しなくなる。
$ docker-compose up -d $ docker-compose ps Name Command State Ports ----------------------------------------- vagrant_srv_1 /bin/bash Up
停止。
$ docker-compose down
プロジェクト名
コンテナ名を特に指定しないと、 コンテナ名は「プロジェクト名_サービス名_連番」になる。
プロジェクト名は、デフォルトではフォルダ名になる。
例えば、「hoge」というディレクトリを作り、このディレクトリ上で
$ mkdir hoge $ cd hoge
コンテナを起動すると、
$ vi docker-compose.yml
version: '3' services: srv: image: centos tty: true
$ docker-compose up -d
プロジェクト名が「hoge」になっているのが確認できる。
$ docker-compose ps Name Command State Ports -------------------------------------- hoge_srv_1 /bin/bash Up
※「-p」オプションでもプロジェクト名を設定できるみたい。
停止。
$ docker-compose down $ cd ..
コンテナ名
コンテナ名を指定する場合は、「container_name: コンテナ名」を記述する。
$ vi docker-compose.yml
version: '3' services: srv: image: centos container_name: con tty: true
起動すると、
$ docker-compose up -d
コンテナ名が指定した名前になってるのが確認できる。
$ docker-compose ps Name Command State Ports -------------------------------- con /bin/bash Up
ホスト名
現在、起動しているコンテナのIDは下記のようになっている。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19d1ffb955c0 centos "/bin/bash" 47 seconds ago Up 45 seconds con
ホスト名を指定していない場合、ホスト名はコンテナIDになる。
$ docker exec -it con /bin/bash [root@19d1ffb955c0 /]# hostname 19d1ffb955c0
停止。
# exit $ docker-compose down
ホスト名を指定すると、
$ vi docker-compose.yml
version: '3' services: srv: image: centos container_name: con hostname: hst tty: true
$ docker-compose up -d
ホスト名が変わっているのが確認できる。
$ docker exec -it con /bin/bash [root@hst /]# hostname hst
停止。
# exit $ docker-compose down
コンテナ間通信
コンテナを複数起動する。
$ vi docker-compose.yml
version: '3' services: srv-1: image: centos container_name: con-1 hostname: hst-1 tty: true srv-2: image: centos container_name: con-2 hostname: hst-2 tty: true
$ docker-compose up -d
デフォルトでは、「プロジェクト名_default」のネットワークが作られ、
$ docker network ls NETWORK ID NAME DRIVER SCOPE 6143d4cf052a bridge bridge local a5cc6ae82dca host host local 70f2a039d34a none null local 43a90aec0622 vagrant_default bridge local
各コンテナは、このネットワークに接続している。
$ docker network inspect vagrant_default [ { ・・・ "Containers": { "2dd35cb3072b64adede2427dd348e1f9c09e526d5aee0b5807c1572cf36a50f4": { "Name": "con-2", ・・・ }, "e3e776aa48ed7c2c93c163b4ec6292a45b88fdc163abe2164a1b20f3812a551f": { "Name": "con-1", ・・・ } }, ・・・ } ]
1つ目のコンテナに入り、2つ目のコンテナにつながるか確認してみる。
$ docker exec -it con-1 /bin/bash
サービス名、コンテナ名、ホスト名のどれでも接続できるみたい。
# ping srv-2 PING srv-2 (172.26.0.2) 56(84) bytes of data. 64 bytes from con-2.vagrant_default (172.26.0.2): icmp_seq=1 ttl=64 time=0.037 ms ・・・ # ping con-2 PING con-2 (172.26.0.2) 56(84) bytes of data. 64 bytes from con-2.vagrant_default (172.26.0.2): icmp_seq=1 ttl=64 time=0.021 ms ・・・ # ping hst-2 PING hst-2 (172.26.0.2) 56(84) bytes of data. 64 bytes from con-2.vagrant_default (172.26.0.2): icmp_seq=1 ttl=64 time=0.022 ms ・・・