使用docker容器部署你的程序

最近项目组内有小伙伴需要部署私服, 但是完全不懂Linux命令, 直接给他服务器操作权限真担心服务器会被他删掉, 决定用docker部署一个私服给他使用, 然后再做一个简单的远程操作工具.
docker安装流程略过.

  1. 生成Dockerfile, 文件名可以自己指定, 例如这里就是使用的用户名的命名文件, 因为涉及到文件更新的问题, 也为了简化操作, 每次启动容器的时候, 都会删除旧的镜像以及容器, 重新开启, 私服不会有什么重要数据, 不用担心持久化的问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cat > ./${username}_Dockerfile <<EOF
# 设置后续依赖的基础镜像
FROM centos:7
# 维护者
MAINTAINER w
# 项目中会使用到nc命令, 提前安装
RUN yum -y install nc
# net-tools工具包内包含ifconfig, netstat等等命令
RUN yum -y install net-tools
# 将项目文件添加到镜像内
ADD ${username} /data/${username}/
# 给项目可执行程序添加权限
RUN chmod +x /data/${username}/build/server
# 用来启动服务器进程的脚本, 添加权限
RUN chmod +x /data/${username}/run.sh
# 声明容器在运行时会提供哪些端口
EXPOSE $port1 $port2 $port3 $port4 $port5
# 指定容器启动时执行的命令
CMD ["/usr/sbin/init"]
EOF
  1. 创建Docker镜像
1
2
# 如果有自定义Dockerfile文件的名字, 就需要添加 -f 参数, 指定文件路径
docker build -t $username:1.0.0 -f ./${username}_Dockerfile .
  1. 启动容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker run \
-p $port1:$port1\
-p $port2:$port2\
-p $port3:$port3\
-p $port4:$port4\
-p $port5:$port5\
-v /etc/localtime:/etc/localtime\
-d \
--privileged=true \
--name $username \
$username:1.0.0
# -p 端口映射
# -d 后台运行
# -v /etc/localtime:/etc/localtime 设置时区
# --name 给运行的这个容器命名(唯一)
# --privileged 容器内的root将真正的拥有root权限
# $username:1.0.0 指定容器使用哪个镜像以及版本
  1. 启动服务器进程
1
2
# 在容器内执行命令 username 是容器名, bash /data/$username/run.sh 使用bash运行这个脚本
docker exec $username bash /data/$username/run.sh
  1. 查看进程, 在docker内启动的进程, 是可以在宿主机上直接通过ps命令查看的
1
ps -ef | grep $username

服务器的问题搞定了, 然后就需要做一个简单的远程工具, 这里我使用bat+putty.

1
2
3
4
5
6
set /p name=输入私服账号名:
rem 生成一个shell脚本, 脚本内容就是连接到服务器后需要执行的命令
rem run_server.sh负责创建镜像, 启动容器, 启动私服
echo cd /data/images ^&^& ./run_server.sh %name% > cmd.sh
rem putty -m 参数可以指定一个本地的shell脚本, 连接到Linux后立即执行该脚本
putty.exe -ssh -l 用户名 -pw 密码 ip地址 -m cmd.sh

因为bat脚本内还有Linux服务器的账号密码这些敏感数据, 所以对bat再次进行包装, 通过工具将bat打包为exe, 工具地址:
https://www.bat2exe.net/
至此, 这个私服工具算是大功告成