Docker 포트 매핑과 컨테이너 연결

5638 단어 docker
Docker 포트 매핑과 컨테이너 연결
1. 포트 매핑으로 컨테이너 접근
1.1 외부 액세스 컨테이너 적용
용기를 시작할 때 대응하는 파라미터를 지정하지 않으면 용기는 외부 네트워크에서 용기 내의 응용 및 서비스에 접근할 수 없습니다.용기에서 일부 네트워크 응용 프로그램을 실행합니다. 외부에서 이 응용 프로그램에 접근하려면 -P 또는 -p 파라미터를 통해 포트 맵을 지정할 수 있습니다.-P를 사용하면 포트가 임의로 매핑됩니다.
[root@study ~ 10:31:37]# docker run -dP training/webapp
[root@study ~ 10:32:13]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
79bdebb04da9        training/webapp     "python app.py"     27 seconds ago      Up 26 seconds       0.0.0.0:32784->5000/tcp   serene_yalow
       32784          5000  
      32784         web       。

- p (소문자) 는 포트를 지정할 수 있으며, 지정한 포트에 용기만 연결할 수 있습니다.지원되는 형식은 다음과 같습니다.IP:HostPort:ContainerPort |IP::ContainerPort |HostPort:ContainerPort
1.2 모든 인터페이스 주소 매핑
  "HostPort:ContainerPort"    ,    5000        5000  。
[root@study ~ 10:32:16]# docker run -d -p 5000:5000 training/webapp
[root@study ~ 10:59:06]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
b54e5ee69d5e        training/webapp     "python app.py"     4 seconds ago       Up 2 seconds        0.0.0.0:5000->5000/tcp   pedantic_hawking

1.3 지정된 주소의 지정된 포트에 매핑
  "IP:HostPort:ContainerPort"    ,          。  localhost  127.0.0.1
[root@study ~ 11:01:14]# docker run -d -p 127.0.0.1:5000:5000 training/webapp
e1200e4bb26179e7a6d77a0b53f9c2d066b37e78994024722e707a482a1bf5bf
[root@study ~ 11:01:17]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES
e1200e4bb261        training/webapp     "python app.py"     4 seconds ago       Up 2 seconds        127.0.0.1:5000->5000/tcp   blissful_hugle

1.4 지정된 주소의 모든 포트에 매핑
  "IP::ContainerPort"    ,  localhost         5000  。
[root@study ~ 11:01:20]# docker run -d -p 127.0.0.1::5000 training/webapp
dbca5fe5b4e7684060541b56e9d7522b7ca3227ba36d77c500eaed8bbdb8026c
[root@study ~ 11:02:38]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                       NAMES
dbca5fe5b4e7        training/webapp     "python app.py"     4 seconds ago       Up 2 seconds        127.0.0.1:32768->5000/tcp   recursing_murdock

     udp     udp  
[root@study ~ 11:02:41]# docker run -d -p 127.0.0.1::5000/udp training/webapp
5f09400160068e6fe852230b5f007d650c7274f40aafc2b960a5a1ebde9128f7
[root@study ~ 11:03:01]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                 NAMES
5f0940016006        training/webapp     "python app.py"     2 seconds ago       Up 1 second         5000/tcp, 127.0.0.1:32768->5000/udp   dreamy_hellman

1.5 매핑 포트 구성 보기
docker port 사용
[root@study ~ 11:05:45]# docker port `docker ps -lq`
5000/udp -> 127.0.0.1:32768

2. 상호 연결 메커니즘으로 편리한 상호 방문을 실현한다.
용기의 상호 연결은 여러 용기의 응용을 신속하게 상호작용하게 하는 방식이다.이것은 원본과 수신 용기 사이에 연결 관계를 만들고 수신 용기는 용기 이름을 통해 원본 용기에 빠르게 접근할 수 있으며 구체적인 IP 주소를 지정하지 않아도 된다.
2.1 사용자 정의 컨테이너 이름
연결 시스템은 용기의 이름에 따라 실행됩니다. 용기를 만들 때 기본적으로 하나의 이름을 분배하지만, 용기 이름을 사용자 정의해서 이 용기의 응용을 기억할 수 있습니다.
  --name       
[root@study ~ 11:12:29]# docker run -d -P --name web training/webapp
[root@study ~ 11:12:51]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
1a3c7a33c554        training/webapp     "python app.py"     8 seconds ago       Up 7 seconds        0.0.0.0:32785->5000/tcp   web
[root@study ~ 11:13:09]# docker inspect -f "{{.Name}}" 1a3c7a33c554
/web

2.2 컨테이너 연결
사용-link 매개 변수는 용기 간의 안전한 상호작용을 할 수 있습니다 -link name:alias alias는 별명입니다
           
[root@study ~ 11:29:47]# docker run -d --name db training/postgres
      web  ,    db  
[root@study ~ 11:37:26]# docker run -d -P --name web --link db:db training/webapp
[root@study ~ 11:46:37]# docker inspect -f "{{.HostConfig.Links}}" web
[/db:/web/db]

Docker는 연결된 두 용기 사이에 가상 채널을 만들고 포트를 호스트에 비추지 않는 것과 같다.이로써 데이터베이스 서비스 포트가 외부 네트워크에 노출되는 것을 피했다.
2.3 Dcoker는 두 가지 방법으로 컨테이너에 대한 연결 정보를 공개합니다.
  • 환경 변수 업데이트;
  • 업데이트/etc/hosts 파일
  •   env  web      ,  DB_         web    db    ,           。
    [root@study ~ 11:56:04]# docker exec web env
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=dc43842d75b3
    DB_PORT=tcp://172.17.0.4:5432
    DB_PORT_5432_TCP=tcp://172.17.0.4:5432
    DB_PORT_5432_TCP_ADDR=172.17.0.4
    DB_PORT_5432_TCP_PORT=5432
    DB_PORT_5432_TCP_PROTO=tcp
    DB_NAME=/web/db
    DB_ENV_PG_VERSION=9.3
    HOME=/root
    

    환경 변수를 제외하고 Docker는 부모 용기의/etc/hosts 파일에 host 정보를 추가합니다.
    [root@study ~ 12:04:01]# docker exec web 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.4	db 28f8260deec3		#db  
    172.17.0.3	dc43842d75b3		#web  id
    

    웹 용기ping 테스트
    [root@study ~ 12:04:53]# docker exec web ping db
    PING db (172.17.0.4) 56(84) bytes of data.
    64 bytes from db (172.17.0.4): icmp_seq=1 ttl=64 time=0.659 ms
    64 bytes from db (172.17.0.4): icmp_seq=2 ttl=64 time=0.266 m
    

    좋은 웹페이지 즐겨찾기