本文仅讲解如何便捷的构建一个Docker Ubuntu 底包镜像, 至于要构建什么应用,可基于这个 Ubuntu 镜像再次进行构建
准备工作
设置并使用阿里云容器镜像服务
启动一个 vscode 容器,用于编写构建代码
构建一个 Ubuntu基础底包镜像
资管管理器目录结构
- 创建文件夹路径
dockerfile/ubuntu/v1 - 创建文件 bulid.sh
- 创建资源文件夹 res,并添加你想上传到容器内的文件或目录, WEB VScode 支持将文件或文件夹直接拖达到 res 文件夹
bulid.sh 文件内容
#!/usr/bin/env bash_workspace=/tmp/docker_buildrm -rf $_workspacemkdir -p $_workspace# 写 Dockerfile 文件cat >$_workspace/Dockerfile <<-'AEOF'FROM ubuntu:20.04ENV TZ=Asia/ShanghaiRUN rm -f /etc/localtime; \ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list; \sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list; \apt-get clean; \apt-get update;# 安装常用软件包RUN apt-get install -y sudo openssh-server cron jq bc screen lrzsz curl iputils-ping net-tools ncat;# 解开下行注释,添加 res 目录下的文件到容器内 /volume 目录,底包镜像不建议添加文件,在构建应用的时候再添加,这里只是做示例#ADD res/* /volumeRUN apt-get clean; \rm -rf /var/lib/apt/lists/*; \rm -rf /etc/machine-id; \rm -rf /var/lib/dbus/machine-id; \echo root:lwmacct | chpasswd; \sed -i 's,^#PermitRootLogin.*$,PermitRootLogin yes,' /etc/ssh//sshd_config; \ln -s /usr/bin/python3 /usr/bin/python;AEOF__add_file() {mkdir -p $_workspace/res/cp -rf /data/docker-data/vscode/workspace/dockerfile/ubuntu/v1/res $_workspace/res/chmod -R 777 $_workspace/res/}__build() {# 下面的参数 -t 参数,改成你自己的阿里云镜像服务仓库地址docker build -t registry.cn-hangzhou.aliyuncs.com/lwmacct/ubuntu:v1 $_workspacedocker push registry.cn-hangzhou.aliyuncs.com/lwmacct/ubuntu:v1}__add_file__build# 执行以下命令开始构建__exec() {# 进入宿主机根进程空间(相当于宿主机命令行模式)nsenter --mount=/host/1/ns/mnt --net=/host/1/ns/net# 执行构建命令bash /data/docker-data/vscode/workspace/dockerfile/ubuntu/v1/bulid.sh}
开始构建Ubuntu 容器镜像
构建完成,并推送到阿里云镜像仓库

运行构建好的 Ubuntu 底包镜像
可在本机或其他机器上运行, 在其他设备运行可以验证镜像是否成功推送到阿里云仓库
基本常规运行
__run_ubuntu() {docker run -itd --name=ubuntu \--restart=always \-p 221:22 \--privileged \-v /proc:/host/:ro \-v /data/docker-data/ubuntu/:/volume/data \registry.cn-hangzhou.aliyuncs.com/lwmacct/ubuntu:v1}__run_ubuntu
在上面的代码中,将 容器内部的22 端口暴露到了宿主机的 221 端口,
可以在宿主机上执行以下命令, 运行 容器内部的 sshd 程序,使得我们使用工具连接宿主机 IP 的 221 端口能直接连上容器,
docker exec -it ubuntu bash -c '/etc/init.d/ssh start'
容器登录密码是在构建的时候设置的, 密码为 lwmacct
