1. 程式人生 > >大型架構及配置技術 自定義私有倉庫自定義映象docker commit

大型架構及配置技術 自定義私有倉庫自定義映象docker commit

大型架構及配置技術
NSD ARCHITECTURE
DAY02內容
09:00 ~ 09:30
上午
09:30 ~ 10:20
10:30 ~ 11:20
11:30 ~ 12:00
14:00 ~ 14:50
下午
15:00 ~ 15:50
16:10 ~ 17:00
17:10 ~ 18:00
作業講解和回顧
自定義映象與倉庫
持久化儲存
Docker網路架構
總結和答疑自定義映象與倉庫
自定義映象
docker commit
Dockerfile
自定義映象與倉庫
自定義映象倉庫
registry基本概念
自定義私有倉庫自定義映象docker commit
• 使用映象啟動容器,在該容器基礎上修改
• 另存為另一個映象




[

[email protected] ~]# docker run -itd centos bash
[[email protected] ~]# docker ps
[[email protected] ~]# docker exec -it IDs bash
修改(增刪改資料、安裝軟體、修改配置檔案等)
[[email protected] ~]# docker commit IDs name:label
[[email protected] ~]# docker imagesDockerfile
• Dockerfile語法格式
– FROM:基礎映象




– MAINTAINER:映象建立者資訊
– EXPOSE:開放的埠
– ENV:設定變數
– ADD:複製檔案到映象
– RUN:製作映象時執行的命令,可以有多個
– WORKDIR:定義容器預設工作目錄
– CMD:容器啟動時執行的命令,僅可以有一條CMDDockerfile(續1)
• 使用Dockerfile工作流程
– mkdir build; cd build




– vim Dockerfile
– docker build -t imagename DockerfileDockerfile(續2)
• Dockerfile檔案案例




[
[email protected]
build]# cat Dockerfile
FROM centos
MAINTAINER Jacob [email protected]
ENV NAME=Jacob
ENV environment=test
WORKDIR /var/www/html
ADD test.sh /root/test.sh
RUN mkdir /dockerfile
RUN echo "test" > /dockerfile/file.txt
RUN yum -y install httpd
RUN echo "test" > /var/www/html/index.html
EXPORSE 80
CMD [“httpd", "-DFOREGROUND"]案例1:製作自定義映象
製作自定義映象
– 基於centos映象使用commit建立新的映象檔案




– 基於centos映象使用Dockerfile檔案建立新的映象檔案自定義映象倉庫registry基本概念
• 共享映象的一臺伺服器(映象化的一臺伺服器)



解自定義私有倉庫
• 流程:
– docker pull registry




– vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=ip:5000
– systemctl daemon-reload
– systemctl restart docker
– docker run -id -p 5000:5000 registry
– docker tag 映象 IP:5000/映象:label
– docker push IP:5000/映象:label
• 進入registry容器檢視/etc/docker/registry/config.yml案例2:建立私有映象倉庫
構建私有映象倉庫:
– Docker主機:192.168.4.100




– 映象倉庫伺服器:192.168.4.5持久化儲存
儲存卷
卷的概念
主機卷的對映
持久化儲存
共享儲存
共享儲存基本概念
使用共享儲存的案例儲存卷卷的概念
• docker容器不保持任何資料
• 重要資料請使用外部卷儲存(資料持久化)




• 容器可以掛載真實機目錄或共享儲存為卷主機卷的對映
• 將真實機目錄掛載到容器中提供持久化儲存




[
[email protected]
~]# docker run -v /data:/data -it centos bash共享儲存共享儲存基本概念
• 一臺共享儲存伺服器可以提供給所有Docker主機使用
• 共享儲存伺服器(NAS、SAN、DAS等)




• 如:
– 使用NFS建立共享儲存伺服器
– 客戶端掛載NFS共享,並最終對映到容器中使用共享儲存的案例
NFS服務

192.168.4.5
• 伺服器
– yum -y install nfs-utils




– vim /etc/exports
– systemctl start nfs
Docker主機1
192.168.4.1
• Docker主機
– mount掛載共享
– 執行容器時,使用-v選項對映磁碟到容器中
Docker主機2
192.168.4.2案例3:NFS共享儲存
1. 伺服器建立NFS共享儲存
1. 共享目錄為/content,許可權為所有主機rw




2. 客戶端掛載共享
1. 將共享目錄對映到容器中
NFS伺服器
192.168.4.5
Docker主機1
192.168.4.10Docker網路架構
Linux網橋
建立虛擬網絡卡
建立虛擬網橋
Docker網路架構
檢視Docker預設網路模型
Docker網路拓撲
使用Docker建立網橋
使用自定義網橋
客戶端訪問容器內的資源Linux網橋建立虛擬網絡卡
• 真實網絡卡配置檔案
– cat /etc/sysconfig/network-scripts/ifcfg-eth0




• 虛擬網絡卡配置檔案
– cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=static
... ...
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.4.15建立虛擬網橋




[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
... ...
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.4.15
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
... ...
NAME=eth0
DEVICE=eth0
BRIDGE=br0
ONBOOT=yes
IPADDR=192.168.4.15
[[email protected] ~]# ~]# brctl showDocker網路拓撲檢視Docker預設網路模型
• 檢視預設Docker建立的網路模型




[[email protected] ~]# docker network list
NETWORK ID
NAME
DRIVER
c0ae28d57b18
bridge
bridge
b69d4c0c735f
host
host
4dc88be13b81
none
null
[[email protected] ~]# ip a s docker0
[[email protected] ~]# brctl show docker0
SCOPE
local
local
local
橋接模型
主機模型
無網路
//啟動容器會繫結該網橋使用Docker建立網橋
• 新建Docker網路模型




[[email protected]
[[email protected]
[[email protected]
[[email protected]
~]# docker network create --driver bridge test01
~]# docker network list
~]# ip a s
~]# docker network inspect test01使用Docker建立網橋(續1)
• 檢視預設Docker建立的網路模型
– 自定義網段




[[email protected] ~]# docker network create --subnet=172.30.0.0/16 test01使用自定義網橋
• 啟動容器,使用剛剛建立的自定義網橋




[[email protected] ~]# docker run --network=bridge|host|none ... ...
[[email protected] ~]# docker run --network=test01 -id nginx客戶端訪問容器內的資源
• 預設容器通過SNAT可以訪問外網
• 但外部網路的主機不可以訪問容器內的資源




• 埠對映
– 使用埠對映可以實現外部網路訪問容器內的資源
[[email protected] ~]# docker run -p 8080 80 -id nginx
//如:真實機IP為192.168.4.5,
使用-p對映真實機的8080埠到容器中的80埠
[[email protected] ~]# firefox http://192.168.4.5案例4:建立自定義網橋
1. 建立自定義網橋
1. 建立網橋裝置docker1




2. 設定網段為172.30.0.0/16
2. 啟動nginx容器
1. nginx容器橋接docker1裝置
2.
對映真實機8080埠與容器的80埠總結和答疑
總結和答疑
提交映象
問題現象
故障分析及排除提交映象問題現象
• 推送映象到registry,提示錯誤:




[[email protected] ~]# docker push centos
The push refers to a repository [docker.io/library/centos]
Put https://index.docker.io/v1/repositories/library/centos/: dial tcp:
lookup index.docker.io on 172.40.1.10:53: read udp
172.40.50.118:43696->172.40.1.10:53: i/o timeout故障分析及排除
• 原因分析




– 問題1:提示The push refers to a repository
[docker.io/library/centos]
• 解決辦法
– 問題1:先要修改映象tag,在可以繼續push映象到registry