Dockerfile(构建自己的CentOS镜像和Tomcat镜像)并打包镜像发布上线
Dockerfile概述
- Dockerfile是用来构建Dokcer镜像的文件!命令参数脚本
- 构建步骤
- 编写一个
Dockerfile
文件 Docker build
构建成为一个镜像Docker run
运行镜像Docker push
发布镜像(DockerHub、阿里云镜像仓库)
- 很多官方镜像都是基础包,我们通常会自己搭建自己的镜像
Dockerfile构建过程
- 构建过程会有很多的
指令

Dockerfile
基础知识
- 每个保留关键字(指令)都必须是大写字母
- 指令是从上到下依次执行的
#
表示注释- 每一个指令都会创建提交一个新的镜像层,并提交!
Dockerfile
是面向开发的,我们以后要发布项目,做镜像,就需要编写Dockerfile
文件,这个文件十分简单!Docker
镜像逐渐成为企业交付的标准,必须要掌握!- 构建步骤,三步(
开发
,部署
,运维
):
Dockerfile
:构建文件,定义了一切的步骤,源代码Dockerimages
:通过Dockerfile
构建生成的镜像,就是最终发布和运行的产品Docker
容器:容器就是镜像运行起来提供服务的
Dockerfile指令说明

指令 | 说明 |
---|
FROM | 基础镜像,一切从这里开始构建 |
MAINTAINER | 镜像是谁写的,姓名+邮箱 |
RUN | 镜像构建的时候需要运行的命令 |
ADD | 步骤:如大家tomcat镜像,这个tomcat压缩包!(添加内容) |
WORKDIR | 指定镜像的工作目录 |
VOLUME | 挂载的目录位置 |
EXPOSE | 指定暴露端口 |
CMD | 指定这个容器启动要运行的命令,只有最后一个会生效,可被替代 |
ENTRYPOINT | 指定这个容器启动要运行的命令,可以追加命令 |
ONBUILD | 当构建一个被继承Dockerfile 这个时候就会运行ONBUILD 的指令,触发指令 |
COPY | 类似ADD,将我们文件拷贝到镜像中 |
ENV | 构建的时候设置环境变量 |
实战:构建自己的CentOS
Docker Hub
中99%
镜像都是从这个基础镜像过来的FROM scratch
,然后配置需要的软件和配置来进行构建的

mkdir dockerfire
[root@docker dockerfire]
FROM centos
MAINTAINER pakho<1064981253@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
[root@docker dockerfire]
Successfully built 391ea92c0b6c
Successfully tagged mycentos:0.1
docker run -it mycentos:0.1
[root@1af3e35224a6 local]
- 通过
Docker history
可以查看镜像构建历史
docker images
[root@docker dockerfire]
IMAGE CREATED CREATED BY SIZE COMMENT
391ea92c0b6c 8 minutes ago /bin/sh -c
a56b4745d241 8 minutes ago /bin/sh -c
cd5c8b221c1d 8 minutes ago /bin/sh -c
d96bd4a3dd37 8 minutes ago /bin/sh -c
6ca540fbb09a 8 minutes ago /bin/sh -c yum -y install net-tools 24.9MB
032bc69f6df0 8 minutes ago /bin/sh -c yum -y install vim 60.7MB
b6da798d1552 9 minutes ago /bin/sh -c
c13af64a7d3e 9 minutes ago /bin/sh -c
fff65a8bbee7 9 minutes ago /bin/sh -c
300e315adb2f 6 months ago /bin/sh -c
<missing> 6 months ago /bin/sh -c
<missing> 6 months ago /bin/sh -c
CMD和ENTRYPOINT的区别
[root@docker dockerfire]
FROM centos
CMD ["ls","-a"]
[root@docker dockerfire]
[root@docker dockerfire]
[root@docker dockerfire]
[root@docker dockerfire]
FROM centos
ENTRYPOINT ["ls","-a"]
[root@docker dockerfire]
[root@docker dockerfire]
[root@docker dockerfire]
Dokcerfile
中很多命令及其相似,我们需要了解他们的区别
实战:Dockerfile构建Tomcat镜像
[root@docker tomcat]
apache-tomcat-9.0.48.tar.gz jdk-8u291-linux-x64.tar.gz
- 编写
Dockerfile
文件
- 官方推荐命名
Dockerfile
,build
会自动寻找这个文件,就不需要 -f
指定文件了!
[root@docker tomcat]
[root@docker tomcat]
FROM centos
MAINTAINER pakho<1064981253@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u291-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.48.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_291
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.48
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.48
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.48/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.48/bin/logs/catalina.out
[root@docker tomcat]
[root@docker tomcat]
[root@docker tomcat]
[root@docker ~]

[root@docker test]# mkdir WEB-INF
[root@docker test]# vim WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
</web-app>
[root@docker test]# vim index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello,pakho</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("----my test web logs----");
%>
</body>
</html>
[root@docker tomcatlogs]# tailf catalina.out
- 测试完成,能够正常访问

发布镜像至DockerHub
[root@docker ~]
Password:
Login Succeeded
[root@docker ~]
[root@docker ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
pakho611/diytomcat 1.0 30a5aabdb38b 9 hours ago 646MB
docker push 注册用户名/镜像名/版本号
[root@docker ~]
1.0: digest: sha256:a6a41622f98e52eab9b56dd9bda8a62c4ebe49ddeeeb32b8dad17ec5839e19ef size: 1373

发布镜像至阿里云容器服务
- 登录阿里云
- 找到容器镜像服务
第一次
登录需要创建仓库- 根据官方提示进行登陆
[root@docker ~]
Login Succeeded
[root@docker ~]
[root@docker ~]
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/pakho/diytomcat]
bc32333b4176: Pushed
ecf186c3bcaa: Pushed
f4783a52c44c: Pushed
a089274b1442: Pushed
2653d992f4ef: Pushed
1.0: digest: sha256:a6a41622f98e52eab9b56dd9bda8a62c4ebe49ddeeeb32b8dad17ec5839e19ef size: 1373
