Top
NSD CLOUD DAY07
- 案例1:製做自定義鏡像
- 案例2:建立私有鏡像倉庫
- 案例3:NFS共享存儲
- 案例4:建立自定義網橋
1 案例1:製做自定義鏡像
1.1 問題
本案例要求製做自定義鏡像:html
- 基於centos鏡像使用commit建立新的鏡像文件
- 基於centos鏡像使用Dockerfile文件建立一個新的鏡像文件
1.2 步驟
實現此案例須要按照以下步驟進行。nginx
步驟一:使用鏡像啓動容器docker
1)在該容器基礎上修改yum源json
- [root@docker1 docker_images]# docker run -it centos
- [root@8d07ecd7e345 /]# rm -rf /etc/yum.repos.d
2)安裝測試軟件vim
- [root@8d07ecd7e345 /]# yum -y install net-tools iproute psmisc vim-enhanced
3)ifconfig查看centos
- [root@8d07ecd7e345 /]# ifconfig
- eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
- inet 172.17.0.3 netmask 255.255.0.0 broadcast 0.0.0.0
- inet6 fe80::42:acff:fe11:3 prefixlen 64 scopeid 0x20<link>
- ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
- RX packets 2488 bytes 28317945 (27.0 MiB)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 1858 bytes 130264 (127.2 KiB)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- [root@8d07ecd7e345 /]# exit
- exit
步驟二:另存爲另一個鏡像bash
1)建立新建鏡像服務器
- [root@docker1 docker_images]# docker start 8d07ecd7e345
- 8d07ecd7e345
- [root@docker1 docker_images]# docker commit 8d07ecd7e345 myos:v1
- sha256:ac3f9c2e8c7e13db183636821783f997890029d687b694f5ce590a473ad82c5f
2)查看新建的鏡像,如圖-1所示:網絡
圖-1curl
3)驗證新建鏡像
- [root@docker1 docker_images]# docker run -it myos:v1
- [root@497c7b4664bf /]# ifconfig
- eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
- inet 172.17.0.6 netmask 255.255.0.0 broadcast 0.0.0.0
- inet6 fe80::42:acff:fe11:6 prefixlen 64 scopeid 0x20<link>
- ether 02:42:ac:11:00:06 txqueuelen 0 (Ethernet)
- RX packets 0 bytes 0 (0.0 B)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 7 bytes 578 (578.0 B)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
步驟三:使用Dockerfile文件建立一個新的鏡像文件
Dockerfile語法格式:
– FROM:基礎鏡像
– MAINTAINER:鏡像建立者信息(說明)
– EXPOSE:開放的端口
– ENV:設置環境變量
– ADD:複製文件到鏡像
– RUN:製做鏡像時執行的命令,能夠有多個
– WORKDIR:定義容器默認工做目錄
– CMD:容器啓動時執行的命令,僅能夠有一條CMD
1)建立一個Apache的鏡像文件
- [root@docker1 ~]# mkdir oo
- [root@docker1 ~]# cd oo
- [root@docker1 oo]# touch Dockerfile
- [root@docker1 oo]# cp /etc/yum.repos.d/local.repo ./
- [root@docker1 oo]# vi Dockerfile
- FROM myos:v1
- RUN yum -y install httpd
- ENV EnvironmentFile=/etc/sysconfig/httpd
- WORKDIR /var/www/html/
- RUN echo "test" > /var/www/html/index.html
- EXPOSE 80
- CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
- [root@docker1 oo]# docker build -t myos:http .
- [root@docker1 oo]# docker run -d myos:http
- d9a5402709b26b42cd304c77be442559a5329dc784ec4f6c90e4abac1c88e206
- [root@docker1 oo]# docker inspect d9
- [root@docker1 oo]# curl 172.17.0.7
- test
2 案例2:建立私有鏡像倉庫
2.1 問題
本案例要求建立私有的鏡像倉庫:
- Docker主機:192.168.1.20
- 鏡像倉庫服務器:192.168.1.10
2.2 步驟
實現此案例須要按照以下步驟進行。
步驟一:自定義私有倉庫
1)定義一個私有倉庫
- [root@docker1 oo]# vim /etc/docker/daemon.json
- {
- "insecure-registries" : ["192.168.1.10:5000"]
- }
- [root@docker1 oo]# systemctl restart docker
- [root@docker1 oo]# docker run -d -p 5000:5000 registry
- 273be3d1f3280b392cf382f4b74fea53aed58968122eff69fd016f638505ee0e
- [root@docker1 oo]# curl 192.168.1.10:5000/v2/
- {}
- [root@docker1 oo]# docker tag busybox:latest 192.168.1.10:5000/busybox:latest
- [root@docker1 oo]# docker push 192.168.1.10:5000/busybox:latest
- [root@docker1 oo]# docker tag myos:http 192.168.1.10:5000/myos:http
- [root@docker1 oo]# docker push 192.168.1.10:5000/myos:http
2)在docker2上面啓動
- [root@docker2 ~]# scp 192.168.1.10:/etc/docker/daemon.json /etc/docker/
- [root@docker2 ~]# systemctl restart docker
- [root@docker2 ~]# docker images
- [root@docker2 ~]# docker run -it 192.168.1.10:5000/myos:http /bin/bash
步驟二:查看私有倉庫
1)查看裏面有什麼鏡像
- [root@docker1 oo]# curl http:
- {"repositories":["busybox","myos"]}
2)查看裏面的鏡像標籤
- [root@docker1 oo]# curl http:
- {"name":"busybox","tags":["latest"]}
- [root@docker1 oo]# curl http:
- {"name":"myos","tags":["http"]}
3 案例3:NFS共享存儲
3.1 問題
本案例要求建立NFS共享,能映射到容器裏:
- 服務器建立NFS共享存儲,共享目錄爲/content,權限爲rw
- 客戶端掛載共享,並將共享目錄映射到容器中
3.2 方案
本方案要求須要一臺NFS服務器(NFS用真機代替),ip爲192.168.1.254,一臺客戶端docker1主機,ip爲192.168.1.10,一臺戶端docker2主機,ip爲192.168.1.20,實現客戶端掛載共享,並將共享目錄映射到容器中,docker1更新文件時,docker2實現同步更新,方案如圖-2所示:
圖-2
3.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:配置NFS服務器
- [root@room9pc01 ~]# yum -y install nfs-utils
- [root@room9pc01 ~]# mkdir /content
- [root@room9pc01 ~]# vim /etc/exports
- /content *(rw,no_root_squash)
- [root@room9pc01 ~]# systemctl restart nfs-server.service
- [root@room9pc01 ~]# systemctl restart nfs-secure.service
- [root@room9pc01 ~]# exportfs -rv
- exporting *:/content
- [root@room9pc01 ~]# chmod 777 /content
- [root@room9pc01 ~]# echo 11 > /content/index.html
步驟二:配置客戶端
- [root@docker1 oo]# yum -y install nfs-utils
- [root@docker1 oo]# systemctl restart nfs-server.service
- [root@docker1 oo]# showmount -e 192.168.1.254
- Export list for 192.168.1.254:
- /content *
- [root@docker1 ~]# mkdir /mnt/qq
- [root@docker1 ~]# mount -t nfs 192.168.1.254:/content /mnt/qq
- [root@docker1 ~]# ls /mnt/qq
- index.html
- [root@docker1 ~]# cat /mnt/qq/index.html
- 11
- [root@docker1 ~]# docker run -d -p 80:80 -v /mnt/qq:/var/www/html -it myos:http
- 224248f0df5d795457c43c2a7dad0b7e5ec86abdc3f31d577e72f7929f020e01
- [root@docker1 ~]# curl 192.168.1.10
- 11
- [root@docker2 ~]# yum -y install nfs-utils
- [root@docker2 ~]# showmount -e 192.168.1.254
- Export list for 192.168.1.254:
- /content *
- [root@docker2 ~]# mkdir /mnt/qq
- [root@docker2 ~]# mount -t nfs 192.168.1.254:/content /mnt/qq
- [root@docker2 ~]# docker run -d -p 80:80 -v /mnt/qq:/var/www/html -it 192.168.1.10:5000/myos:http
- 00346dabec2c7a12958da4b7fee6551020249cdcb111ad6a1058352d2838742a
- [root@docker2 ~]# curl 192.168.1.20
- 11
- [root@docker1 ~]# touch /mnt/qq/a.sh
- [root@docker1 ~]# echo 22 > /mnt/qq/index.html
- [root@docker2 ~]#ls /mnt/qq/
- a.sh index.html
- [root@docker2 ~]# cat /mnt/qq/index.html
- 22
4 案例4:建立自定義網橋
4.1 問題
本案例要求:
- 建立網橋設備docker01
- 設定網段爲172.30.0.0/16
- 啓動nginx容器,nginx容器橋接docker01設備
- 映射真實機8080端口與容器的80端口
4.2 步驟
實現此案例須要按照以下步驟進行。
步驟一:新建Docker網絡模型
1)新建docker1網絡模型
- [root@docker1 ~]# docker network create --subnet=172.30.0.0/16 docker01
- c9cf26f911ef2dccb1fd1f670a6c51491e72b49133246f6428dd732c44109462
- [root@docker1 ~]# docker network list
- NETWORK ID NAME DRIVER SCOPE
- bc189673f959 bridge bridge local
- 6622752788ea docker01 bridge local
- 53bf43bdd584 host host local
- ac52d3151ba8 none null local
- [root@docker1 ~]# ip a s
- [root@docker1 ~]# docker network inspect docker01
- [
- {
- "Name": "docker01",
- "Id": "c9cf26f911ef2dccb1fd1f670a6c51491e72b49133246f6428dd732c44109462",
- "Scope": "local",
- "Driver": "bridge",
- "EnableIPv6": false,
- "IPAM": {
- "Driver": "default",
- "Options": {},
- "Config": [
- {
- "Subnet": "172.30.0.0/16"
- }
- ]
- },
- "Internal": false,
- "Containers": {},
- "Options": {},
- "Labels": {}
- }
- ]
2)使用自定義網橋啓動容器
- [root@docker1 ~]# docker run --network=docker01 -id nginx
3)端口映射
- [root@docker1 ~]# docker run -p 8080:80 -id nginx
- e523b386f9d6194e53d0a5b6b8f5ab4984d062896bab10639e41aef657cb2a53
- [root@docker1 ~]# curl 192.168.1.10:8080
步驟二:擴展實驗
1)新建一個網絡模型docker02
- [root@docker1 ~]# docker network create --driver bridge docker02
- 5496835bd3f53ac220ce3d8be71ce6afc919674711ab3f94e6263b9492c7d2cc
- [root@docker1 ~]# ifconfig
- br-5496835bd3f5: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
- inet 172.18.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
- ether 02:42:89:6a:a2:72 txqueuelen 0 (Ethernet)
- RX packets 8 bytes 496 (496.0 B)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 8 bytes 496 (496.0 B)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- [root@docker1 ~]# docker network list
- NETWORK ID NAME DRIVER SCOPE
- bc189673f959 bridge bridge local
- 5496835bd3f5 docker02 bridge local
- 53bf43bdd584 host host local
- ac52d3151ba8 none null local
2)若要解決使用ifconfig命令能夠看到docker02的問題,能夠執行如下幾步命令
- [root@docker1 ~]# docker network list
- NETWORK ID NAME DRIVER SCOPE
- bc189673f959 bridge bridge local
- 5496835bd3f5 docker02 bridge local
- 53bf43bdd584 host host local
- ac52d3151ba8 none null local
3)查看16dc92e55023的信息,如圖-3所示:
- [root@docker2 ~]# docker network inspect bc189673f959
圖-3
4)查看圖片的倒數第六行有"com.docker.network.bridge.name": "docker0"字樣
5)把剛剛建立的docker02網橋刪掉
- [root@docker1 ~]# docker network rm docker02
- docker02
- [root@docker1 ~]# docker network create \
- docker02 -o com.docker.network.bridge.name=docker02
- 648bd5da03606d5a1a395c098662b5f820b9400c6878e2582a7ce754c8c05a3a
- [root@docker1 ~]# ifconfig
- docker02: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
- inet 172.18.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
- ether 02:42:94:27:a0:43 txqueuelen 0 (Ethernet)
- RX packets 0 bytes 0 (0.0 B)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 0 bytes 0 (0.0 B)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
6)若想在建立docker03的時候自定義網段(以前已經建立過docker01和02,這裏用docker03),執行如下命令
- [root@docker1 ~]# docker network create docker03 --subnet=172.30.0.0/16 -o com.docker.network.bridge.name=docker03
- f003aa1c0fa20c81e4f73c12dcc79262f1f1d67589d7440175ea01dc0be4d03c
- [root@docker1 ~]# ifconfig
- docker03: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
- inet 172.30.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
- ether 02:42:27:9b:95:b3 txqueuelen 0 (Ethernet)
- RX packets 0 bytes 0 (0.0 B)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 0 bytes 0 (0.0 B)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0