本文仅讲解如何便捷的构建一个Docker Ubuntu 底包镜像, 至于要构建什么应用,可基于这个 Ubuntu 镜像再次进行构建

准备工作

设置并使用阿里云容器镜像服务

阿里云 Docker 容器镜像服务

启动一个 vscode 容器,用于编写构建代码

Docker 运行 WEB 在线编辑器 VScode

构建一个 Ubuntu基础底包镜像

资管管理器目录结构

  1. 创建文件夹路径 dockerfile/ubuntu/v1
  2. 创建文件 bulid.sh
  3. 创建资源文件夹 res,并添加你想上传到容器内的文件或目录, WEB VScode 支持将文件或文件夹直接拖达到 res 文件夹

image.png

bulid.sh 文件内容

  1. #!/usr/bin/env bash
  2. _workspace=/tmp/docker_build
  3. rm -rf $_workspace
  4. mkdir -p $_workspace
  5. # 写 Dockerfile 文件
  6. cat >$_workspace/Dockerfile <<-'AEOF'
  7. FROM ubuntu:20.04
  8. ENV TZ=Asia/Shanghai
  9. RUN rm -f /etc/localtime; \
  10. ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  11. RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list; \
  12. sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list; \
  13. apt-get clean; \
  14. apt-get update;
  15. # 安装常用软件包
  16. RUN apt-get install -y sudo openssh-server cron jq bc screen lrzsz curl iputils-ping net-tools ncat;
  17. # 解开下行注释,添加 res 目录下的文件到容器内 /volume 目录,底包镜像不建议添加文件,在构建应用的时候再添加,这里只是做示例
  18. #ADD res/* /volume
  19. RUN apt-get clean; \
  20. rm -rf /var/lib/apt/lists/*; \
  21. rm -rf /etc/machine-id; \
  22. rm -rf /var/lib/dbus/machine-id; \
  23. echo root:lwmacct | chpasswd; \
  24. sed -i 's,^#PermitRootLogin.*$,PermitRootLogin yes,' /etc/ssh//sshd_config; \
  25. ln -s /usr/bin/python3 /usr/bin/python;
  26. AEOF
  27. __add_file() {
  28. mkdir -p $_workspace/res/
  29. cp -rf /data/docker-data/vscode/workspace/dockerfile/ubuntu/v1/res $_workspace/res/
  30. chmod -R 777 $_workspace/res/
  31. }
  32. __build() {
  33. # 下面的参数 -t 参数,改成你自己的阿里云镜像服务仓库地址
  34. docker build -t registry.cn-hangzhou.aliyuncs.com/lwmacct/ubuntu:v1 $_workspace
  35. docker push registry.cn-hangzhou.aliyuncs.com/lwmacct/ubuntu:v1
  36. }
  37. __add_file
  38. __build
  39. # 执行以下命令开始构建
  40. __exec() {
  41. # 进入宿主机根进程空间(相当于宿主机命令行模式)
  42. nsenter --mount=/host/1/ns/mnt --net=/host/1/ns/net
  43. # 执行构建命令
  44. bash /data/docker-data/vscode/workspace/dockerfile/ubuntu/v1/bulid.sh
  45. }

开始构建Ubuntu 容器镜像

image.png

构建完成,并推送到阿里云镜像仓库

image.png

运行构建好的 Ubuntu 底包镜像

可在本机或其他机器上运行, 在其他设备运行可以验证镜像是否成功推送到阿里云仓库

基本常规运行

  1. __run_ubuntu() {
  2. docker run -itd --name=ubuntu \
  3. --restart=always \
  4. -p 221:22 \
  5. --privileged \
  6. -v /proc:/host/:ro \
  7. -v /data/docker-data/ubuntu/:/volume/data \
  8. registry.cn-hangzhou.aliyuncs.com/lwmacct/ubuntu:v1
  9. }
  10. __run_ubuntu

在上面的代码中,将 容器内部的22 端口暴露到了宿主机的 221 端口,
可以在宿主机上执行以下命令, 运行 容器内部的 sshd 程序,使得我们使用工具连接宿主机 IP 的 221 端口能直接连上容器,

  1. docker exec -it ubuntu bash -c '/etc/init.d/ssh start'

容器登录密码是在构建的时候设置的, 密码为 lwmacct
image.png