基于容器打包镜像

  • 以alpine下安装autossh为例
  • 保存安装了autossh的容器为新的镜像
  • 映射容器999端口到宿主机999端口

1.下载基础镜像alpine

docker pull alpine

2.运行容器

docker run -it alpine sh
  • 此处应注意不要使用-d后台运行,因为docker的运行机制为:当检测到容器中没有正在运行的进程时,将自动终止容器的运行.
  • 所以想让docker容器保持运行,必须在创建容器时执行一个非后台进程

3.安装autossh

echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories

apk update && apk add autossh

4.创建容器开启时的启动脚本(可选)

touch start.sh
chmod +x start.sh
echo "authssh -M 54321 -CNg -D 999 user@host"
  • 如果不使用启动脚本,可以直接在创建容器的时候调用启动命令
  • 如果使用启动脚本,需要保证脚本里的进程不会放入后台,否则docker容器会自动关闭

5.保存当前修改为新的镜像

docker ps
docker commit <container id> <image name>

6.基于镜像启动容器

#使用启动脚本
docker run --name=<container name> -it -p 999:999 -d <image name> /start.sh
#不使用启动脚本
docker run --name=<container name> -it -d 999:999 <image name> "authssh -M 54321 -CNg -D 999 user@host"