도커 이미지는 보통 응용 소프트웨어 별로 생성하고 컨테이너를 실행하게 되면,
서로간의 통신이 많아지고 데이터를 주고 받아야 한다.
도커 링크(link) 는 같은 호스트에 있는 컨테이너들끼리 통신할 수 있는 방법중 하나..
컨테이너간의 통신은 내부 도커 네트워크를 통해서 이루어짐.
즉, 통신은 호스트의 네트워크로는 노출되지 않는다는것을 의미.
링크(link)는 같은 호스트에 있는 컨테이너들끼리 통신할 수 있는 방법이다.
컨테이너 간의 통신은 내부 도커 네트워크를 통해서 이루어지며,
통신은 호스트의 네트워크로 노출되지 않는다는것을 의미.
--link CONTAINER:ALIAS 로 설정, CONTAINER 는 링크컨테이너(연결되는 컨테이너), ALIAS는 마스터 컨테이너(시작되는 컨테이너),
내부에서 링크 컨테이너를 참조할 때 사용하는 로컬 이름을 설정 한다.
■ Redis 컨테이너 연결하기
[root@localhost ~]# docker run -d --name myredis redis 9f28a7ae2eaa9453d665249b0b198c4ca85cf6ab... [root@localhost ~]# docker run --link myredis:redis debian env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=0524ffd6c542 REDIS_PORT=tcp://172.17.0.3:6379 REDIS_PORT_6379_TCP=tcp://172.17.0.3:6379 REDIS_PORT_6379_TCP_ADDR=172.17.0.3 REDIS_PORT_6379_TCP_PORT=6379 REDIS_PORT_6379_TCP_PROTO=tcp REDIS_NAME=/modest_mestorf/redis REDIS_ENV_GOSU_VERSION=1.10 REDIS_ENV_REDIS_VERSION=4.0.8 REDIS_ENV_REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-4.0.8.tar.gz REDIS_ENV_REDIS_DOWNLOAD_SHA=ff0c38b8c156319249fec61e5018cf5b5fe63a65b61690bec798f4c998c232ad HOME=/root
링크 컨테이너로부터 환경변수를 참조하는데, 해당 환경변수는 REDIS_ENV로 시작하게 된다.
기본적으로 링크의 구성여부와 상관없이 컨테이너들은 서로 통신이 가능하다.
컨테이너가 링크되면,
도커는 Iptables 규칙을 설정 후 명시적 설정된 포트를 통하여 컨테이너가 통신할 수 있다.
■ 웹 APP와 DB 컨테이너 연결하기
[root@localhost example]# docker run --name db -d mongo latest: Pulling from library/mongo d2ca7eff5948: Pull complete 29f0c7020f3a: Pull complete Digest: sha256:5556a788263cf8326897f2f58e63e970103fa06aa6bb15c2ffca18e374aa84c6 Status: Downloaded newer image for mongo:latest 870d766763a636be519945d55603a14a039e82f83ea992fb65051e44bca88d6a
이후 WEB 컨테이너를 생성한 후 db 컨테이너와 연결 한다.
[root@localhost example]# docker run --name web -d -p 80:80 --link db:db nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 8176e34d5d92: Pull complete 5b19c1bdd74b: Pull complete Digest: sha256:4771d09578c7c6a65299e110b3ee1c0a2592f5ea2618d23e4ffe7a4cab1ce5de Status: Downloaded newer image for nginx:latest c1bd71a08a820ae9c87c938316e16ad46c8bd5c911759f43f6ed80c488ac0c59
--link <컨테이너이름>:<이름> 형식으로 생성하였다.
컨테이너 목록을 출력하게 되면, 다음과 같이 두개의 컨테이너가 생성 되었다.
[root@localhost example]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1bd71a08a82 nginx "nginx -g 'daemon of..." About a minute ago Up About a minute 0.0.0.0:80->80/tcp web 870d766763a6 mongo "docker-entrypoint.s..." 4 minutes ago Up 4 minutes 27017/tcp db
이제 db 컨테이너와 web 컨테이너가 연결되었다.