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