링크(link)는같은 호스트에 있는 컨테이너들끼리 통신할 수 있는 방법이다.
컨테이너 간의 통신은 내부 도커 네트워크를 통해서 이루어지며,
통신은 호스트의 네트워크로 노출되지 않는다는것을 의미.
링크는 docker run 실행 후
--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 규칙을 설정 후 명시적 설정된 포트를 통하여 컨테이너가 통신할 수 있다.
링크는 컨테이너가 재시작 되더라도 그대로 유지 되지 않으며, 링크 컨테이너가 대체되면 갱신이 되지 않는다.
마스터 컨테이너가 시작되기 전에 링크 컨테이너가 시작되어야 하며 양방향 링크가 불가능하다.