링크(--link)
- 컨테이너끼리 서로 통신하려면 기본적으로 같은 bridge 드라이버 네트워크를 사용
- 종종 컨테이너 간 이름 또는 별칭으로 통신해야하는 경우도 있는데 이런 경우에 링크 기능을 사용
링크를 사용하여 os1 컨테이너가 web1 와 통신할 때 링크를 사용
[root@docker ~]# docker rm -f $(docker ps -aq)
[root@docker ~]# docker run --name web1 -d httpd
886997eb2e59ce48989f047e48a90571060b8449a8ffc3f202fa0ec84d69fd8d
[root@docker ~]# docker run -itd --name os1 --link web1 centos
7a3fd6f0c1da1b693d710307e238376952f59f859138ca2d3c04be3aa17c15e1
[root@docker ~]# docker exec os1 curl web1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 45 100 45 0 0 22500 0 --:--:-- --:--:-- --:--:-- 22500
<html><body><h1>It works!</h1></body></html>
[root@docker ~]# docker exec os1 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 web1 886997eb2e59
172.17.0.3 7a3fd6f0c1da
- os1 컨테이너가 web1 이라는 이름으로 통신할 수 있는 이유는 /etc/hosts 파일에 정의되어 있기 때문
--link 옵션으로 os10에서 web1을 apache로 별칭 사용
[root@docker ~]# docker run --name os10 -itd --link web1:apache centos
5a3f9fd3f9c8f0cb75bfb2387e88fba206eb8e5d008e93bc2ec72763b9b48408
[root@docker ~]# docker exec os10 curl apache
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 45 100 45 0 0 45000 0 --:--:-- --:--:-- --:--:-- 45000
<html><body><h1>It works!</h1></body></html>
[root@docker ~]# docker exec os10 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 apache 886997eb2e59 web1
172.17.0.4 5a3f9fd3f9c8
포트 포워딩 (docker run -p)
- Bridge 네트워크를 사용하는 모든 컨테이너는 외부에서 접근할 때 포트포워딩을 해야 한다.
- 포트 포워딩을 하려면 컨테이너를 실행할 때 -p 옵션을 사용한다.
web2 컨테이너를 실행하면서 호스트의 8080 포트로 접근했을 때 컨테이너의 80번 포트로 전달하는 포트포워딩 설정
[root@docker ~]# docker run -d --name web2 -p 8080:80 httpd
829d5645592c6e2c998a100b828d9c200828d091e3d04a349cd29a7aea01c08d
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
829d5645592c httpd "httpd-foreground" 8 seconds ago Up 8 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp web2
[root@docker ~]# cat > index.html
This is 8080 -> 80
[root@docker ~]# docker container cp index.html web2:/usr/local/apache2/htdocs/
[root@docker ~]# docker inspect web2 | grep IPAaddress
"IPAddress": "172.17.0.5",
[root@docker ~]# curl 172.17.0.5:8080
curl: (7) Failed connect to 172.17.0.5:8080; Connection refused
[root@docker ~]# curl localhost:8080
This is 8080 -> 80
- docker ps 에서 PORTS 필드 값이 0.0.0.0 은 호스트 IP 를 나타내며 :8080 은 호스트의 포트를 나타냄.
- 포트포워딩이 설정되면 로컬호스트 뿐만 아니라 이 호스트에 접근할 수 있는 모든 시스템에서 접근 가능.