docker のコンテナ間通信にいついて

というわけで自分でもまだ曖昧な点が多いですがDockerのコンテナ間通信について調べてみました。 方法はいろいろあり、 1. Dockerネットワークを使用したコンテナ間通信 2. –linkオプションを用いたコンテナ間通信 などがあり、まだまだたくさんあるみたいです。

今回は2番の –linkオプションについて調べてみました。 例えばWordpressコンテナとmysqlでコンテナ間通信をする際、 コンテナを作成するときに–linkオプションを以下のように利用します

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
docker run --name some-wordpress -e WORDPRESS_DB_PASSWORD=my-secret-pw --link some-mysql:mysql -d -p 8080:80 wordpress

接続先のコンテナ名(some-mysql)と、WordPressコンテナ内で使用しているMySQLのホスト名(mysql) を指定しています。

これをdocker composeを用いて同じように通信してみます。

Docker Composeとは

複数のコンテナで構成されるアプリケーションについて、Dockerイメージのビルドや各コンテナの起動・停止などをより簡単に行えるようにするツール..

docker composeではコンテナを起動するためにdocker-compose.ymlというファイルが必要になります。 先ほどの例と同じようにWordpressコンテナとMysqlコンテナで構成されたコンテナを起動するためには docker composeに以下のように記述します。

version: '3'
services:

  wordpress:
    image: wordpress
    container_name: some-wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: my-secret-pw

  mysql:
    image: mysql:5.7
    container_name: some-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw

version2以上ではこの状態で起動することで同じネットワーク内で構成されるため linkオプションを利用する必要はないです。(おそらく)

docker compose.ymlが置かれているディレクトリで

docker-compose up -d

と実行することでバックグラウンドでコンテナを起動します。

また

docker-compose ps

とすることでコンテナの起動状態が確認できます。