Docker实践之自定义镜像、推送至远程docker hub

一、Dockerfile、Docker镜像和Docker容器的关系

在进行创建镜像之前,我们先了解一下这三者之间的关系。

Dockerfile 是软件的原材料,Docker 镜像是软件的交付品,而 Docker 容器则可以认为是软件的运行态。从应用软件的角度来看,Dockerfile、Docker 镜像与 Docker 容器分别代表软件的三个不同阶段,Dockerfile 面向开发,Docker 镜像成为交付标准,Docker 容器则涉及部署与运维,三者缺一不可,合力充当 Docker 体系的基石。

更多介绍可以移步这里:深入分析Docker镜像原理(点击链接查看)

二、创建自定义镜像的两种方式

  1. 使用commit命令创建本地镜像,我们在原有镜像基础上所做的修改应用commit命令之后 ,形成一个全新镜像,个人不太推荐此种做法,因为不便镜像的持续维护。
  2. 使用Dockerfile创建镜像,简单来说,就是我们编写好一个模板文件,编译之后就形成一个可用版本的镜像,后期我们只需维护该模板文件就可以达到镜像的持续更新、维护。

三、采用Dockerfile创建镜像(建立通用java环境镜像)

为了保持镜像通用与可维护 ,首先我们需要首先创建一个环境配置java镜像。具体Dockerfile编写如下:

#首先设置我们基础镜像来源
FROM centos:latest
#设置作者信息
MAINTAINER jiucool "www.jiucool.org"
#下面是设置环境变量
ENV JDK_FILE_NAME server-jre-8u74-linux-x64.tar.gz
ENV INSTALL_FOLDER /home/install
ENV JDK_HOME /usr/local/jdk

#执行相关命令
RUN mkdir ${INSTALL_FOLDER}
RUN mkdir ${JDK_HOME}
ADD ${JDK_FILE_NAME} ${JDK_HOME}
ADD jdk.sh /etc/profile.d/

RUN chmod 755 /etc/profile.d/jdk.sh
RUN  chmod +x -R /usr/local/jdk/
WORKDIR ${INSTALL_FOLDER}
#执行的默认命令
CMD ["/bin/bash"]

我们的文件目录结构如下:

docker_java

然后执行编译命令

docker build -t jiucool/java:server-jre-8u74 .

docker_java_2

docker_java_3

OK,到这里已经编译成功,我们需要运行该镜像验证一下,是否配置正确。

docker run -it jiucool/java:server-jre-8u74
docker_java_4

OK,经验证一切正常。

四、镜像推送到docker hub 官方仓库

首先我们需要登录账号:

docker login
Username: jiucool
Password: 
Email: XXXX@jiucool.org
Login Succeeded

推送到Docker Hub上的镜像必须按照下面的格式进行:username/image_name,如果命名的镜像名字不是按照上面的规则进行的,可以使用docker tag 进行修改。

下面执行推送命令:
docker push jiucool/java:server-jre-8u74

docker_java_push

稍等片刻即推送成功。

然后通过官方库进行搜索查找验证。

docker_java_5

至此,我们已经从编写Dockerfile — 编译 — 推送,完成了整个过程。

Leave a Reply


正在读取数据……