一 当前完成目标
1.1 系统环境说明,开发环境:VSCode 1.63/Windows 10。部署运行环境:CentOS 7.6
1.2 Windows下一个简单的go项目代码,gin框架的web服务功能,docker容器内侦听端口8080
1.3 编译后发布到CentOS下,开启 10个web服务,docker容器外端口,8080-8089
可能需要用到的知识
windows下,vscoce,终端输入,发到windows
go env -w GOOS=windows
windows下,vscoce,终端输入,发布到linux
go env -w GOOS=linux
二 大体步骤
2.1 windows下编译好,运行文件【test_gin】上传到 CentOS 下目录test_gin,比如 /home/test_gin
2.2 下载安装docker client端,请参看其他网络资料。确认安装好, docker version 可以查询到版本记录
[root@tmp test_gin]# docker version
Client: Docker Engine - Community
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
...
Server: Docker Engine - Community
Engine:
Version: 20.10.12
API version: 1.41 (minimum version 1.12)
Go version: go1.16.12
...
这里可以确认一下,docker是分为client和server端,server端在远端,存放着我们可能需要的镜像文件,client端在我们自己的CentOS主机上,最初是没有任何镜像文件【使用 docker images 查看】的。
2.3 创建Dockerfile文件,目录结构如下
[root@tmp test_gin]# ls -lh
total 8.8M
-rw-r--r-- 1 root root 138 Mar 3 14:51 Dockerfile
-rwxr-xr-x 1 root root 8.8M Mar 3 14:48 test_gin
Dockerfile文件大体如下:
[root@tmp test_gin]# more Dockerfile
FROM alpine
EXPOSE 8080
COPY test_gin /home/test_gin/
WORKDIR /home/test_gin/
CMD './test_gin'
docker 的命令,需要详细查看网络资料。
2.4 创建image镜像文件
[root@tmp test_gin]# docker build -t test1 .
Sending build context to Docker daemon 9.166MB
Step 1/5 : FROM alpine #基于什么样的镜像源开始创建我们自己的镜像文件
---> c059bfaa849c
Step 2/5 : EXPOSE 8080 #容器开放的端口号,镜像文件只有运行起来,才成为一个容器。一个镜像文件可以创建n多个容器。类似windows下pe文件和进程的关系。
---> Using cache
---> a80a5f0fcce1
Step 3/5 : COPY test_gin /home/test_gin/ #copy 本地 test_gin 文件 到 镜像 /home/test_gin/ 下面。镜像目录会自行创建。
---> Using cache
---> 5b3a8c087dbe
Step 4/5 : WORKDIR /home/test_gin/
---> Using cache
---> c7696e75f72b
Step 5/5 : CMD './test_gin' #需要执行的命令
---> Using cache
---> eb8412e7382f
Successfully built eb8412e7382f
Successfully tagged test1:latest
镜像文件名称是 test1,这个镜像文件名字可以随意,只要符合程序变量规范。可以在本地查找一下 test1镜像文件,结果没有,说明已经提交到docker server端的git仓库。
FROM 命令就是基于什么样的镜像源文件,创建我们自己的镜像文件。这个最初并没有很好理解,等你创建好自己的镜像文件,运行后产生容器后,可以 把容器内的所有文件都 copy出来查看比对一下,就 大体清楚了。
#copy容器内文件
[root@tmp tmp]# docker cp 091aff04d182:/ ./
docker ps -a 显示所有容器,
091aff04d182为容器id【CONTAINER ID 】
2.5 运行镜像文件
docker run -d -p 8080:8080 -t test1
docker run -d -p 8081:8080 -t test1
docker run -d -p 8082:8080 -t test1
...
-d表示后台运行,-p 表示端口的映射。
2.6 使用测试工具postman测试确认
三 个人觉得需要注意的地方
3.1 镜像和容器的区别
镜像和容器的差别,网络上有一些比喻,可以参考,镜像就是类的实列,也就是对象,而容器就是类。
也可以理解为容器就是windows下的进程,而镜像就是windows下的pe文件。
3.2 docker的client端和server端
学海无涯,错误难免,如有发现,尽请指正。
--the end