最近项目组内有小伙伴需要部署私服, 但是完全不懂Linux命令, 直接给他服务器操作权限真担心服务器会被他删掉, 决定用docker部署一个私服给他使用, 然后再做一个简单的远程操作工具.
docker安装流程略过.
- 生成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
|
- 创建Docker镜像
1 2
| # 如果有自定义Dockerfile文件的名字, 就需要添加 -f 参数, 指定文件路径 docker build -t $username:1.0.0 -f ./${username}_Dockerfile .
|
- 启动容器
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 2
| # 在容器内执行命令 username 是容器名, bash /data/$username/run.sh 使用bash运行这个脚本 docker exec $username bash /data/$username/run.sh
|
- 查看进程, 在docker内启动的进程, 是可以在宿主机上直接通过ps命令查看的
服务器的问题搞定了, 然后就需要做一个简单的远程工具, 这里我使用bat+putty.
1 2 3 4 5 6
| set /p name=输入私服账号名:
echo cd /data/images ^&^& ./run_server.sh %name% > cmd.sh
putty.exe -ssh -l 用户名 -pw 密码 ip地址 -m cmd.sh
|
因为bat脚本内还有Linux服务器的账号密码这些敏感数据, 所以对bat再次进行包装, 通过工具将bat打包为exe, 工具地址:
https://www.bat2exe.net/
至此, 这个私服工具算是大功告成