本文已参与「开源摘星计划」,欢迎正在阅读的你加入,活动链接:https://github.com/weopenprojects/WeOpen-Star
Docker镜像制作
下面例子中我采用 Dockerfile 的形式制作一个 OpenCloudOS 镜像,内置 Java17 版本,镜像名称:OpenCloudOS。在工作目录中创建应该名字为 Dockerfile 的文件,并将下面的内容复制到文件中:
FROM opencloudos/opencloudos:8.6
# 这里要替换 your_name 为您的名字, 和your_email 为您的Email
MAINTAINER LeonDing <[email protected]>
# 安装 jdk17
RUN cd /usr/local \ && yum install -y wget \ && wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz \ && tar -zxvf jdk-17_linux-x64_bin.tar.gz \ && echo "export JAVA_HOME=/usr/local/jdk-17
export PATH=$PATH:$JAVA_HOME/bin;
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar;" >> /etc/profile \ && source /etc/profile
# 启动时运行这个命令
CMD ["/bin/bash"]
上面这种方式通过 Dockerfile 进行构建的自定义 OpenCloudOS 环境镜像,里面有一段 Shell 脚本来自定义安装 JDK 这种方式可以根据自己编写 Shell 逻辑进行安装,但是不够简便,可以通过在 Docker Hub 中已经提供好的 Open JDK 镜像作为基础镜像二次构建,下面是这种方式的 Dockerfile 内容:
# 基础镜像
FROM opencloudos/opencloudos:8.6
# 基于 OpenJDK 叠加
FROM openjdk
# 这里要替换 your_name 为您的名字, 和your_email 为您的Email
MAINTAINER LeonDing <[email protected]>
# 启动时运行这个命令
CMD ["/bin/bash"]
然后即可执行下面命令构建属于自己的基于 OpenCloudOS 自定义环境的镜像了,命令如下:
root@lu:~/oc# docker build --no-cache -t opencloudos-openjdk:v1 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM opencloudos/opencloudos:8.6
---> 85381566b97e
Step 2/4 : FROM openjdk
latest: Pulling from library/openjdk
latest: Pulling from library/openjdk
828689dcde4b: Pull complete
4f742b2cfb7e: Pull complete
642e9a9e0a5f: Pull complete
Digest: sha256:a033670aa69df318f84ea9c76d999e9de2b5fff911a65ce3d0f280316c014e87
Status: Downloaded newer image for openjdk:latest
---> bc32630b1cf3
Step 3/4 : MAINTAINER LeonDing <[email protected]>
---> Running in beeb3412285e
Removing intermediate container beeb3412285e
---> 0aade518ef7b
Step 4/4 : CMD ["/bin/bash"]
---> Running in abfafd3b2f53
Removing intermediate container abfafd3b2f53
---> f70fb74cb8a8
Successfully built f70fb74cb8a8
Successfully tagged opencloudos-openjdk:v1
当构建完成之后会提示你 Successfully tagged opencloudos-openjdk:v1
相关信息,例如下图为我构建过程中的截图。
构建完成之后就可以通过 Docker 来启动自定义构建的镜像,运行镜像,查看镜像是否满足我们自定义的环境需求如下:
# 查看镜像ID
root@lu:~/oc# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
opencloudos-openjdk v1 f70fb74cb8a8 2 minutes ago 481MB
openjdk latest bc32630b1cf3 8 days ago 481MB
opencloudos/opencloudos 8.6 85381566b97e 4 weeks ago 280MB
# 运行镜像
docker run -it f70fb74cb8a8 /bin/bash
bash-4.4# java -version # 版本信息
openjdk version "18.0.2.1" 2022-08-18
OpenJDK Runtime Environment (build 18.0.2.1+1-1)
OpenJDK 64-Bit Server VM (build 18.0.2.1+1-1, mixed mode, sharing)
至此我们已经完成基于 OpenCloudOS 相关的自定义镜像构建工作,下面开始介绍如何将其推送到远程的 Docker Hub 中供别人使用。
推送到 Docker Hub
把自定义镜像镜像推送到远端 Docker Hub 首先得需要在 Docker Hub 官网注册一个账号,然后在本地登录这个账号,即可推送自己的镜像到远程服务器中,注册账号请去 https://hub.docker.com/。使用 docker login
命令就可以登录自己的账号,注意这里的账号不是邮箱而是用户名!
再使用 docker tag
命令创建自定义镜像版本,这里需要带上自己用户名作为前缀,如下图所示:
当上传完成之后我们就可以去自己的 Docker Hub 主页看看,下面就有自己创建镜像类别,如下图为我刚刚创建的自定义镜像:
到此整个自定义制作镜像过程完成,可以通过命令 docker pull auula/opencloudos-openjdk
来拉取我创建这个镜像来使用。