고정 표시기 항목, 사용자 정의 이미지는 개인 영상 저장 장치, 외장형 스토리지 및 실제 기계 고정 표시기 컨테이너 포트 매핑을 생성 (나)

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/ck784101777/article/details/102520810

[고정 표시기 항목 (a)] https://blog.csdn.net/ck784101777/article/details/102496159

사용자 정의 이미지

1. 사용자 지정 이미지에 사용하는 경우

- 벌거 벗은 시스템 (가장 간단한 구성)로, 사용자 정의 이미지를 만들고 시스템을 저장

- 거울로 만든 현재 실행중인 컨테이너는, 예약 변경

- 현재 실행중인 컨테이너는 다른 호스트로 전송

2. 미러 -commit 방법

컨테이너를 실행 ->보기 컨테이너 ID -> 실행 ->보기 미러

명령 : 고정 표시기는 새로운 미러 이미지 ID 이름을 커밋

  1. [루트 @의 docker1의 docker_images] # 고정 표시기 실행 - 그것은 docker.io/centos는 // 런타임 이미지
  2. [루트 @의 docker1의 docker_images] # 고정 표시기 추신 //보기 컨테이너 ID
  3. [루트 @의 docker1의 docker_images] # 고정 표시기는 8d07ecd7e345 docker.io/myos:latest 커밋
  4. SHA256 : ac3f9c2e8c7e13db183636821783f997890029d687b694f5ce590a473ad82c5f
  5. [루트 @의 docker1는 ~] # 고정 표시기 이미지
  6. REPOSITORY TAG 콘텐츠 ID CREATED SIZE
  7. 전 docker.io/myos 최신 87feda116c17 육주 321.6 MB

3. 미러 -Dockerfile 방법

Dockerfile 수동으로 컨테이너를 시작하는 스크립트가 필요하지 않은 방법으로 미러링됩니다. 우리는 필기 Dockerfile라는 이름의 파일이 필요하고, 구문의 일부 매개 변수를 구성합니다. 그런 다음 실행

 

Dockerfile 구문 :

- FROM : 기본 이미지

- MAINTAINER : 거울 작성자 정보 (설명)

-에 노출 : 열린 포트

- ENV : 환경 변수 설정

- ADD : 거울에 파일을 복사

- 실행 미러링 때 명령 실행, 복수로 구분 다중 명령이있을 수있다

- WORKDIR : 기본 작업 디렉토리 컨테이너를 정의

- CMD : 컨테이너의 시작, 당신은 단지 CMD를 가질 수 있습니다 때 명령 실행

사례를 통해 각 매개 변수의 사용을 설명하기 위해 다음과 같은 실험의 컨테이너 아파치를 생산하는 것입니다

  1. [루트 @의 docker1 ~] #에서 mkdir의 bulid // 디렉토리를 생성
  2. [루트 @의 docker1 ~] #에서 cd ​​bulid
  3. [루트 @의 docker1의 bulid] # 터치 Dockerfile // Dockerfile는 대문자로 첫 글자를 파일
  4. ./ // 냠 소스가 현재 경로에 복사됩니다 /etc/yum.repos.d/local.repo [루트 @의 docker1의 bulid] #의 CP
  5. [루트 @의 docker1의 bulid] #echo 테스트> index.html을 // 새로운 HTML 페이지 만들기
  6. [루트 @의 docker1의 bulid] # 정력 Dockerfile // 编辑 Dockerfile
  7. // 기본 이미지 docker.io/myos:latest FROM, 여기에 참조 미러 이름을 쓰기
  8. // 설치 미러링 할 때 RUN이 냠 -y 명령을 실행하려면 아파치
  9. ENV = EnvironmentFile은 / etc / SYSCONFIG / 아파치 때 아파치 프로세스 실행 환경 칭한다 실행 환경을 지정할 //
  10. WORKDIR의 / var / www / html / // 기본 작업 디렉토리 컨테이너를 정의
  11. index.html을 index.html을 // index.html을 이미지에 현재 경로에 복사됩니다, index.html이라는 담기
  12. 80 //은 열린 포트의 수를 설정 노출
  13. CMD [ "는 / usr / sbin에 / 아파치", "-DFOREGROUND"] // 아파치 서비스를 시작, 당신이 찾을 수있는이 라인 CMD는 아파치 -T 볼
  14. [루트 @의 docker1의 bulid] # 고정 표시기는 -t docker.io/myos:http을 구축 할 수 있습니다. // 추가하는 것을 잊지 마십시오. 그것은 현재의 경로를 나타냅니다
  15. [루트 @의 docker1의 bulid] #은 -d docker.io/myos:http을 실행 고정 표시기       
  16. d9a5402709b26b42cd304c77be442559a5329dc784ec4f6c90e4abac1c88e206
  17. [루트 @의 docker1의 bulid] # 고정 표시기는 D9 // IP보기 컨테이너를 검사
  18. [루트 @의 docker1의 bulid] # 컬 172.17.0.7 // 액세스가, 우리가 작성한 문서를
  19. 테스트

 

둘째, 개인 창고 미러를 생성

  거울웨어 하우스 차트, 우리는이 차트를 봐주세요. 먼저 이미지 (거울)과 용기 (용기), 이들 미러를 통해 용기 내로 실행 관계의 실행을 위탁 관계가, 미러는 원 화상 생성에 따른 하드 태그 (태그)를 통해 연결될 수있다. 작성하여 미러링 된 컨테이너는 커밋, 용기 및 시작 (시작), 다시 시작 (다시 시작) 명령을 정지 (정지)를 수행 할 수 있습니다

  Dockerfile에서 빌드 명령에 의해 생성 된 이중 이미지를 구성하는데 사용되는 파일이,보고

  이어서 backup.tar, 거울상 로컬 미러를 판독하여 로컬 저장,로드 명령에 의해 생성 된

  도커 레지스트리 창고의 거울이다, 창고는 민간 및 공공 창고로 구분되어, 창고 보관 미러링 우리가 저장소에 업로드 공공 이미지를 밀어 곳이다, 풀 명령을 통해 이미지를 다운로드

  

 

 

1. 개인 창고를 사용자 정의

1) 설치 창고

개인 창고를 만들기 고정 표시기-배포 서비스를 설치해야합니다

창고 이미지 메모리 주소의 경우 : / var / lib 디렉토리 / 레지스트리

창고 구성 파일 : /etc/docker-distribution/registry/config.yml

  1. [루트 @의 docker1의 bulid] # yum을 고정 표시기 분포를 설치
  2. [루트 @의 docker1의 bulid은] # 서비스를 시작 // 고정 표시기 분포를 시작 systemctl
  3. [루트 @의 docker1의 bulid] # 개의 systemctl는 고정 표시기 분포를 가능하게

2) 구성 파일을 수정

업로드 이미지 (전용 개인 창고) HTTPS 검증을 닫고 창고를 추가해야

  1. [루트 @의 docker1는 ~] #vim / etc / hosts 파일은 //는 DNS를 추가 
  2. 192.168.1.31의 docker1
  3. [루트 @의 docker1 ~] # 정력을 / etc / SYSCONFIG / 고정 표시기
  4. ADD_REGISTRY은 = '- 추가 레지스트리 docker1 : 5000'// 창고를 추가
  5. INSECURE_REGISTRY = '- 불안 - 레지스트리 docker1 : 5000'// 보안 당국이웨어 하우스
  6. [루트 @의 docker1 ~] # 개의 systemctl 다시 시작 고정 표시기 // 重启 고정 표시기

3) 창고 로컬 미러 업로드

첫 번째 이미지에 대한 레이블을 만들려면 명령 : 고정 표시기 태그 이름 새 이미지 : 새 레이블 이름의 IP / 호스트 이름 : 5000 / 거울 : 거울 라벨

그런 다음 명령을 업로드 : 고정 표시기 푸시 IP / 호스트 이름 : 5000 / 거울 : 거울 라벨

  1. [루트 @의 docker1 ~] 192.168.1.31:5000/docker.io/busybox:latest docker.io/busybox:latest # 고정 표시기 태그를
  2. // 태그
  3. [루트 @의 docker1 ~] # 고정 표시기 푸시 192.168.1.31:5000/docker.io/busybox:latest
  4. // 업로드
  5. 192.168.1.31:5000/ docker.io/myos:http docker.io/myos:http [루트 @의 docker1 ~] # 고정 표시기 태그
  6. [루트 @의 docker1 ~] # 고정 표시기 푸시 192.168.1.31:5000/docker.io/myos:http

4) 다른 호스트 이미지를 다운로드

웨어 하우스의 미러 이미지를 다운로드하려면 고정 표시기 - 유통 서비스를 설치해야하고, 구성 파일을 수정

  1. [루트 @의 docker2 ~] # yum을 고정 표시기 분포를 설치
  2. [루트 @의 docker2는 ~] # 서비스를 시작 // 고정 표시기 분포를 시작 systemctl
  3. [루트 @의 docker2는 ~] #의 systemctl는 고정 표시기 분포를 가능하게
  4. [루트 @의 docker2는 ~] #vim / etc / hosts 파일은 //는 DNS를 추가 
  5. 192.168.1.31 docker1
  6. [root@docker2 ~]# vim /etc/sysconfig/docker
  7. ADD_REGISTRY='--add-registry docker1:5000'        //添加一个仓库
  8. INSECURE_REGISTRY='--insecure-registry docker1:5000'   //将这个仓库通过安全授权
  9. [root@docker2 ~]# systemctl restart docker          //重启docker
  10. [root@docker2 ~]#docker pull 192.168.1.31:5000/docker.io/busybox:latest                                   //下载镜像到本地

5)查看镜像仓库

查看私有镜像仓库中的镜像名称:curl http://ip:5000/v2/_catalog

查看某一仓库的标签:cutl http://ip:5000/v2/镜像名/tags/list

仓库镜像存储地址:/var/lib/registry

仓库的ip和主机名都可,主机名必须添加域名解析,如果v2找不到就试一下v1,v3这个我也讲不定

  1. [root@docker1 bulid]# curl http://docker1:5000/v2/_catalog //查看所有镜像
  2. {"repositories":["docker.io/busybox","docker.io/myos"]}   
  3. [root@docker1 bulid]# curl http://docker1:5000/v2/docker.io/busybox/tags/list //查看镜像标签
  4. {"name":"docker.io/busybox","tags":["latest"]}

 

三、持久化存储(外部存储)-存储卷

1.为什么使用外部存储

docker容器不是保存任何数据的,所以我们将重要的数据保存在外部磁盘上(存储卷),容器可以通过挂载真机的实际目录使用存储数据

2.启动时使用存储卷

命令:docker run -it -v /真机目录:/容器目录 容器名

本命令是将目录挂载到容器中提供持久化存储,目录不存在就自动创建,目录存在就覆盖掉,所以你要确认容器上是否有重名目录

3.实验-将NFS共享文件映射到两个容器中,使用共享资源

实验流程

1.服务器创建NFS共享存储目录,权限为rw

2.客户端挂载共享,将共享目录映射到容器中

3.docker1启动nginx

4.docker2启动apache

5.niginx和apache共享同一web目录

拓扑结构

镜像准备:

1个nginx镜像一个httpd镜像,用docker search 搜索即可

 

1)配置NFS服务器

  1. [root@nfs ~]# yum -y install nfs-utils       //安装nfs服务
  2. [root@nfs ~]# mkdir /webroot                //创建共享目录
  3. [root@nfs ~]# vim /etc/exports              //编辑nfs配置文件
  4. /webroot *(rw,no_root_squash)                        //rw root不降权
  5. [root@nfs ~]# systemctl restart nfs-server.service
  6. [root@nfs ~]# systemctl restart nfs-secure.service
  7. [root@nfs ~]# chmod 777 /content            //在其他主机上挂载nfs文件使用的用户是nfs用户没有写权限,将文件修改为777 所有用户有权限写
  8. [root@nfs ~]# echo hello wrold > /content/index.html   //指定一个测试页面

2)docker1主机配置-apache服务

  1. [root@docker1 bulid]# yum -y install nfs-utils              //安装nfs服务
  2. [root@docker1 bulid]# systemctl restart nfs-server.service   
  3. [root@docker1 bulid]# showmount -e 192.168.1.254   //查看可以挂载的nfs服务
  4. Export list for 192.168.1.254:
  5. /webroot *
  6. [root@docker1 ~]# mkdir /mnt/webroot              //创建挂载目录
  7. [root@docker1 ~]# mount -t nfs 192.168.1.254:/content /mnt/webroot   //挂载
  8. [root@docker1 ~]# ls /mnt/webroot                
  9. index.html
  10. //启动http容器 -p将端口映射到真机 -v映射真机存储卷
  11. [root@docker1 ~]# docker run -d -p 80:80 -v /mnt/webroot:/var/www/html -it docker.io/myos:http   
  12. 224248f0df5d795457c43c2a7dad0b7e5ec86abdc3f31d577e72f7929f020e01
  13. [root@docker1 ~]# curl 192.168.1.31:80       //由于已经将端口映射到真机 直接访问真机80端口即可
  14. hello wrold

 3)docker2主机配置-nginx服务

与上面配置差不多

  1. [root@docker2 ~]# yum -y install nfs-utils
  2. [root@docker2 ~]# showmount -e 192.168.1.254
  3. Export list for 192.168.1.254:
  4. /webroot *
  5. [root@docker2 ~]# mkdir /mnt/webroot
  6. [root@docker2 ~]# mount -t nfs 192.168.1.254:/content /mnt/webroot
  7. [root@docker2 ~]# docker run -d -p 80:80 -v /mnt/qq:/usr/share/nginx/html -it docker.io/nginx
  8. 00346dabec2c7a12958da4b7fee6551020249cdcb111ad6a1058352d2838742a
  9. [root@docker2 ~]# curl 192.168.1.32
  10. hello wrold

 

四、自定义网桥

1.为什么要自定义网桥?

-创建容器时默认创建的ip为172.17.0.0/24 这个网段的

-自定义网桥更容易记忆

-为了方便规划网络拓扑

-容器的特征是可以把宿主机变成对应的服务,为了外部网络的主机访问容器内的资源,必须配置网桥

2.如何使将容器端口与宿主端口绑定

使用-p 参数可以将容器端口与宿主端口绑定

命令: docker run  -p 宿主机端口:容器端口 -it 镜像名

如将httpd容器变为宿主机httpd服务

docker run itd -p 80:80 docker.ip/httpd

3.实验-自定义网桥

1)查看docker网卡

命令:docker network list

或者 docker network inspect 网卡名

  1. [root@docker1 ~]# docker network list
  2. NETWORK ID NAME DRIVER SCOPE
  3. 996943486faa bridge bridge local
  4. 63c88dcc3523 host host local
  5. 5e5ab3d45e27 none null local 

2)创建docker网卡 

命令:docker network create --subnet=ip 网卡名

  1. [root@docker1 ~]# docker network create --subnet=10.10.10.0/24 docker1
  2. b447cacc0373631ff7c534f119047946be5c1498b5b2e31a31180c5ee6320ab5
  3. [root@docker1 ~]# docker network list
  4. NETWORK ID NAME DRIVER SCOPE
  5. 996943486faa bridge bridge local
  6. 63c88dcc3523 host host local
  7. 5e5ab3d45e27 none null local 
  8. [root@docker1 ~]# docker network inspect docker1
  9. [
  10. {
  11. "Name": "docker1",
  12. "Id": "b447cacc0373631ff7c534f119047946be5c1498b5b2e31a31180c5ee6320ab5",
  13. "Scope": "local",
  14. "Driver": "bridge",
  15. "EnableIPv6": false,
  16. "IPAM": {
  17. "Driver": "default",
  18. "Options": {},
  19. "Config": [
  20. {
  21. "Subnet": "10.10.10.0/24"
  22. } ]
  23. },
  24. "Internal": false,
  25. "Containers": {},
  26. "Options": {},
  27. "Labels": {}
  28. }
  29. ]

3)使用创建的网卡

命令:docker run --network=网卡名 -itd 镜像名

  1. [root@docker1 ~]# docker run --network=docker1 -itd docker.io/myos
  2. 5270cba305c06c3da3f56185b35dc059aabcf2884a12ef717d89a768360e5326

 

4.修改宿主机网卡名

我们通过docker 命令创建的网卡,通过ifconfig看到的名字默认是br-网卡id ,可读性很差,下面演示如何修改默认网卡名

1)创建一个网卡并查看网卡名

  1. [root@docker1 ~]# docker network create --driver bridge docker02
  2. //新建一个 名为docker02的网络模型
  3. 5496835bd3f53ac220ce3d8be71ce6afc919674711ab3f94e6263b9492c7d2cc
  4. [root@docker1 ~]# ifconfig     
  5. //但是在用ifconfig命令查看的时候,显示的名字并不是docker02,而是br-5496835bd3f5
  6. br-5496835bd3f5: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
  7. inet 172.18.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
  8. ether 02:42:89:6a:a2:72 txqueuelen 0 (Ethernet)
  9. RX packets 8 bytes 496 (496.0 B)
  10. RX errors 0 dropped 0 overruns 0 frame 0
  11. TX packets 8 bytes 496 (496.0 B)
  12. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

2)查看inspect对于命名的规定

上面可以通过ifconfig查看到id号,前3位即可,或者通过docker network list 查看

我们再通过inspect查看一下docker网卡底层信息,看到"com.docker.network.bridge.name": "docker0"字样

[root@docker2 ~]# docker network inspect bc5

3)自定义命名创建

命令:docker network create 网卡名 -o com.docker.network.bridge.name=你要修改的网卡名

  1. [root@docker1 ~]# docker network rm docker02  //删除docker02重新创建
  2. docker02
  3. [root@docker1 ~]# docker network create \
  4. docker02 -o com.docker.network.bridge.name=docker02
  5. //创建docker02网桥
  6. 648bd5da03606d5a1a395c098662b5f820b9400c6878e2582a7ce754c8c05a3a
  7. [root@docker1 ~]# ifconfig                 //ifconfig查看有docker02
  8. docker02: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
  9. inet 172.18.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
  10. ether 02:42:94:27:a0:43 txqueuelen 0 (Ethernet)
  11. RX packets 0 bytes 0 (0.0 B)
  12. RX errors 0 dropped 0 overruns 0 frame 0
  13. TX packets 0 bytes 0 (0.0 B)
  14. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

추천

출처blog.csdn.net/ck784101777/article/details/102520810