도커 사용 요약 (b)에 고정 표시기 고정 표시기 데이터웨어 하우스 관리 및 컨테이너 포트 매핑 상호

1 도커 저장소 액세스

미러링 타사
고정 표시기 계정을 로그인 할 필요가

root@slave1:/home/xxx/Documents# docker pull index.tenxcloud.com/docker_library/node:latest
Error response from daemon: pull access denied for index.tenxcloud.com/docker_library/node, repository does not exist or may require 'docker login'

로컬 개인 창고 설정
1) 사립 고등학교 창고의 레지스트리 만들기 위해 거울을 사용
도커를 설치 한 후를, 그것은 공식에 의해 제공 될 수 registry단순히 지역의 민간웨어 하우스 환경을 설정 거울 :

root@slave1:/home/xxx/Documents# docker run -d -p 5000:5000 registry:2    #自动下载井启动一个registry容器,创建本地的私有仓库服务。
Unable to find image 'registry:2' locally
2: Pulling from library/registry
c87736221ed0: Pull complete
1cc8e0bb44df: Pull complete
54d33bcb37f5: Pull complete
e8afc091c171: Pull complete
b4541f6d3db6: Pull complete
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:2
40761724cd46b129753d1d74bf51a4744d609b68a00edfc5179a922510fab1e7

모든 컨테이너보기

root@slave1:/home/xxx/Documents# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS                    NAMES
40761724cd46        registry:2          "/entrypoint.sh /etc…"   10 minutes ago      Up 10 minutes                    0.0.0.0:5000->5000/tcp   dazzling_hopper

기본적으로 창고는 컨테이너에 만들어집니다 /var/lib/registry디렉토리. 당신은 할 수 -v로컬 경로 지정된 매개 변수에 저장된 이미지 파일을합니다. 에 업로드 된 이미지 /opt/data/registry디렉토리 :

docker run -d -p 5000 5000 -v /opt / data/registry:/var/l ib/registry registry :2

로컬웨어 하우스의이 시점에서 포트 5000에서 수신, 개인 서비스를 시작합니다.
2) 창고 관리
뷰 미러 기존

root@slave1:/home/xxx/Documents# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               5e13f8dd4c1a        6 weeks ago         120MB

사용하여 docker tag이미지 표시에 명령을 10.0.2.2:5000/test(형식 docker tag IMAGE [:TAG] [REGISTRY.HOST/] [USERNAME/] NAME [:TAG ])

root@slave1:/home/xxx/Documents# docker tag ubuntu:16.04 10.0.2.2:5000/test
root@slave1:/home/xxx/Documents# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
10.0.2.2:5000/test   latest              5e13f8dd4c1a        6 weeks ago         120MB
ubuntu               16.04               5e13f8dd4c1a        6 weeks ago         120MB

사용하여 docker push업로드 태그 이미지를 :

# docker push 10.0.2.2:5000/test

A를 curl보기웨어 하우스 10.0.2.2:5000거울 :

# curl http://10.0.2.2:5000/v2/search

업로드되면, 당신은 어떤을의에 액세스 할 수 있습니다 10.0.2.2이 이미지를 다운로드하기 위해 기계 주소를. 높은 보안 요구 사항의 도커 비교적 새로운 버전웨어 하우스 지원하게됩니다 SSL/TLS인증서를. 개인 창고 내부 사용을 위해, 당신은 또는 창고에 대한 보안 검사 떨어져 인증서 자체를 구성 할 수 있습니다. 첫째, 수정 Docker daemon다음과 같은 매개 변수를 추가, 시작 매개 변수를, 민간 창고에 대한 신뢰를 표현, 더 안전 인증 검사 : DOCKER_OPTS;”-- insecure-registry 10.0.2.2:500 ”다시 시작 후 도커 서비스, 로컬 비공개로 창고에서 이미지를 다운로드하지

root@slave1:/home/xxx/Documents#  service docker restart
root@slave1:/home/xxx/Documents# docker pull 10.0.2.2:5000/test
root@slave1:/home/xxx/Documents# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
10.0.2.2:5000/test   latest              5e13f8dd4c1a        6 weeks ago         120MB

다운로드 후, 당신은 또한보다 일반적인 태그를 추가 할 수 있습니다 ubuntu: 16. 04이후의 사용을 용이하게하기 위해 :

root@slave1:/home/xxx/Documents# docker tag 10.0.2.2:5000/test ubuntu:16.04

2 도커 데이터 관리

고정 표시기 자주 영구 데이터해야하거나, 데이터는 반드시 컨테이너의 데이터 관리 작업을 포함 다수의 용기, 공유 할 필요가 프로덕션 환경에서 사용할 수 있습니다.
두 가지 방법으로 주로 관리 데이터 컨테이너 :
포트 데이터 볼륨 ( Data Volumes) : 로컬 호스트 환경에 직접 매핑 컨테이너 데이터,
포트 데이터 볼륨 컨테이너 ( Data Volume Containers) : 특정 컨테이너 볼륨을 사용하여 유지 보수 데이터입니다.
이 컨테이너에서 데이터 볼륨을 생성하고 컨테이너에 데이터 볼륨 로컬 디렉토리 나 파일을 마운트하는 방법에 대해 설명합니다. 다음으로, 컨테이너 선박의 데이터 볼륨을 사용하고, 호스트, 컨테이너와 컨테이너, 백업 및 복원 데이터간에 데이터를 공유하는 방법에 대해 설명합니다.
데이터 볼륨
데이터 볼륨 ( Data Volumes) 특정 디렉토리에 사용되는 용기, 그것은 개최 운영 시스템 디렉토리는 직접 리눅스와 유사한 용기로 매핑 mount행동.
데이터 량은 많은 유용한 기능들을 제공 할 수
포트 데이터 볼륨 데이터는 워크의 사이에 전송 될 수있는 것은 용기와 용기의 용이하고 효율적인 재사용하게,
데이터 볼륨 변경 내의 데이터의 입 바로 적용 것, 또는 용기에서 동작 하는지를 지역 운영,
포트 업데이트는 이미지 데이터 볼륨에 영향을 미치지 않습니다, 응용 프로그램 솔루션은 열린 트랜잭션을 선택,
포트 볼륨은 용기를 사용하지 않을 때까지 안전하게 언로드 할 수있을 것입니다.
데이터 볼륨 만들기
부두 노동자가 제공하는 volume데이터 볼륨을 관리하기 위해 하위 명령을, 다음 명령은 신속하게 데이터 볼륨을 로컬로 만들 수 있습니다 :

root@slave1:/home/xxx/Documents# docker volume create -d local test
test

보기 /var/lib/docker /volumes경로, 당신은 생성 된 볼륨 위치 데이터를 찾을 수 있습니다 :

root@slave1:/home/xxx/Documents# ls -l /var/lib/docker/volumes
-rw------- 1 root root 32768 9月  10 11:04 metadata.db
drwxr-xr-x 3 root root  4096 9月  10 11:04 test

뿐만 아니라 create하위 명령 밖에서 docker volume도 지원 inspect(세부 사항 참조), ls(목록 사용 가능한 데이터 볼륨을), prune(청소 원치 않는 데이터 볼륨을), rm(삭제 데이터 볼륨) 등

root@slave1:/home/xxx/Documents# docker volume inspect test  #数据卷查看详细信息
[
    {
        "CreatedAt": "2019-09-10T11:04:12+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/test/_data",
        "Name": "test",
        "Options": {},
        "Scope": "local"
    }
]
root@slave1:/home/xxx/Documents# docker volume ls  #列出已有数据卷
DRIVER              VOLUME NAME
local               8ed823897243d9ef96538d5362760c81c8612e7a35380dfb599178e612325b93
local               test

데이터 볼륨 바인딩
제외한 volume로컬 호스트가 데이터 볼륨으로 용기 내의 임의 경로를 장착 할 때 용기를 만들 수도 부속 명령의 데이터 량을하지만,이 양식을 작성하는 데이터 량은 데이터 량을 결합이라한다.
함께 docker [container] run시간을 명령, 당신은 사용할 수있는 -mount데이터 볼륨을 사용하는 옵션을 선택합니다.
- mount: 옵션으로서, 데이터 용량의 세 유형을 지원
포트 volume호스트 매핑 정상 데이터 량 : /var/ lib /docke r /volumes상기 경로
bind데이터 양, 지정된 경로에 매핑 된 호스트 바인딩;
tmpfs: 임시 데이터 량만을 메모리에 존재한다.
아래 사용 training/webapp마운트 할 웹 컨테이너의 이미지를 생성하고, 컨테이너의 데이터 볼륨을 생성 /opt/webapp디렉토리를 :

root@slave1:/home/xxx/Documents# docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py  #报错 不存在/webapp 使
用下面命令之后 再试一下

위의 명령은 이전에 사용한 것과 동일 -v용기 내의 데이터 량을 생성 할 수 태그 :

root@slave1:/home/xxx/Documents# docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
10bbbc0fc0ff: Pull complete
fca59b508e9f: Pull complete
e7ae2541b15b: Pull complete
9dd97ef58ce9: Pull complete
a4c1b0cb7af7: Pull complete
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
4bcc83dac6efb860a4590fb1c3540759876417714c52bb33a73013ec38414a1f

사용 training/webapp거울 컨테이너를 만들고 마운트 컨테이너의 데이터 볼륨을 생성 WEB1 /opt/webapp디렉토리를 :

root@slave1:/home/xxx/Documents# docker run -d -P --name web1 --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
d7a066b7f5aaf384ac5871d50c94e4985107869b34129181d9ebd188f010501c

이 기능 만들기 응용 프로그램 테스트 시간이 매우 편리합니다, 예를 들어, 사용자가 실시간으로 업데이트되는 로컬 디렉토리에 프로그램이나 데이터의 수를 놓은 다음 실행하고 컨테이너 내에서 사용할 수 있습니다.
또한, 로컬 디렉토리 경로가 절대이어야 컨테이너 경로 상대 경로 일 수있다. 디렉토리가 존재하지 않는 경우, 고정 표시기 자동으로 생성됩니다.
도커 마운트 기본 권한 데이터 볼륨 (읽기 rw, 사용자도 가능) ro읽기 전용 지정

root@slave1:/home/xxx/Documents# docker run -d -P --name d7a066b7f5aaf384ac5871d50c94e4985107869b34129181d9ebd188f010501c -v /webapp:/opt/webapp:ro training/webapp python app.py
ee35606b7e5dec26e544d60878f94137973c691ad0821a8604730a95f97f3863

그는 추가 : ro그 후, 용기에 장착 된 데이터 볼륨 내의 데이터를 변경할 수 없습니다.
파일 컨테이너에 직접 장착하는 경우, 파일은 다음과 같은 도구를 편집 vi또는 sed - - in place파일이 원인, 시간 수 있습니다 inode변경할 수 있습니다. 도커는 이후 1.1.0에서이 보고서는 오류 메시지로 이어질 것입니다. 따라서 권장되는 방법은 직접 어디에 파일 컨테이너에 디렉토리를 마운트하는 것입니다.

데이터 볼륨 컨테이너
사용자가 복수의 컨테이너 사이에 지속적으로 업데이트되고 일부 데이터를 공유해야하는 경우는, 가장 쉬운 방법은 데이터 볼륨 컨테이너를 사용하는 것입니다. 데이터 볼륨 컨테이너는 컨테이너이지만, 그 목적은 다른 용기를 장착하는 특수 데이터 볼륨을 제공하는 것이다.
우선, 용기의 데이터 볼륨을 생성 dbdata하고, 마운트 데이터 볼륨을 생성한다 /dbdata:

root@slave1:/home/xxx/Documents# docker run -it -v /dbdata --name dbdata ubuntu
root@257d18f2f4dd:/#

보기 /dbdata카탈로그 :

root@257d18f2f4dd:/# ls
bin   dbdata  etc   lib    media  opt   root  sbin  sys  usr
boot  dev     home  lib64  mnt    proc  run   srv   tmp  var

이어서, 다른 용기에 사용될 수있다 --volumes-from탑재 dbdata예컨대 생성, 데이터 볼륨 용기 dbldb2및 용기로부터 2 dbdata데이터 볼륨을 탑재 용기 :

root@slave1:/home/xxx/Documents# docker run -it --volumes-from dbdata --name db1 ubuntu
root@1709a48e760e:/# exit
exit
root@slave1:/home/xxx/Documents# docker run -it --volumes-from dbdata --name db2 ubuntu
root@94eeab14f62c:/# exit
exit

이 경우, 상기 용기 dbl와는 db2동일한 데이터로 부피 장착 /dbdata디렉토리, 어느 디렉토리의 세 개의 용기에 기록하고, 다른 용기는 알 수
있는 dbdata컨테이너의 작성 test파일 :

root@slave1:/home/xxx/Documents# docker start 94eeab14f62c   #启动db2容器
94eeab14f62c
root@slave1:/home/xxx/Documents# docker attach 94eeab14f62c  #进入容器
root@94eeab14f62c:/# ls                                      #查看目录
bin   dbdata  etc   lib    media  opt   root  sbin  sys  usr
boot  dev     home  lib64  mnt    proc  run   srv   tmp  var
root@94eeab14f62c:/# cd /dbdata                              #进入dbdata目录
root@94eeab14f62c:/dbdata# touch test                        #创建test文件
root@94eeab14f62c:/dbdata# ls
test

에서 dbl1컨테이너의보기 그것은 :

root@slave1:/home/xxx/Documents# docker run -it --volumes-from dbdata --name 1709a48e760e ubuntu  #db1容器
root@6cc5d2d5ad79:/# ls
bin   dbdata  etc   lib    media  opt   root  sbin  sys  usr
boot  dev     home  lib64  mnt    proc  run   srv   tmp  var
root@6cc5d2d5ad79:/# cd dbdata
root@6cc5d2d5ad79:/dbdata# ls
test

또는 상기 사용 attach입력 할 명령을 db1선박보기 :

root@slave1:/home/xxx/Documents# docker start 1709a48e760e   #启动db1容器
1709a48e760e
root@slave1:/home/xxx/Documents# docker attach 1709a48e760e
root@6cc5d2d5ad79:/# ls
bin   dbdata  etc   lib    media  opt   root  sbin  sys  usr
boot  dev     home  lib64  mnt    proc  run   srv   tmp  var
root@6cc5d2d5ad79:/# cd dbdata
root@6cc5d2d5ad79:/dbdata# ls
test

참고 : 사용이 attach컨테이너를 입력 할 때, 당신은 그렇지 않으면 다음 사항을 나타납니다, 컨테이너를 시작해야합니다 :

root@slave1:/home/xxx/Documents# docker attach 1709a48e760e
You cannot attach to a stopped container, start it first

반복 사용 가능 --volumes-from용기의 복수의 데이터 볼륨을 복수 탑재 파라미터, 또한 다른 용기 볼륨에서 장착 될 수있는 용기의 데이터 볼륨을 탑재했다

root@slave1:/home/xxx/Documents# docker run -d --name db3 --volumes-from db1 training/postgres
Unable to find image 'training/postgres:latest' locally
latest: Pulling from training/postgres
a3ed95caeb02: Pull complete
6e71c809542e: Pull complete
2978d9af87ba: Pull complete
e1bca35b062f: Pull complete
500b6decf741: Pull complete
74b14ef2151f: Pull complete
7afd5ed3826e: Pull complete
3c69bb244f5e: Pull complete
d86f9ec5aedf: Pull complete
010fabf20157: Pull complete
Digest: sha256:a945dc6dcfbc8d009c3d972931608344b76c2870ce796da00a827bd50791907e
Status: Downloaded newer image for training/postgres:latest
c06bced08bd6946ce2167eb7f02dcf3da796c540b0eafb380951d57a3ae4ecd2

사용이 참고 --volumes-from실행 상태를 유지 장착 할 필요가 없습니다 컨테이너 자체의 데이터 볼륨의 매개 변수를.
당신이 탑재 된 컨테이너를 제거하면 (를 포함하여 dbdata, db ``和DB2 ),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用관련 컨테이너를 지정하는 명령을 삭제 -v` 독 ER RM
자유롭게 아래, 특정 이동 작업과 컨테이너 사이의 데이터 볼륨을 업그레이드하는 사용자 컨테이너의 데이터 볼륨을 허용하여 가.
데이터 마이그레이션 데이터 량 용기를 이용하여
데이터의 백업, 복원, 데이터 이동을 달성하기 위해, 상기 용기 부피의 데이터 량을 사용한다.

1) 백업하는
백업 다음 명령을 이용하여 dbdata데이터 량 용기 내의 데이터 볼륨 :

root@slave1:/home/xxx/Documents# docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata

첫째, 컨테이너 근로자 사용 우분투 미러를 만듭니다. 은 Using --volumes-from dbdata매개하는 탑재 용기 작업자 될 dbdata컨테이너 볼륨 데이터 (즉, dbdata데이터 량) 상기 사용 -v$ (pwd) : /bac kup/ backup 디렉토리 컨테이너 작업자 현재 로컬 디렉토리 마운트 파라미터.
컨테이너가 사용하는 근로자를 시작한 후 tar cvf /backup/backup.tar /dbdata명령을 /dbdata컨테이너에서 백업 내용 /backup/backup. tar즉 현재 디렉토리 홈 호스트 backup.tar.

2) 복구
첫 번째 데이터의 체적을 갖는 컨테이너를 작성 컨테이너에 데이터를 복원 dbdata2:

root@slave1:/home/xxx/Documents# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

그런 다음, 또 다른 새로운 컨테이너를 만들 마운트 dbdata2컨테이너를 사용할 untar컨테이너에 탑재 된 볼륨에 백업 파일을 압축을 풉니 다 :

root@slave1:/home/xxx/Documents# docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
7c9d20b9b6cd: Pull complete
Digest: sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e
Status: Downloaded newer image for busybox:latest
dbdata/
dbdata/test

운전 중 컨테이너 실패, 사용자가 손실이 발생 데이터에 대해 걱정할 필요가없는 경우에도 데이터 볼륨과 용기 및 기타 데이터 공유, 백업에서 컨테이너에 데이터 볼륨 및으로 이러한 메커니즘을 통해, 복원 작업 만 빨리 할 수있는 컨테이너를 다시 작성해야 .

3 컨테이너 포트 매핑 상호

실제로, 종종 상황이 여러 서비스 구성 요소가 함께 종종 다른 서비스에 대한 복수의 용기 사이에 서로에 액세스 할 수 있어야 컨테이너를 작동 필요로 발생합니다. 네트워크 접속을 통해보다 고정 표시기의 외부뿐만 아니라 서비스 액세스의 기본적인 요구를 충족하기 위해 두 개의 매우 편리한 기능을 제공 맵핑 서비스 애플리케이션 컨테이너의 로컬 호스트 포트 호스트 있도록이고, 다른 하나는 복수의 콘테이너 사이의 상호 접속을 달성하기위한기구이며 컨테이너 이름에 빠르게 액세스 할 수 있습니다.
용기의 접근 포트의 매핑
1) 외부 용기에 액세스 적용된
해당 파라미터는 지정되어 있지 않은 경우, 상기 외부 용기는 네트워크를 통해 컨테이너 내의 네트워크 서비스 및 애플리케이션에 액세스 할 수없는, 컨테이너 기동시. 일부 네트워크 응용 프로그램은 컨테이너에서 실행하는 경우, 외부 액세스를들을 수 있도록, 또는 할 수있다 -P -p 매개 변수를 참조하는
설정 포트 매핑을.

root@slave1:/home/xxx/Documents# docker run -d -P training/webapp python app.py
419bf896b24023396c411dc6e9718c415505f69184fa807074b4a9b0eeec7ab3
root@slave1:/home/zyy/Documents# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
419bf896b240        training/webapp     "python app.py"     9 seconds ago       Up 7 seconds        0.0.0.0:32771->5000/tcp   hardcore_shamir

docker ps볼 수, 로컬 호스트 32771은 컨테이너의 포트 5000에 매핑됩니다. 호스트 포트 호스트 인터페이스 사이 32,771 방문 제공된 용기 웹 애플리케이션에 액세스한다.
또한, 당신은 수있는 docker logs명령의 응용 프로그램에 대한 정보를 볼 수 :

root@slave1:/home/xxx/Documents# docker logs -f hardcore_shamir
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

참고 : -p당신은 용기를 결합 할 수있는 특정 포트에 포트를 매핑 할 지정하고 있습니다. 지원되는 형식입니다 IP:HostPort:ContainerPortIIP:: ContainerPortIHostPort:ContainerPort.

2) 모든 인터페이스 주소에 매핑
하여 HostPort:ContainerPort컨테이너 포트 5000에 포트 5000 형식으로 현지지도를, 다음 명령을 실행합니다 :

root@slave1:/home/xxx/Documents# docker run -d -p 5000:5000 training/webapp python app.py
2ebb57dad1d4430133f56c8a9e238b9c0622d4036c2fd063fd01cc2d8de70e5d

이 때, 기본은 모든 인터페이스에있는 모든 로컬 주소를 바인딩합니다. 를 사용하여 여러 -p마커는 여러 포트에 바인딩 할 수 있습니다. 예를 들면 :

docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

3) 지정된 포트 주소 지정에
사용될 수있는 IP:HostPart:ContainerPort이러한 어드레스 특정 로컬 호스트 어드레스 맵을 지정하는 형식 127.0.0.1:

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

4) 모든 포트가 지정된 주소에 매핑

사용하여 IP::ContainerPort임의의 포트에 결합 로컬 호스트의 포트 5000 로컬 호스트 자동 용기 포트에 할당된다 :

root@slave1:/home/xxx/Documents# docker run -d -p 127.0.0.1::5000 training/webapp python app.py
13c8e9e5123b6731c91b7e60cd95050d8067dd23420c828cb7508ee711320170

당신은 또한 사용할 수있는 udp지정하는 태그를 udp포트 :

root@slave1:/home/xxx/Documents# docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
2f0c22deff8877fe1b711446e536edee1117a4e27b4b00f2e8787267d18a3059

5) 포트 매핑 구성을 확인

사용하여 docker port현재 포트 구성 매핑을 볼 수, 당신은 또한 바인딩 주소를 볼 수 있습니다

root@slave1:/home/xxx/Documents# docker port hardcore_shamir 5000
0.0.0.0:32771

또한, 컨테이너 자체의 내부 네트워크를 가지며 IP를 사용하여 해결 docker [container] inspect+容器ID용기를 수득 할 수있는 특정 정보.

인터넷 메커니즘은 빠른 방문을 달성하기 위해
상호 컨테이너가 더 용기가 당신이 상호 작용하는 빠른 방법을 수행 할 수있는 응용 프로그램입니다 (링크 참조). 이것은 소스와 수신기 간의 접속 관계를 생성하고, 상기 용기를 신속하게 특정 IP 주소를 지정하지 않고, 컨테이너 이름 소스 용기에 액세스 할 수있다.
이후 1) 사용자 용기
연결 장치는 용기의 이름에 기초하여 수행된다. 첫째, 우리는 인기를 얻기 쉬운 이름을 컨테이너를 정의 할 필요가있다. 컨테이너 작성시 있지만, 시스템은 기본 이름을 지정하지만 사용자 정의 명명 컨테이너는 두 가지 장점이 있습니다
- 한 눈에, 그런 그에게 이름을 웹을 줄 수있는 웹 응용 프로그램 컨테이너로, 기억하기 더 쉽게 사용자 정의 이름을;
-시 (심지어 부팅) 할 때 다른 용기에 연결하기 위해, 당신은 웹 컨테이너 DB 컨테이너에 연결로, 선박의 이름을 변경하지 않고도 사용할 수 있습니다.

사용하여 --name사용자 정의 이름을 지정할 수 있습니다 표시된 용기를 :

root@slave1:/home/xxx/Documents# docker run -d -P --name web training/webapp python app.py
511678ee937939e33c935d364375edc3b61acd3e299c6b2b63e65b2a2523f48a

사용 docker ps설정의 이름을 확인합니다 :

root@slave1:/home/xxx/Documents# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                     NAMES
511678ee9379        training/webapp     "python app.py"     About a minute ago   Up About a minute   0.0.0.0:32772->5000/tcp   web

또한 사용하는 docker [container) inspect선박의 이름을 볼 수 :

root@slave1:/home/xxx/Documents# docker  inspect -f "{{.Name}}" 511678ee9379 
/web

참고 : 컨테이너의 이름은 고유합니다. 당신은 당신이 다시 웹 이름을 사용하고자 할 때 지정 선박은, 웹을 호출하는 경우, 당신은 사용할 필요가 docker rm삭제 명령 전에 컨테이너에 의해 생성 된 같은 이름을.
2) 상호 연결된 용기
를 사용 --link파라미터 안전하게 용기 간의 상호 작용을 허용한다. 새 데이터베이스 컨테이너를 만듭니다

root@slave1:/home/xxx/Documents# docker run -d --name db training/postgres
048e7b6c61e9ec56e0462c5076d09d00255d932c380bfc4c9127958143777e42

root@slave1:/home/xxx/Documents# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
048e7b6c61e9        training/postgres   "su postgres -c '/us…"   About a minute ago   Up About a minute   5432/tcp            db

웹 컨테이너 생성 이전에 삭제 :

root@slave1:/home/xxx/Documents# docker rm -f web
web

새로운 웹 컨테이너를 만들고 DB 용기에 연결 :

root@slave1:/home/xxx/Documents# docker run -d -P --name web --link db:db training/webapp python app.py
e88a580668bc18733f6f685817430b37e8f072a1aaf08462f7cb3c0dc3c9fc3b

인터넷 관계의이 시점, DB 컨테이너 및 웹 컨테이너 생성에서. --link형식 매개 변수 --link name: alias이름은 이름입니다, 용기를 연결하는, 별명은 별명입니다. 지금 사용하여 docker ps연결 컨테이너를 볼 수 :

root@slave1:/home/xxx/Documents# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
e88a580668bc        training/webapp     "python app.py"          2 minutes ago       Up About a minute   0.0.0.0:32773->5000/tcp              web
048e7b6c61e9        training/postgres   "su postgres -c '/us…"   5 minutes ago       Up 5 minutes        5432/tcp                             db

사용자 정의라는 이름의 컨테이너를 참조하십시오 : DB 및 웹, 이름 dB 데시벨 컨테이너 목록은 웹 / DB입니다. 이것은 DB 컨테이너에 링크 된 웹 컨테이너, 웹 컨테이너 정보 DB 컨테이너에 대한 액세스를 허용된다는 것을 의미합니다.
두 개의 상호 연결된 용기 사이 도커 상당 가상 머신 채널을 생성하고 그 호스트의 호스트 포트에 대응하지 않는다. 그것은 시작 dB 컨테이너에서 사용하지 않은 -p-P따라서 외부 네트워크에 노출 데이터베이스 서비스 포트를 피하고, 마크.
: 고정 표시기는 두 가지 방법으로 컨테이너 연결 정보 개시하고
, 구강 갱신 환경 변수
입에 업데이트 /etc/hosts파일을.
사용하여 env웹 컨테이너 환경 변수를 보려면 명령을 :

root@slave1:/home/xxx/Documents# docker run --rm --name web2 --link db:db training/webapp env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=226b133d997a
DB_PORT=tcp://172.17.0.2:5432
DB_PORT_5432_TCP=tcp://172.17.0.2:5432
DB_PORT_5432_TCP_ADDR=172.17.0.2
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_PROTO=tcp
DB_NAME=/web2/db
DB_ENV_PG_VERSION=9.3
HOME=/root

웹 컨테이너의 시작에 대한 환경 변수가 접속되고 DB_ DB 용기 대문자 연결 별명 접두사. 환경 변수에 추가하여, 도커는 호스트 부모 컨테이너에 정보를 추가 /etc/hosts파일. 다음은 웹 부모 컨테이너입니다 hosts파일 :

root@slave1:/home/xxx/Documents# docker run -t -i --rm --link db:db training/webapp /bin/bash
root@e9e98e537bec:/opt/webapp# 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    db b3c84640e83a
172.17.0.4    e9e98e537bec

두 호스트는 정보 DB는 IP와 호스트 이름의 첫 번째 선박이고, 두 번째는 기본 호스트 이름과 자신의 ID와 웹 컨테이너, 웹 컨테이너가 있습니다.
웹은 선박에 설치 될 수있다 ping컨테이너 DB를 테스트하는 명령와 통신 :

root@e9e98e537bec:/opt/webapp# apt-get install -yqq inetutils-ping
(Reading database ... 18233 files and directories currently installed.)
Removing ubuntu-minimal (1.325) ...
Removing iputils-ping (3:20121221-4ubuntu1.1) ...
Selecting previously unselected package inetutils-ping.
(Reading database ... 18221 files and directories currently installed.)
Preparing to unpack .../inetutils-ping_2%3a1.9.2-1_amd64.deb ...
Unpacking inetutils-ping (2:1.9.2-1) ...
Setting up inetutils-ping (2:1.9.2-1) ...
root@e9e98e537bec:/opt/webapp# ping db
PING db (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.528 ms
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.193 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.112 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.207 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.114 ms
64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.175 ms
64 bytes from 172.17.0.2: icmp_seq=6 ttl=64 time=0.115 ms
64 bytes from 172.17.0.2: icmp_seq=7 ttl=64 time=0.113 ms
64 bytes from 172.17.0.2: icmp_seq=8 ttl=64 time=0.114 ms
64 bytes from 172.17.0.2: icmp_seq=9 ttl=64 time=0.115 ms
64 bytes from 172.17.0.2: icmp_seq=10 ttl=64 time=0.115 ms
64 bytes from 172.17.0.2: icmp_seq=11 ttl=64 time=0.222 ms
64 bytes from 172.17.0.2: icmp_seq=12 ttl=64 time=0.287 ms
64 bytes from 172.17.0.2: icmp_seq=13 ttl=64 time=0.116 ms
64 bytes from 172.17.0.2: icmp_seq=14 ttl=64 time=0.210 ms
64 bytes from 172.17.0.2: icmp_seq=15 ttl=64 time=0.115 ms
^C--- db ping statistics ---
16 packets transmitted, 16 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.112/0.178/0.528/0.105 ms

사용 pingDB 컨테이너를 테스트하기 위해, 그것은 172.17.0.2에 해결됩니다. 사용자는 웹 복수 동일한 컨테이너 DB에 링크 될 수있는 부모 용기에 서브 복수의 콘테이너를 링크 할 수있다.
프로덕션 환경에서 네트워킹에 대한 수요가 십자가 심지어 호스트 통신 데이터 센터에 걸쳐,이 시간이 종종 SDN (소프트웨어는 네트워크를 정의) 또는 NFV 같은 추가 메커니즘 (네트워크 기능 가상화)를 도입 할 필요를 포함하여, 더 복잡하고 다양합니다 관련 기술.
다음 부분은 더 방법을 모색 할 것입니다 libnetwork고급 기능 및 컨테이너의 구성이 호스트에 통신, 부두 노동자 네트워크를 달성하기 위해.

추천

출처www.cnblogs.com/eugene0/p/11503455.html