01-容器化应用管理配置
本章节下载: 01-容器化应用管理配置 (426.10 KB)
Comware V9系统支持用户在H3C物理设备上部署基于Docker容器的第三方应用。使用容器化应用管理功能,用户可以快速、简便地安装、运行和管理第三方应用,并配合Kubernetes架构实现第三方应用的集群化部署,从而扩展了设备功能,简化了用户对应用的管理和维护,使得设备能更快捷地集成到SDN和云计算平台的网络中。
容器技术是一种轻量级的虚拟化技术。一个容器包含软件运行所需的程序、环境变量、系统库、配置等数据和文件,各个容器共享宿主机内核,但容器间互相隔离,属于操作系统层面的虚拟化技术。常见的经典容器管理应用主要有Docker、LXC等。Docker使用基于Linux内核的cgroup、namespace和UnionFS等技术对进程进行封装隔离,极大地简化了容器的使用,使得容器技术迅速普及,应用越来越广泛和深入。Comware集成了Docker,并添加了资源限制相关的功能,用于支持用户运行基于Docker容器的第三方应用。
容器运行在Linux操作系统之上,直接使用宿主机的硬件资源,利用Linux namespace和cgroups等技术来实现容器间的隔离和资源分配控制。与传统的虚拟机(VM)技术相比,容器启动更快,占用资源更少,同等配置下可承载更多的应用。
另外,基于分层文件系统Rootfs和联合文件系统技术,容器具有较好的封装性,可以运行于各种主流Linux发行版本,具有灵活度高、应用部署快的特点。
H3C设备集成了Docker及Kubelet功能,用户可以通过Docker或者Kubernetes技术将第三方应用以容器的方式部署到设备上。
· Comware支持原生的Docker client命令,用户在设备上使用docker命令创建容器时,可以通过docker命令参数指定容器运行的命名空间(namespace)和可使用的资源(cgroups)来实现容器间的隔离和资源分配。Comware还支持将容器保存到设备的Flash上,容器重启后可以从Flash恢复。
· 运行了第三方应用的H3C设备就是Kubernetes架构中的一个节点,支持Kubernetes Master的调度和管理,从而实现第三方应用的大规模集群化部署,极大地简化设备的运维,并为自动运维、智能运维提供强有力的支撑。
图1-1 Comware和Kubernetes配合使用示意图
用户在设备上创建、启用容器后,可以运行基于Docker容器的应用,用于实现信息采集和监控、设备运行干预等功能。有些容器本身就是一个独立的应用,例如,每台设备运行一个资源采集的Agent容器,用来实时采集设备的CPU、内存、流量等信息,并上报至监控设备统一管理。有些容器提供一个小平台,在容器中还可以安装第三方应用。用户可以在容器内使用应用提供的接口来启动和停止这些应用。容器化应用技术将第三方应用的影响范围控制在容器内,和Comware之间互相隔离。
Comware为第三方应用提供网络支持,运行在设备上的第三方应用,可以与Comware中的应用通信,也可以通过Comware与外界通信(由Comware的转发模块将报文通过物理接口发送出去)。
Docker使用命名空间来实现容器间的隔离。其中,网络命名空间用于隔离网络资源,例如IP地址、IP路由表、/proc/net目录、端口号等。用户在设备上创建容器时,可以选择是否和Comware共享网络命名空间。是否共享网络命名空间会影响容器和外界的通信方式以及网络参数的配置。
共享网络命名空间时,新创建的容器使用Comware的网络参数,包括接口、IP地址、IP路由表、端口号等。第三方应用利用Comware的网络参数与目的主机通信:
· 如果目的主机和Comware位于同一网段,不需要为第三方应用配置其他网络参数,目的主机使用设备的IP地址即可与第三方应用通信。
· 如果目的主机和Comware位于不同网段,则需要为第三方应用配置源IP地址,目的主机与这个源IP地址之间必须路由可达。第三方应用使用这个源地址与目的主机之间实现跨网段通信。
如图1-2所示,创建Docker容器时选择和Comware共享网络命名空间,系统内核会生成一条缺省路由和up状态接口的直连路由。假设,Host A、Host B和Device属于同一网段,Host A可以使用IP地址2.2.2.1访问Third-Party App,Host B可以使用IP地址3.3.3.1访问Third-Party App。Host C与Device属于不同网段,Host C需要使用源IP地址X.X.X.X访问Third-Party App。
图1-2 第三方容器与Comware共享网络命名空间时网络互通示意图
非共享网络命名空间时,Comware使用Virtual-Eth-Group0接口为该容器及其第三方应用提供网络支持。用户创建Virtual-Eth-Group0接口时,Comware会同时创建一个TPA bridge(Third-party Application,第三方应用),容器中的第三方应用通过TPA bridge互相通信以及和外界通信。
如图1-3所示,用户在设备上创建Virtual-Eth-Group0接口,并为该接口配置IP地址X.X.X.X/24,系统会自动创建一个TPA bridge。当用户创建Docker容器选择和Comware非共享网络命名空间时,系统会为Docker容器创建一个虚拟接口Eth0,并为该接口分配Virtual-Eth-Group0接口网段中空闲的IP地址(例如图中的X.X.X.1/24、X.X.X.2/24和X.X.X.3/24),并将容器的缺省网关设置为Virtual-Eth-Group0接口的IP地址。
同一设备中不同容器中的第三方应用处于相同网段,可以直接互通。
当容器与外界互通时,第三方应用将报文交给Comware的Virtual-Eth-Group0接口,外界目的主机只要和Virtual-Eth-Group0接口路由可达,就可以和运行在容器中的第三方应用通信。容器1、容器2和容器3分别使用IP地址X.X.X.1/24、X.X.X.2/24、X.X.X.3/24和Host A、Host B、Host C通信。
图1-3 第三方容器与Comware非共享网络命名空间时网络互通示意图
设备系统软件基于Linux内核,使用X86体系架构,编译容器以及第三方应用可执行文件时使用的CPU体系结构必须与设备的体系架构一致。
用户运行在设备上的第三方应用必须安全可信,不使用恶意软件,并保证及时更新开源应用的补丁。
禁止通过任何形式的第三方应用对设备及Comware进行逆向工程。
如果安装的第三方应用和Comware自带的应用冲突,设备会优先使用Comware应用。例如,用户开启了Comware中自带了FTP server应用,又在Docker容器中启用了FTP server应用,且这两个应用使用的IP地址和端口号也相同,FTP client通过FTP协议访问设备时,设备会使用Comware自带的FTP server响应请求。只有Comware自带的FTP server被关闭,才会使用Docker容器中FTP server应用来响应请求。
如果创建的第三方容器与Comware容器共享网络命名空间,则该第三方容器仅在Comware系统本次运行过程中可用。Comware系统重启后,如需继续使用该第三方容器,请重新创建。所以,建议以非共享Comware网络命名空间方式创建第三方容器。
为了防止第三方容器过度消耗资源,对Comware容器等设备主要组件造成不利影响,设备出厂时对每个第三方容器可使用的CPU、内存资源进行了限制。在使用docker run命令启动第三方容器时,如果通过--cpuset-cpus、--cpuset-shared、--memory参数指定第三方容器可使用的CPU、内存资源超出了设备出厂限制,则以设备出厂限制为准。
容器化应用管理配置任务如下:
(1) 开启容器功能
(2) 部署Docker容器
(3) 配置容器化应用的网络参数
(4) (可选)开启Kubelet服务
(5) (可选)调整容器虚拟磁盘大小。详细描述请参见“开放性应用管理配置指导”中的“容器和开放性应用公共配置”。
(6) (可选)备份容器数据。详细描述请参见“开放性应用管理配置指导”中的“容器和开放性应用公共配置”。
配置本功能后,用户可根据组网需求安装Docker容器。
(1) 进入系统视图。
system-view
(2) 开启容器功能。
tpa container enable
缺省情况下,容器功能处于开启状态。
Comware系统集成了Docker并进行了改进,可解析Linux标准docker命令行。用户登录Comware系统后,通过CLI界面可以下发Linux系统的标准docker命令行,来创建、运行和监控容器,以及构建、存储镜像等。
如需创建一个与Comware共享网络命名空间的Docker容器,请使用参数--network container:comware,例如docker run --name tftpd --network container:comware vimagick/tftpd,用来创建并运行一个和Comware共享网络命名空间的TFTP server容器。
如需创建一个与Comware非共享网络命名空间的Docker容器,请使用参数--network tpa,例如docker run --name tftpd --network tpa vimagick/tftpd,用来创建并运行一个和Comware非共享网络命名空间的TFTP server容器。
执行docker命令时,参数输入要求同Linux系统下的docker命令,可通过输入docker –-help来获取该参数的帮助信息。为方便用户使用docker命令,本手册描述了docker命令的一些常用参数,请参见“1.9 附录1 docker命令使用指导”。
修改Docker配置文件时,请确保配置文件没有错误并且经过验证,否则可能导致dockerd无法启动,从而导致Comware无法启动。如果遇到Comware无法启动的情况,请重启设备并进入BootWare,删除错误的Docker配置文件,然后尝试重启设备。如果依然无法启动,请重启设备进入BootWare,并删除flash:/third-party目录,然后尝试再次重启设备。
系统启动或者重加载Docker Daemon配置时,设备会自动将以下文件及目录同步至内存文件系统,供Docker使用:
· Docker Daemon配置文件flash:/third-party/autocopy/etc/docker/daemon.json。设备出厂时,已携带了该文件。如果需要从私有镜像库拉取镜像,请在拉取镜像前创建daemon.json文件并存放到flash:/third-party/autocopy/etc/docker/。
· Docker Registry访问需要用到的证书存放的目录flash:/third-party/autocopy/etc/docker/certs.d。使用HTTP协议访问镜像库时,不需要使用证书;使用HTTPS协议访问镜像库时,需要使用证书,请下载证书并存放到该目录。
要使新的配置文件和证书生效,请重启设备或者重新加载Docker Daemon配置。
(1) 进入系统视图。
system-view
(2) 重新加载Docker Daemon配置。
docker-config reload
(1) 下载并导入镜像或者从镜像仓库拉取镜像。
(2) 进入系统视图。
system-view
(3) 部署Docker容器。
docker [ params ]
多次执行本命令,可以部署多个容器。
运行在不同环境的容器化应用需要配置的网络参数不同。
· 为和Comware共享网络命名空间容器中的第三方应用配置网络参数:
如果需要使用Docker拉取镜像文件,或者需要使用Kubelet和Kubernetes Master通信,则该步骤必选;其他情况为可选配置。
第三方应用需要和外界跨网段通信时,必须配置;其他情况无需配置。详细描述请参见“开放性应用管理配置指导”中的“容器和开放性应用公共配置”。
¡ (可选)为开放性客户端应用预留端口号、为开放性服务器应用预留端口号。详细描述请参见“开放性应用管理配置指导”中的“容器和开放性应用公共配置”。
¡ (可选)配置IP报文预处理功能。详细描述请参见“开放性应用管理配置指导”中的“容器和开放性应用公共配置”。
· 为和Comware非共享网络命名空间容器中的第三方应用配置网络参数:
如果需要使用Docker拉取镜像文件,或者需要使用Kubelet和Kubernetes Master通信,则该步骤必选;其他情况为可选配置。
¡ (可选)配置IP报文预处理功能。详细描述请参见“开放性应用管理配置指导”中的“容器和开放性应用公共配置”。
Docker和Kubelet使用Comware的LoopBack0接口与外界通信,当这些应用需要访问网络时,需要配置LoopBack0接口。
(1) 进入系统视图。
system-view
(2) 进入LoopBack0接口视图。
interface loopback 0
(3) 为LoopBack0接口配置IP地址。
ip address ip-address { mask-length | mask }
缺省情况下,未配置接口IP地址。
本命令的详细描述请参见“三层技术-IP业务命令参考”中的“IP地址”。
与Comware非共享网络命名空间容器中的第三方应用使用Comware的Virtual-Eth-Group0接口与其他应用通信。
(1) 进入系统视图。
system-view
(2) 创建Virtual-Eth-Group0接口,并进入接口视图。
interface virtual-eth-group 0
(3) 为Virtual-Eth-Group0接口配置IP地址。
ip address ip-address { mask-length | mask }
缺省情况下,未配置接口IP地址。
配置本功能后,设备就可作为Kubernetes架构中的节点,支持Kubernetes Master的调度和管理,从而实现第三方应用的大规模集群化部署。
设备出厂时,已经安装了Kubelet应用。其升级软件会集成在Comware软件包中,升级设备时会一并升级该应用,用户不需要单独部署和升级Kubelet应用。
开启Kubelet服务时会先将如下文件同步至内存文件系统,请准备好以下文件供Kubelet使用。否则,Kubelet服务将启动失败。
表1-1 开启Kubelet服务前需要准备的配置文件描述表
文件描述 |
存放位置 |
文件名称(不能携带后缀) |
Kubernetes公共配置文件 |
flash:/third-party/autocopy/etc/kubernetes |
kubeconfig |
Kubelet配置文件 |
kubeletconfig |
|
Kubelet命令行参数环境变量文件 |
kubelet |
以下为Kubernetes公共配置文件flash:/third-party/autocopy/etc/kubernetes/kubeconfig的样例,请根据实际环境修改对应配置。
apiVersion: v1
clusters:
- cluster:
insecure-skip-tls-verify: true
server: http://192.168.111.62:8080
name: TestCluster
contexts:
- context:
cluster: TestCluster
user: comwarev9
name: Comware
current-context: Comware
kind: Config
preferences: {}
users: []
以下为Kubelet配置文件flash:/third-party/autocopy/etc/kubernetes/kubeletconfig的样例,请根据实际环境修改对应配置。
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
failSwapOn: false
address: 0.0.0.0
port: 10250
以下为Kubelet命令行参数环境变量文件flash:/third-party/autocopy/etc/kubernetes/kubelet的样例,请根据实际环境修改对应配置。
KUBELET_ARGS=”--hostname-override 6890-A --pod-infra-container-image=192.168.111.62:5000/pause:3.1“
(1) 进入系统视图。
system-view
(2) 开启Kubelet服务。
kubelet enable
缺省情况下,Kubelet服务处于关闭状态。
使用容器功能在Device A上部署TFTP server,Device B和Device A同网段,Device C和Device A不同网段。要求Device B和Device C通过地址192.168.1.64访问TFTP server,并将各自的配置文件上传到Device A。
本举例要求容器化部署TFTP server,且TFTP server使用Device A的IP地址对外提供服务,所以,我们采用共享网络命名空间的方式创建容器,在这个容器上部署TFTP server。
(1) Device A的配置
# 配置IP地址,确保Device A和Device B路由可达;配置IP地址和路由,确保Device A和Device C之间路由可达。配置步骤略。
# TFTP server镜像文件tftpd.tar.gz存放在Host上,使用TFTP功能将该文件下载到Device A。
<DeviceA> tftp 192.168.1.22 get tftpd.tar.gz
Press CTRL+C to abort.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2135k 100 2135k 0 0 138k 0 0:00:15 0:00:15 --:--:-- 97686
100 2135k 100 2135k 0 0 137k 0 0:00:15 0:00:15 --:--:-- 137k
# 查看镜像文件tftpd.tar.gz是否下载成功。
<DeviceA> dir *.gz
Directory of flash:
0 -rw- 2186624 Jan 11 2019 16:04:16 tftpd.tar.gz
3710740 KB total (1893144 KB free)
# 加载镜像文件tftpd.tar.gz。
<DeviceA> system-view
[DeviceA] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
comware MPU 44921263afab 18 years ago 33B
[DeviceA] docker load -i tftpd.tar.gz
df64d3292fd6: Loading layer 4.672MB/4.672MB
ebf013859a34: Loading layer 99.84kB/99.84kB
Loaded image ID: sha256:1ae5a7ba615b2fdbbba1819745f44d253ad6980ad4517d41755e9822e89561fb
[DeviceA] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 1ae5a7ba615b 5 weeks ago 4.5MB
comware MPU 44921263afab 18 years ago 33B
# 为tftpd镜像打上标签tftpd:latest以便使用。
[DeviceA] docker tag 1ae tftpd:latest
[DeviceA] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tftpd latest 1ae5a7ba615b 5 weeks ago 4.5MB
comware MPU 44921263afab 18 years ago 33B
# 在后台创建容器,名称为tftpserver,和Comware共享网络命名空间。
[DeviceA] docker run -d --name tftpserver --network container:comware tftpd
c773c637fd81d3dfb5453126b3b0bcaf20ab7a8b3e92875c4be69296b8b2928c
[DeviceA] docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c773c637fd81 tftpd "in.tftpd --verbose " 19 seconds ago Up 18 seconds tftpserver
bd84340b76a1 comware:MPU "/bin/v9.sh" 18 years ago Up 18 years comware
# 为容器tftpserver配置源地址,以便该容器可以与Device C跨网段互通。
[DeviceA] tpa ip source interface m-gigabitethernet 0/0/0
(2) Device B的配置
# 保存Device B的当前配置,并备份到TFTP server上。
<DeviceB> save DeviceB.cfg
The current configuration will be saved to flash:/DeviceB.cfg. Continue? [Y/N]:y
Now saving current configuration to the device.
Saving configuration flash:/DeviceB.cfg.Please wait...
Configuration is saved to device successfully.
<DeviceB> tftp 192.168.1.64 put DeviceB.cfg
Press CTRL+C to abort.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 13137 0 0 100 13137 0 534k --:--:-- --:--:-- --:--:-- 583k
(3) Device C的配置
# 保存Device C的当前配置,并备份到TFTP server上。
<DeviceC> save DeviceC.cfg
The current configuration will be saved to flash:/DeviceC.cfg. Continue? [Y/N]:y
Now saving current configuration to the device.
Saving configuration flash:/DeviceC.cfg.Please wait...
Configuration is saved to device successfully.
<DeviceC> tftp 192.168.1.64 put DeviceC.cfg
Press CTRL+C to abort.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6120 0 0 100 6120 0 1103 0:00:05 0:00:05 --:--:-- 1111
# 进入容器tftpserver的命令行配置界面。
[DeviceA] docker exec -it tftpserver sh
/ #
# 查看容器tftpserver的路由表,可以看到一条缺省路由,该路由的源地址为192.168.1.64,还有三条直连路由。
/ # ip route
default dev vrfif0 scope link src 192.168.1.64
127.0.0.0/8 dev InLoop0 scope link src 127.0.0.1
127.1.1.0/30 dev eth0 scope link src 127.1.1.2
192.168.1.0/24 dev MGE1_0_0_0 scope link src 192.168.1.64
# 在tftpboot文件夹下可以看到DeviceB.cfg和DeviceC.cfg两个配置文件。
/ # ls
bin home mnt run sys usr
dev lib proc sbin tftpboot var
etc media root srv tmp
/ # ls tftpboot/
DeviceB.cfg DeviceC.cfg
/ # exit
[DeviceA]
在设备上安装第三方应用cAdvisor(cAdvisor为Google开发的容器监控工具,可以监控当前设备的资源使用情况,包括CPU、内存、网络、文件系统等),其镜像文件存储在镜像仓库中,镜像仓库的IP地址为2.2.2.2,设备的IP地址为10.10.10.10,cAdvisor使用固定IP地址135.1.1.6。要求Host可以访问cAdvisor。
图1-4 容器化部署第三方应用配置组网图(非共享网络命名空间)
Google cAdvisor使用固定IP地址135.1.1.6,不共用Device的IP地址10.10.10.10,所以,我们采用非共享网络命名空间的方式创建容器,在这个容器上部署Google cAdvisor。
配置前,请确保:
· Registry到IP地址1.1.1.1之间路由可达。
· Host到IP地址10.10.10.10和135.1.1.6之间路由可达。
# 在Host上将Docker配置文件daemon.json中镜像仓库的IP地址修改为2.2.2.2。
{
"insecure-registries":["2.2.2.2"]
}
# 将修改后的daemon.json保存到设备,路径为flash:/third-party/autocopy/docker/daemon.json。
<Device> mkdir flash:/third-party/autocopy/docker/
<Device> tftp 3.3.3.3 get daemon.json flash:/third-party/autocopy/docker/daemon.json
# 重新加载daemon.json。
<Device> system-view
[Device] docker-config reload
Reloading docker configuration...
Done.
# 配置LoopBack0接口的IP地址为1.1.1.1/32。(Device使用LoopBack0接口拉取镜像)
[Device] interface loopback 0
[Device-LoopBack0] ip address 1.1.1.1 32
[Device-LoopBack0] quit
# 到镜像仓库Registry拉取镜像google/cadvisor。
[Device] docker pull google/cadvisor
# 查看镜像。
[Device] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
google/cadvisor latest 75f88e3ec333 10 months ago 62.2MB
comware MPU 9b5091ba7bd0 17 years ago 33B
# 在后台创建容器,名称为cadvisor,和Comware非共享网络命名空间。
[Device] docker run -v /:/rootfs:ro -v /var/run:/var/run:ro -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -v /dev/disk:/dev/disk:ro --detach --name cadvisor --ip 135.1.1.6 --network tpa google/cadvisor
4260ca77cec7b47649db94b9e63da7f57e06dcdb3d1c330707869f3818afcbbb
# 查看容器。
[Device] docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
4260ca77cec7 google/cadvisor "/usr/bin/cadvisor -…" 14 seconds ago Up 13 seconds 8080/tcp cadvisor
bd84340b76a1 comware:MPU "/bin/v9.sh" 18 years ago Up 18 years comware
# 创建Virtual-Eth-Group0接口并配置其IP地址为135.1.1.1/24。(Google cAdvisor使用Virtual-Eth-Group0与外界通信)
[Device] interface virtual-eth-group 0
[Device-Virtual-Eth-Group0] ip address 135.1.1.1 24
[Device-Virtual-Eth-Group0] quit
# 在Host上打开浏览器,输入http://135.1.1.6:8080连接cAdvisor,可查看到cAdvisor监控信息。
(1) 从镜像库中导出镜像,具体导出方法请参考命令docker save --help及 docker export --help。
(2) 将导出的镜像包下载到设备的存储介质(如Flash)上。
(3) 对于通过docker save得到的镜像的tar文件,执行docker load导入镜像。
(4) 对于通过docker export得到的镜像的tar文件,执行docker import导入镜像。
命令更详细的使用方法请参考docker帮助,docker load --help、docker import --help。
# 导入cadvisor镜像cadvisor.img.tar.gz。
<Sysname> dir *.tar.gz
Directory of flash:
0 -rw- 694482 Jan 03 2001 18:55:02 busybox.tar.gz
1 -rw- 24297962 Jan 13 2001 02:35:51 cadvisor.img.tar.gz
3710740 KB total (1158972 KB free)
<Sysname> system-view
[Sysname] docker load -i cadvisor.img.tar.gz
52a5560f4ca0: Loading layer 5.06MB/5.06MB
f04a25da66bf: Loading layer 31.51MB/31.51MB
f60e27acaccf: Loading layer 26.49MB/26.49MB
Loaded image: google/cadvisor:latest
# 查看镜像。
<Sysname> system-view
[Sysname] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest d1fd7d86a825 Less than a second ago 33.3MB
google/cadvisor latest 75f88e3ec333 Less than a second ago 62.2MB
busybox latest 54511612f1c4 Less than a second ago 1.13MB
bd84340b76a1 comware:MPU "/bin/v9.sh" 18 years ago Up 18 years comware
Docker daemon使用Comware的Loopback0接口访问网络,请确保Loopback0接口和Docker公有镜像库、私有镜像库之间路由可达。
在Docker公有镜像库注册后,即可使用docker pull xxx命令从Docker公有镜像库拉取镜像。
HTTP类型的私有镜像库属于非安全的私有镜像仓库,需要为docker daemon配置insecure-registries。
(1) 修改文件flash:/third-party/autocopy/etc/docker/daemon.json,配置参考如下:
<Sysname> more flash:/third-party/autocopy/etc/docker/daemon.json
{
"live-restore": true,
"insecure-registries":["192.168.111.62","test.io:5000"]
}
其中,192.168.111.62表示私有镜像仓库的IP地址并使用缺省端口号,test.io:5000表示另一个镜像仓库的域名地址和端口号。
(2) 重启设备或者执行docker-config reload使修改的配置生效。
访问HTTPS的私有镜像库根据镜像库服务器的配置可以分为无认证、简单认证和证书认证三种:
· 对于无认证的情况
直接执行docker pull、docker push即可拉取镜像或者上传镜像。
· 对于简单认证的情况
a. 执行docker login,输入认证参数
b. 执行docker pull、docker push等操作
· 对于证书认证的情况
具有证书方式认证的私有镜像库只能使用域名访问,不能直接使用IP地址访问。需要在设备上添加对应镜像服务器的证书,参考步骤如下:
a. 联系服务提供商或管理员获取服务器的证书。
b. 下载证书到设备。
证书的存放路径为flash:/third-party/autocopy/etc/docker/certs.d/服务器域名及端口/ca.crt,如flash:/third-party/autocopy/etc/docker/certs.d/img.h3c.com:5000/ca.crt。因为Flash文件系统不支持“:”,所以img.h3c.com:5000需要替换为img.h3c.com@5000,所以实际文件路径为flash:/third-party/autocopy/etc/docker/certs.d/img.h3c.com@5000/ca.crt。
c. 重启设备或者执行docker-config reload将新建的文件同步到系统中。
d. 执行docker login,输入认证参数。
e. 执行docker pull、docker push等操作。
# 从镜像服务器192.168.111.62:5000拉取busybox镜像。
<Sysname> system-view
[Sysname] docker pull 192.168.111.62:5000/busybox
Using default tag: latest
latest: Pulling from busybox
Digest: sha256:545e6a6310a27636260920bc07b994a299b6708a1b26910cfefd335fdfb60d2b
Status: Image is up to date for 192.168.111.62:5000/busybox:latest
最常见的运行容器方式是直接执行docker run,docker run会根据用户指定的参数创建并启动容器。参数的详细介绍请查看在线帮助docker run --help。
建议步骤如下:
(1) 进入系统视图。
system-view
(2) 执行docker images查看系统中有哪些镜像以及是否存在想要的镜像。
(3) 执行docker run运行容器。
(4) 执行docker ps查看容器运行情况。
# 运行一个TFTP server容器,该容器和Comware共享命令空间。
<Sysname> system-view
[Sysname] docker run --name tftpd --network container:comware tftpd
# 运行一个TFTP server容器,该容器和Comware非共享命令空间。
<Sysname> system-view
[Sysname] docker run --name tftpd --network tpa tftpd
# 运行一个TFTP server容器,该容器和Comware非共享命令空间,IP地址固定为1.1.1.1/24。
<Sysname> system-view
[Sysname] docker run --name tftpd --network tpa --ip 1.1.1.1 tftpd
# 运行一个TFTP server容器,该容器和Comware非共享命令空间,IP地址固定为1.1.1.1/24,并且设备启动时该容器也自动运行。
<Sysname> system-view
[Sysname] docker run --name tftpd --network tpa --ip 1.1.1.1 --restart=always tftpd
· 设置容器的CPU权重
如果设备上创建了多个容器,那么这些容器会共享设备的CPU资源。为了防止一个容器过多的占用CPU,而导致其他容器无法运行,需要限制容器对CPU的使用。
系统根据容器的CPU权重占所有容器CPU权重总和的比率来确定该容器的任务在一个CPU上占用时间的比率。比如当3个容器的CPU权重分别为10、10、5,则系统为第一个容器分配的CPU时间和为第二个容器分配的时间近似都是第三个容器的CPU时间的2倍,此时和配置权重值分别为2、2、1效果一致。
· 设置容器可使用的CPU列表
用户可以在创建容器或者运行容器时指定容器可以使用的CPU列表,同时用户可以在容器运行时更新容器可使用的CPU列表。容器可使用的CPU列表与设备的型号有关,请以设备的实际情况为准。
· 为容器分配内存空间
容器创建后,这些容器将共享设备的内存空间。为了防止一个容器过多的占用内存,而导致其他容器无法正常运行业务,需要限制容器对内存的使用。
缺省情况下,一个容器可使用的最大内存为256MB,用户可以指定的最大内存为2GB。
为容器分配的内存空间至少需要保证该容器的正常启动并运行。建议等待容器启动完毕后,使用docker stats --no-stream查看容器的资源占用情况,并根据实际情况作出相应调整。
可以在创建容器或者运行容器时为容器分配CPU资源及内存资源,也可以在容器运行过程中更新容器占用的CPU及内存。
请参考docker create --help、docker run --help、docker update --help
# 运行容器ubntu,限制它最多可占用20%的CPU资源。
<Sysname> system-view
[Sysname] docker run -it --cpu-period=100000 --cpu-quota=20000 ubntu /bin/bash
当容器运行在后台时,可以通过docker attach连接到容器。
(1) 进入系统视图。
system-view
(2) 连接到容器。
docker attach 容器名或者容器ID
可使用docker attach --help查看帮助及具体使用方法。
可以通过快捷键<Ctrl+P+Q>离开容器,返回到Comware的命令行编辑界面。
(1) 进入系统视图。
system-view
(2) 查看正在运行的容器。
docker ps
(3) 查看所有容器,包括已停止的容器。
docker ps -a
可使用docker ps --help查看帮助及具体使用方法。
执行save命令时如果选择保存Docker文件,系统会将整个docker数据文件夹打成一个压缩包保存在Flash上的flash:/third-party/container_storage/目录下,系统重启后会将使用该文件恢复容器。
可在任意视图下执行save命令保存容器,被保存的容器将在下次启动时自动恢复到系统中。关于save命令的详细介绍请参见“基础配置命令参考”中的“配置文件管理”。
<Sysname> save
The current configuration will be written to the device. Are you sure? [Y/N]:y
Please input the file name(*.cfg)[flash:/startup.cfg]
(To leave the existing filename unchanged, press the enter key):
flash:/startup.cfg exists, overwrite? [Y/N]:y
Validating file. Please wait...
Saving docker files need some time. Do you want to save docker files in this process? [Y/N]:y
Saving docker files
.....
Done.
Saved the current configuration to mainboard device successfully.
<Sysname>
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!