一、安装Docker软件
1、安装docker
CentOS系列
# yum remove docker-ce-cli containerd.io
# curl -sSL
https://get.docker.com/ | sh
(# yum install docker)
Ubuntu系列
# apt-get install docker
下载docker-compose
https://github.com/docker/compose/releases
https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64
2、启动docker
# systemctl start docker
状态:
# systemctl status docker
测试:
# docker run hello-world
3、拉取OS容器
搜索OS镜像
# docker search centos
拉取centos镜像
# docker pull centos
拉取debian镜像
# docker pull debian
拉取ubuntu镜像
# docker pull ubuntu
4、查看当前拉取的镜像
# docker images
二、运行容器
1、运行容器
更新宿主机OS
# yum update
运行容器
# docker run -it --device=/dev/net/tun --device=/dev/ppp --cap-add=net_admin ubuntu
2、docker shell中安装ifconfig等软件
(docker)# apt-get update
(docker)# apt-get install net-tools
3、保持docker运行,在宿主机shell中查看当前运行的容器
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6ed588f5215 centos "bash" 2 minutes ago Up 2 minutes kickass_archimedes
4、保存docker shell中所做的修改,生成自己的镜像
# docker commit -a "zst" -m "create zstdadi" d6ed588f5215 zstdadi:v1.0
5、查看新生成的镜像ID
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zstdadi v1.0 4c8f4918193b 3 minutes ago 274 MB
6、运行新镜像
退出 docker shell
(docker)# Ctrl+D
再次进入新生成的镜像:
# docker run -it --device=/dev/net/tun --device=/dev/ppp --cap-add=net_admin 4c8f4918193b
查看容器
# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b8746d7c893 ubuntu "/init" 8 minutes ago Exited (0) 7 minutes ago elated_hopper
若状态是exited,则先启动
# docker start 3b8746d7c893
进docker的shell里,如果入口不是ssh
# docker exec -t -i elated_hopper sh
查看docker日志
# docker logs -f 3b8746d7c893
删除容器
# docker container rm 3b8746d7c893
查看镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zstdadi latest 3bd141a98b52 23 hours ago 395MB
删除镜像
# docker image rm 3bd141a98b52
三、安装中神通大地云控软件
1、拷贝文件到容器中
查看容器ID
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd8eba2a9a7e 4c8f4918193b "bash" 7 minutes ago Up 7 minutes romantic_hamilton
拷贝本地文件到docker容器中,事先上传或下载中神通大地云控软件包到宿主机/root目录中
# docker cp /root/zstdadi_v3.tgz fd8eba2a9a7e:/root
# docker cp /root/install_v3.sh fd8eba2a9a7e:/root
2、如果中断会话,可以重新进入CONTAINER容器中
先查看当前容器ID
# docker ps
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd8eba2a9a7e 4c8f4918193b "bash" 22 hours ago Up 22 hours romantic_hamilton
再attach进入容器
# docker attach fd8eba2a9a7e
3、在容器中安装中神通大地云控软件
(docker)# cd /root
(docker)# ls -alt
(docker)# chmod a+x install_v3.sh
(docker)# ./install_v3.sh
4、在容器中运行中神通大地云控软件(可选)
(docker)# /usr/fw/bin/doonce
(docker)# /usr/fw/bin/doall
5、保存为新的images
# docker commit -a "zst" -m "zstdadi no2" fd8eba2a9a7e zstdadi:v1.1
sha256:65b6f5103f9ce2a55f8e87c5e4e40cd8e57322f9012fe36cfd60532f5ee1d9d7
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zstdadi v1.1 65b6f5103f9c 5 seconds ago 382 MB
zstdadi v1.0 4c8f4918193b 23 hours ago 274 MB
6、上传到docker hub中,让其他人可以直接拉取使用
(略)
四、日常使用中神通大地云控镜像
1、查看中神通大地云控镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zstdadi v1.2 acb884c78488 56 minutes ago 822 MB
2、运行中神通大地云控容器
将docker的888端口暴露给宿主机的8080端口,宿主机自动添加iptables DNAT策略,但是8080端口的安全策略需要手工添加,
可以在宿主机中手工添加DNAT及安全策略,动态暴露docker端口给宿主机,而不用docker run -it -p 8080:888 命令
# docker run -it --device=/dev/net/tun --device=/dev/ppp --cap-add=net_admin -p 8080:888 zstdadi:v1.2
3、初始化中神通大地云控设置
(docker)# /usr/fw/bin/doonce
4、运行中神通大地云控系统
运行某一个中神通大地云控服务
(docker)# /usr/fw/bin/doxxx
运行全部中神通大地云控服务
(docker)# /usr/fw/bin/doall
5、查看运行的容器CONTAINER暴露的端口
# docker ps
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
51d17af2f53a zstdadi:v1.2 "bash" 6 minutes ago Up 6 minutes 0.0.0.0:8080->888/tcp elated_mccarthy
6、查看日志# docker logs elated_mccarthy
五、注意事项
docker容器中:
1、不能mv 或 sed -i /etc/hosts hostname resolv.conf(缺省是宿主机的内容)
2、不能hostname 改名
hostname: you must be root to change the host name
3、不能reboot
https://forums.docker.com/t/restart-container-within-itself/31489
4、没有systemd,但不影响大地云控的自有服务程序管理,可以另外安装适用于Docker环境的systemd
5、不能iptables,没有iptables策略
iptables: Permission denied (you must be root)
6、docker网络缺省为 172.17.0.0/24,需要在宿主机中SNAT(自动生成),才能在宿主机及外部网络中主动连通docker的网络,否则只能外部主动连接docker container OS(更安全?)
7、docker运行时会自动添加iptables策略,如果删除了全部iptables策略,会影响外部网络使用docker
8、参考资料
只要一小时,零基础入门Docker
https://zhuanlan.zhihu.com/p/23599229
Docker — 从入门到实践
https://yeasy.gitbooks.io/docker_practice/
通过容器提交镜像(docker commit)以及推送镜像(docker push)笔记
https://www.cnblogs.com/kevingrace/p/9599988.html
更多介绍:
http://www.trustcomputing.com.cn/cn/index.php/product/dns-url
下载地址:
http://www.trustcomputing.com.cn/bbs/viewthread.php?tid=1174
[
本帖最后由 linda 于 2023-2-1 19:48 编辑 ]