Board logo

标题: 在Docker容器中安装使用中神通大地云控系统 [打印本页]

作者: linda    时间: 2020-4-15 17:31     标题: 在Docker容器中安装使用中神通大地云控系统

一、安装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 编辑 ]




欢迎光临 中神通公司技术论坛 (http://trustcomputing.com.cn/bbs/) Powered by Discuz! 6.0.0