docker(三)dockerfile

12 篇文章 0 订阅

dockerfile构建过程

  1. 编写一个dockerfile文件
  2. docker build 构建成为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub,阿里云镜像仓库!)

基础知识

  1. 每个保留关键字(指令)都是大写字母
  2. 执行的指令都是从上到下顺序执行
  3. #表示注释
  4. 每一个指令都是

image-20220418100129572

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

docker镜像逐渐成为企业交付的标准,必须要掌握

步骤:开发,部署,上线运维

dockerfile:构建文件,定义了一切的步骤,源代码

dockerImages:通过dockerfile构建生成的镜像,最终发布和运行的产品。

docker容器:容器就是镜像运行起来提供服务

dockerfile 的指令

FROM 		#基础镜像
Maintainer	#镜像的维护者,姓名+邮箱
RUN			#镜像构建的时候需要运行的命令
ADD			#步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR		#镜像的工作目录
VOLUME		#需要挂载的目录
EXPOSE		#指定暴露端口
CMD			#指定这个容器启动的时候需要运行的命令(多个CMD只有最后一个生效,可被替代)
ENTRYPOINT	#指定这个容器启动的时候需要运行的命令(可以追加执行的命令)
ONBUILD		#当构建一个被继承Dockerfile这个时候就会运行ONBUILD指令,触发指令
COPY		#类似ADD,将文件拷贝到镜像中
ENV			#构建的时候设置环境变量

image-20220418101025615

简单的dockerfile实验

先写dockerfile文件

vim dockerfile

FROM centos:centos7.9.2009				#从centos:centos7.9.2009 这个镜像开始	
MAINTAINER zhangyu<382108113@qq.com>	#镜像维护者	zhangyu<382108113@qq.com>
ENV MYPATH=/usr/local					#定义环境变量	 MYPATH=/usr/local	
WORKDIR $MYPATH							#指定工作目录为	$MYPATH		
RUN yum -y install vim net-tools		#构建镜像时执行	 yum -y install vim net-tools
EXPOSE 80								#暴露端口			80
CMD echo $MYPATH						#启动容器时执行命令	echo $MYPATH	
CMD echo "---end---"					#启动容器时执行命令	echo "---end---"		
CMD /bin/bash							#启动容器时执行命令	/bin/bash			

在通过docker build 构建镜像

docker build -f dockerfile -t zhangyu:1.0 .  		#docker build -f dockerfile文件	-t 指定镜像名称:tag	后面加上目录名称 "."

docker history

通过docker history可以回溯镜像的历史进程

docker history zhangyu:1.0 
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
8f8bc341af5a   23 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B
f1a7a8bb5fca   23 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B
02a932aaf6d3   23 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B
bedc6a7febcd   23 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B
fad4270f24e2   24 minutes ago   /bin/sh -c yum -y install vim net-tools         222MB
4736a85480a5   25 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B
7b18934ac163   25 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B
13799dac25f0   25 minutes ago   /bin/sh -c #(nop)  MAINTAINER zhangyu<382108…   0B
eeb6ee3f44bd   7 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>      7 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
<missing>      7 months ago     /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB

CMD 和 ENTRYPOUNT的区别

CMD			#指定这个容器启动的时候需要运行的命令(多个CMD只有最后一个生效,可被替代)
ENTRYPOINT	#指定这个容器启动的时候需要运行的命令(可以追加执行的命令)
CMD ["ls","-a"]			#构建的镜像后面添加任何参数都会把CMD参数完全覆盖,
ENTRYPOINT["ls","-a"]	#构建的镜像后面添加任何参数都是追加在ls -a 这个命令后面.

CMD测试

image-20220418114625470

ENTRYPOINT测试

image-20220418114934850

通过结果可以判断,通过entrypoint可以追加命令或者参数,而CMD则是有新的参数会直接覆盖原有参数

举例:tomcat镜像

  1. 准备镜像文件 tomcat压缩包,jdk的压缩包

    image-20220418142716898

  2. 编写dockerfile文件

    官方命名文件名为Dockerfile,目录下用此文件名可以不用加-f参数,直接可以指定调用

    [root@devops-1 tomcat_dockerfile]# cat Dockerfile
    FROM centos:centos7.9.2009
    MAINTAINER zhangyu<382108113@qq.com>
    COPY README.TXT /usr/local/README.TXT
    
    ADD apache-tomcat-9.0.62.tar.gz  /usr/local/
    ADD jdk-8u321-linux-x64.tar.gz /usr/local/
    
    RUN yum -y install vim net-tools
    
    ENV MYPATH=/usr/local/
    WORKDIR $MYPATH
    
    ENV JAVA_HOME=/usr/local/jdk1.8.0_321
    ENV CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME=/usr/local/apache-tomcat-9.0.62
    ENV CATALINA_BATH=/usr/local/apache-tomcat-9.0.62
    ENV PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    
    EXPOSE 8080
    
    CMD /usr/local/apache-tomcat-9.0.62/bin/startup.sh && tail -f /var/log/lastlog
    
    #docker build -t zhangyu .		#通过docker build 命令构建镜像
    
    [root@devops-1 tomcat_dockerfile]# docker images
    REPOSITORY   TAG              IMAGE ID       CREATED         SIZE
    zhangyu      latest           a4cdfaf729a7   4 minutes ago   807MB
    centos       centos7.9.2009   eeb6ee3f44bd   7 months ago    204MB
    
    #运行镜像
    [root@devops-1 tomcat_dockerfile]# docker run -d -P zhangyu			
    #查看镜像
    [root@devops-1 tomcat_dockerfile]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                         NAMES
    3f01a38a3d3a   zhangyu   "/bin/sh -c '/usr/lo…"   3 minutes ago   Up 3 minutes   0.0.0.0:49168->8080/tcp, :::49168->8080/tcp   cranky_kilby
    
    

    登录端口,服务正常启动

    image-20220418171856478

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值