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