本文仅讲解如何便捷的构建一个Docker Ubuntu 底包镜像, 至于要构建什么应用,可基于这个 Ubuntu 镜像再次进行构建
准备工作
设置并使用阿里云容器镜像服务
启动一个 vscode 容器,用于编写构建代码
构建一个 Ubuntu基础底包镜像
资管管理器目录结构
- 创建文件夹路径
dockerfile/ubuntu/v1
- 创建文件 bulid.sh
- 创建资源文件夹 res,并添加你想上传到容器内的文件或目录, WEB VScode 支持将文件或文件夹直接拖达到 res 文件夹
bulid.sh 文件内容
#!/usr/bin/env bash
_workspace=/tmp/docker_build
rm -rf $_workspace
mkdir -p $_workspace
# 写 Dockerfile 文件
cat >$_workspace/Dockerfile <<-'AEOF'
FROM ubuntu:20.04
ENV TZ=Asia/Shanghai
RUN rm -f /etc/localtime; \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN 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/* /volume
RUN 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 $_workspace
docker 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