You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Current »

도커 이미지는 보통 응용 소프트웨어 별로 생성하고 컨테이너를 실행하게 되면,

서로간의 통신이 많아지고 데이터를 주고 받아야 한다.

도커 링크(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 컨테이너가 연결되었다.







  • No labels