分别制作离线和在线的docker .net core镜像安装包和脚本

接着我的 上一篇 来
十、制作离线安装包和脚本
首先得离线安装docker,在我 这篇 里已写。

打开开发环境的centos终端
停止和删除之前已运行的容器
停止webapi容器docker stop test_webapi
停止mysql容器docker stop test_mysql
删除webapi容器docker rm test_webapi
删除mysql容器docker rm test_mysql

删除之前已用过的相关文件
在win10的winScp的界面作删除,或在centos终端用命令删除
清空/root/TestAll/Mysql/data目录下的所有文件
清空/root/TestAll/Webapi目录下的所有文件

输入docker images查看镜像,如下图
在这里插入图片描述
导出镜像到指定目录,我这里导出到根目录下的root目录
导出mysql镜像docker save mysql:8.0.21 > /root/mysql8.0.21.tar
导出testapi镜像docker save testapi:1.0 > /root/testapi1.0.tar
导出完成后,将root目录下这两个包分别放到TestAll目录下的MySql目录里和WebApi目录里。
在TestAll目录下新建test.sh脚本文件并输入以下代码

#!/bin/bash

# T得到TestAll.tar.gz压缩包解压力后的目录,例如/root/TestAll
unTarDir=$(cd `dirname $0`; pwd)

# 进入目录
cd ${unTarDir}

## begin docker
# docker压缩安装包文件名
dockerFileName=docker-18.06.3-ce.tgz

# 解压docker安装包到/usr/bin下
tar -xf ${dockerFileName} -C /usr/bin --strip-components=1

# 创建docker配置文件并输入以下配置
cat>/etc/systemd/system/docker.service<[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinityTimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF

# 添加文件权限
chmod +x /etc/systemd/system/docker.service
# 重新加载配置文件
systemctl daemon-reload
# 启动docker
systemctl start docker
# 设置开机自动启动
systemctl enable docker
## end docker

# 要导入的mysql压缩包名称
tar_mysql=mysql8.0.21.tar
# 要导入的webapi压缩包名称
tar_webapi=testapi1.0.tar

# 我的mysql镜像的名称
image_mysql=mysql:8.0.21
# 我的webapi镜像的名称
image_webapi=testapi:1.0

# 目标centos运行mysql容器的名称
container_mysql=test_mysql
# 目标centos运行webapi容器的名称
container_webapi=test_webapi

#容器互联的网桥名称
bridge_name=testBridge

# 进入目录 ${TestAllDir}
cd ${unTarDir}

# 开放centos的8999端口以供宿主机通过浏览器地址192.168.3.149:8999来访问webapi
firewall-cmd --zone=public --add-port=8999/tcp --permanent

# 停止运行中的mysql容器
docker stop ${container_mysql}
# 停止运行中的webapi容器
docker stop ${container_webapi}

# 删除mysql容器
docker rm ${container_mysql}
# 删除webapi容器
docker rm ${container_webapi}

# 删除mysql镜像
docker rmi ${image_mysql}
# 删除webapi镜像
docker rmi ${image_webapi}

# 从解压的指定目录导入mysql镜像
docker load < ${unTarDir}/MySql/${tar_mysql}
# 从解压的指定目录导入webapi镜像
docker load < ${unTarDir}/WebApi/${tar_webapi}

# 创建一个专用网桥以供webapi和mysql容器互相访问
docker network create --driver bridge ${bridge_name}

# 启动mysql8.0容器,
# 注意容器名和连接字符串的保持一致,
# 注意MYSQL_ROOT_PASSWORD是abc123也一致
# 注意src dst路径映射要正确
docker run --name=${container_mysql} --network=${bridge_name} --restart=always \
-e MYSQL_ROOT_PASSWORD="abc123" \
--mount type=bind,src=${unTarDir}/MySql/config/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=${unTarDir}/MySql/data,dst=/var/lib/mysql \
--mount type=bind,src=${unTarDir}/MySql/scripts,dst=/docker-entrypoint-initdb.d \
-d -p 8306:3306 ${image_mysql}

# 启动webapi容器
docker run --name=${container_webapi} --network=${bridge_name} --restart=always \
-d -p 8999:80 ${image_webapi}

输入cd /root/进入此目录
输入tar -zcvf /root/TestAll.tar.gzTestAll将当前TestAll目录打压缩包到root目录下的TestAll.tar.gz
打包成功后,可删除TestAll目录了,或重命名目录,我这里是重命名为TestAll_old了。如下图
分别制作离线和在线的docker .net core镜像安装包和脚本_第1张图片
测试安装
先上传到用户的CentOS7系统里。例如上传到了/root目录下
命令cd /root进入/root目录
命令解压包tar -zxvf TestAll.tar.gz
输入cd TestAll进入目录
给文件添加执行权限chmod +x test.sh
执行安装./test.sh

十一、制作在线安装包和脚本并将镜像上传到阿里个人镜像仓库
在客户生产环境的CentOS系统可以联网而且我方有阿里云或其它云的情况下,就可以在线安装webapi和mysql等应用程序了。

首先同样需要将TestAll通过Ftp工上传到/root下。注意生产环境要上传到数据盘而不是系统盘。
登录阿里云并进入控制台
在搜索框输入“容器镜像服务”然后进入
分别制作离线和在线的docker .net core镜像安装包和脚本_第2张图片
进入“命名空间”界面创建一个私有的命名空间(注意设置后不可修改,要想好名字哦),例如名为testSpace,如下图
分别制作离线和在线的docker .net core镜像安装包和脚本_第3张图片
进入镜像仓库界面创建一个私有仓库,名为mydocker,如下图
分别制作离线和在线的docker .net core镜像安装包和脚本_第4张图片
如果没有在线代码源就使用本地仓库(有则配合jenkins很爽),如下图
分别制作离线和在线的docker .net core镜像安装包和脚本_第5张图片
仓库建完后点击“管理”,接着再进入“基本信息”界面,会有详细的说明告诉你如何登录阿里镜像仓库,如何上传镜像到阿里云,如何从阿里云下载镜像等等。如下图
分别制作离线和在线的docker .net core镜像安装包和脚本_第6张图片
了解完这些后,就开把之前做好的镜像上传到我的阿里云的私有镜像仓库吧
登录里云私有镜像仓库
sudo docker login [email protected] registry.cn-qingdao.aliyuncs.com

上传镜像到阿里云个人镜像仓库
推送mysql镜像,其中6e447ce4863d是镜像ID,可用docker images得知
docker tag 6e447ce4863d registry.cn-qingdao.aliyuncs.com/XXXX/mydocker:mysql8.0.21

docker push registry.cn-qingdao.aliyuncs.com/XXXX/mydocker:mysql8.0.21

上传webapi镜像
其中9366bcde4899是镜像ID,可用docker images得知
docker tag 9366bcde4899 registry.cn-qingdao.aliyuncs.com/XXXX/mydocker:testapi1.0

docker push registry.cn-qingdao.aliyuncs.com/XXXX/mydocker:testapi1.0

上传完后在镜像版本界面就可看到了,如下图
分别制作离线和在线的docker .net core镜像安装包和脚本_第7张图片
上一步完成后,在本地开发机centos镜像会多出两个镜像,如下图
分别制作离线和在线的docker .net core镜像安装包和脚本_第8张图片
可使用命令删除,留着也行,看自己需要吧,反正是开发机的centos
删除命令如下
docker rmi registry.cn-qingdao.aliyuncs.com/XXXX/mydocker:mysql8.0.21

docker rmi registry.cn-qingdao.aliyuncs.com/XXXX/mydocker:testapi1.0
再输入docker images查看就发现已册成功了。

我还是使用开发机的centos来测试从阿里云下载镜像并运行吧
从阿里云私有镜像仓库下载镜像的命令如下,先不执行,而是新建一个sh脚本文件来执行(当然下面的命令也可放到sh脚本里,我这就不搞了)
docker pull registry.cn-qingdao.aliyuncs.com/XXXX/mydocker:mysql8.0.21

docker pull registry.cn-qingdao.aliyuncs.com/XXXX/mydocker:testapi1.0

在阿里仓库有了镜像后,TestAll目录里面testapi1.0.tarmysql8.0.21.tar这两个镜像文件就可以不要了,删除。为了测式我通过WinSCP工具手动将centos里的这两文件删除了

新建脚本文件test_online.sh,输入以下代码后再通过WinSCP工具上传到/root目录下

#!/bin/bash

# TestAll.tar.gz压缩包所在的目录
TestAllDir=/root/

# 阿里云我的mysql镜像的名称
image_mysql=registry.cn-qingdao.aliyuncs.com/XXXX/mydocker:mysql8.0.21
# 阿里云我的webapi镜像的名称
image_webapi=registry.cn-qingdao.aliyuncs.com/XXXX/mydocker:testapi1.0

# 目标centos运行mysql容器的名称
container_mysql=test_mysql
# 目标centos运行webapi容器的名称
container_webapi=test_webapi

#容器互联的网桥名称
bridge_name=testBridge

# 1.进入目录 ${TestAllDir}
cd ${TestAllDir}
# 2.解压包 TestAll.tar.gz
tar -zxvf TestAll.tar.gz

# 3.停止并删除目标centos的mysql容器${container_mysql}
docker stop ${container_mysql}
docker rm ${container_mysql}

# 4.停止并删除目标centos的webapi容器${container_webapi}
docker stop ${container_webapi}
docker rm ${container_webapi}

# 5.删除目标centos的mysql镜像
docker rmi ${image_mysql}

# 6.删除目标centos的webapi镜像
docker rmi ${image_webapi}

# 7.创建一个专用网桥testBridge以供webapi和mysql容器互相访问
docker network create --driver bridge ${bridge_name}

# 8.启动mysql8.0容器,对外端口是8306
docker run --name=${container_mysql} --network=${bridge_name} --restart=always \
-e MYSQL_ROOT_PASSWORD="abc123" \
--mount type=bind,src=${TestAllDir}/TestAll/MySql/config/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=${TestAllDir}/TestAll/MySql/data,dst=/var/lib/mysql \
--mount type=bind,src=${TestAllDir}/TestAll/MySql/scripts,dst=/docker-entrypoint-initdb.d \
-d -p 8306:3306 ${image_mysql}

# 9.启动webapi容器,对外端口是8999
#注意生产环境一般是80端口,不需要8999
docker run --name=${container_webapi} --network=${bridge_name} --restart=always \
-d -p 8999:80 ${image_webapi}

# 10.开放centos的8999端口以供别人通过8999端口来访问webapi
#注意生产环境一般是80端口,不需要8999
firewall-cmd --zone=public --add-port=8999/tcp --permanent

因为数据库只需安装一次,以后就只更新业务webapi了,脚本中就可以去掉关于mysql的代码了。另外注意TestAll目录要上传到centos主机的数据盘,不要放到系统盘,否则系统坏了就没有mysql的数据了。

你可能感兴趣的:(docker)