Dockerfile构建Docker镜像

  docker镜像除了通过commit手动构建镜像,还可以通过Dokerfile文件构建。

  通过dockerfile构建镜像的步骤:

  1. 编写dockerfile文件
  2. 通过docker build 构建成一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像

  首先说说dockerfile的命令,请看图

FROM 		# 基础镜像,一切从这里开始,相当于指定了镜像的系统,例如 centos, debian...
MAINTAINER	# 镜像的作者,一般是 姓名+邮箱,当然也可以不写
RUN			# 构建镜像时,需要运行的命令
ADD			# 从宿主机中拷贝压缩包,并自动解压
WORKDIR		# 镜像的工作目录
VOLUME 		# 	容器卷,挂载的目录
EXPOSE		# 指定对外的端口
CMD			# 控制台运行的命令,只有最后一个生效,可被替代
ENTRYPOINT	# 控制台运行的命令,可以追加命令
ONBUILD		# 触发指令,当构建一个被继承的dockerfile这个时候就会运行ONBUILD(了解)
COPY		# 拷贝文件
ENV			# 构建的时候设置环境变量

Dockerfile构建Docker镜像_第1张图片
  接下来就开始构建自己的镜像,比如说构建一个centos镜像,从dockerhub拉取的镜像是没有vim、lrasz的命令的,这些命令需要安装插件才可以执行,我就以这个构建一个我们自己的centos镜像

FROM centos
MAINTAINER test.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
RUN yum -y install lrzsz
EXPOSE 8899
CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash

  命令完成后执行这个dockerfile文件构建一个镜像,可以看到,在执行文件命令时是一步一步的执行的,如果执行成功会返回Successfully

docker build -f dockerfile -t centos-test .

Dockerfile构建Docker镜像_第2张图片
  然后查看我们自己构建的镜像,已经成功了,接下来就运行这个镜像
在这里插入图片描述
  运行构建的镜像,并测试安装的指令是否正确,可以看到我安装的指令能正常运行
Dockerfile构建Docker镜像_第3张图片
  上面只是一个很简单的镜像测试,接下来我就来做一个相对复杂的镜像,使用Tomcat来演示,构建Tomcat镜像

  编写dockerfile文件

FROM centos

WORKDIR /root

RUN yum install -y wget
# 这两个文件除了可以再执行时下载,还可以通过宿主机去拷贝,使用ADD命令
# 例如: ADD apache-tomcat-9.0.39.tar.gz /root
RUN wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.tar.gz
RUN wget https://download.oracle.com/otn/java/jdk/8u261-b12/a4634525489241b9a9e1aa73d9e118e6/jdk-8u261-linux-i586.tar.gz?AuthParam=1602506838_11f4bbe6966eed7651dbd332bfbbd7ad

RUN tar -zxvf apache-tomcat-9.0.39.tar.gz
RUN tar -zxvf jdk-8u261-linux-i586.tar.gz

RUN yum -y install vim

ENV JAVA_HOME /root/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /root/apache-tomcat-9.0.39
ENV CATALINA_BASH /root/apache-tomcat-9.0.39
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /root/apache-tomcat-9.0.39/bin/startup.sh

  构建镜像,如果文件名是dockerfile,在构建时可以不用指定文件名

docker build -t tomcat .

  镜像构建成功后,我们还可以将我们的镜像发布到DockerHub或者阿里云仓库中,首先是发布到DockerHub上

# 查看当前的镜像,tomcat是需要我们上传的镜像
[root@localhost tomcat]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              1.0                 541508d30bd8        27 minutes ago      674MB

# 给镜像添加标签,便签格式为:dockerhub注册名/镜像名:版本,注意,必须给镜像便签加上自己的dockerhub的账号,否则无法上传
[root@localhost tomcat]# docker tag tomcat:1.0 admin/tomcat:1.0
[root@localhost tomcat]# docker images 
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
admin/tomcat   		 1.0                 541508d30bd8        27 minutes ago      674MB
tomcat               1.0                 541508d30bd8        27 minutes ago      674MB

# 登录dockerhub账号
[root@localhost tomcat]# docker login -u admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

# 提交镜像,提交的镜像是带有账号便签的镜像
[root@localhost tomcat]# docker push admin/tomcat:1.0 
The push refers to repository [docker.io/18482133793/tomcat]
2be15e48fe72: Layer already exists 
fa54306e61a5: Layer already exists 
9d4a1ab7a827: Layer already exists 
4df6c8ed99ac: Layer already exists 
7738e55f97aa: Layer already exists 
eb29745b8228: Layer already exists 
1.0: digest: sha256:94ffc09537fa50557267670538c5963a70e9cc5238f5a66089958abc2cabab27 size: 1590

  发布到阿里云镜像,首先是创建命名空间
Dockerfile构建Docker镜像_第4张图片
  然后创建镜像仓库
Dockerfile构建Docker镜像_第5张图片
Dockerfile构建Docker镜像_第6张图片
  镜像仓库创建完成后,点击进入仓库内,可以看到阿里云官方已经给了详细的操作文档,我们只需要按照文档进行操作就可以了
Dockerfile构建Docker镜像_第7张图片

你可能感兴趣的:(docker,技术,docker)