はじめに
test1とtest2というコンテナを作成して2つのコンテナの通信ができる環境の作成
事前環境・GitHub
docker:18.06.1-ce
docker-compose:1.23.1
OS:Mac High Sierra 10.13.6
GitHub
https://github.com/Dhikigame/docker-compose-network
コンテナ間通信に必要なローカルネットワークの作成
$ docker network create test-network
docker-compose.ymlの作成
version: '3'
services:
test1:
build: ./test1
image: test1
container_name: test1
privileged: true
networks:
- test-network
command: /sbin/init
test2:
build: ./test2
image: test2
container_name: test2
privileged: true
networks:
- test-network
command: /sbin/init
networks:
test-network:
external: true
networks
で使用するネットワークを選択
privileged
で使うイメージのCentOS上でsystemctlコマンドの使用を有効
Dockerfileの作成
test1,test2両方に同じDockerfileを作成
FROM centos:7
ENV LC_ALL=C
# text editer install
RUN yum install -y vim
# ssh install
RUN yum -y install openssh-server
RUN yum -y install openssh-clients
# sudo install
RUN yum -y install sudo
RUN sed -i -e 's/# %wheel\tALL=(ALL)\tNOPASSWD: ALL/%wheel\tALL=(ALL)\tNOPASSWD: ALL/' /etc/sudoers
RUN sed -i -e 's/%wheel\tALL=(ALL)\tALL/# %wheel\tALL=(ALL)\tALL/' /etc/sudoers
RUN visudo -c
RUN echo "root:password" | chpasswd
# FOREGROUND change access
CMD ["/usr/bin/ssh","-D", "FOREGROUND"]
sshとscpで通信できるように必要なソフトのインストールをし、rootのパスワードを設定する(本来は公開鍵を使用してください)
CMD ["/usr/bin/ssh","-D", "FOREGROUND"]
でsshをバックグラウンドで動作させる
ディレクトリの構造
$ tree
.
├── docker-compose.yml
├── test1
│ └── Dockerfile
└── test2
└── Dockerfile
docker-composeのbuildとup
$ docker-compose build
$ docker-compose up -d
ネットワークの情報確認
$ docker network inspect test-network
[
{
"Name": "test-network",
"Id": "309cef5e5dc0f2b54c433e5fa6c32edfef6e7bf2a0cdd93ecde5c923477e9292",
"Created": "2018-11-24T19:50:38.13185134Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"586d0f87ad7d13899723334a9849d49202d44eb9fedc3cdfa2a04c13e7de3a85": {
"Name": "test2",
"EndpointID": "fbdc91b23717134f934c34a61730aa1a620f0736de2ca3706c01b173fdb37886",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
},
"8713e688f6301028b9bfd7e21814dc42b4d95c2d3d6833bea2879fc7ab7afa8c": {
"Name": "test1",
"EndpointID": "a16b7a17a58958fd66501c7b2d2b6e3284b681a2d3715ab06439289f1574ccf9",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
Containers
でtest1コンテナは172.19.0.3、test2コンテナは172.19.0.2のIPアドレスが割り当てられていることを確認
test1コンテナにログイン
$ docker exec -it test1 bash
[root@8713e688f630 /]#
適当なファイルを作り、test2コンテナに送る
[root@8713e688f630 /]# echo "Hello! My name is test1." > /root/hello.txt
[root@8713e688f630 ~]# scp /root/hello.txt 172.19.0.2:/root/
root@172.19.0.2's password:
hello.txt 100% 25 29.1KB/s 00:00
scpでtest2のコンテナにファイルを送ろうとするとパスワードが聞かれるのでDockerfileで設定したパスワードを入力
test2コンテナにsshでアクセスし、ファイルを確認
[root@8713e688f630 ~]# ssh 172.19.0.2
root@172.19.0.2's password:
[root@586d0f87ad7d ~]# cat /root/hello.txt
Hello! My name is test1.
test2のコンテナにsshでログインに成功し、送ったファイルがあることを確認
参考
https://knowledge.sakura.ad.jp/15253/
https://knowledge.sakura.ad.jp/16082/
https://knowledge.sakura.ad.jp/16862/
マンガでわかるDocker ① 〜概念・基本コマンド編〜
マンガでわかるDocker ② 〜開発環境を作ろう編〜