认识dockerfile

 

 dockerfile结构大致分为四部

  1、基础镜像信息

  2、维护者信息

  3、镜像操作指令

  4、镜像启动时执行的命令

 

一、dockerfile常用命令

 

1、FROM:指明构建容器的基础镜像

FROM centos:7   

 

2、MAINTAINER:指明镜像的维护者(创建者)

MAINTAINER fengzhilaoling 邮箱地址

  也可以使用LABEL指定作者

LABEL maintainer="fengzhilaoling"

 

3、RUN:构建镜像是运行的shell命令

RUN yum -y install httpd

 

4、CMD:启动容器时执行的命令

CMD ["/usr/sbin/sshd",""-D]
CMD /usr/sbin/sshd -D

 

5、EXPOSE:声明容器运行的服务端口

EXPOSE 80 443

 

6、EVN:设置环境内环境变量

ENV JAVA_HOME /usr/local/jdk1.8

 

7、ADD:拷贝文件或目录到镜像中

ADD /opt/index.html /var/www/html

 

8、COPY:拷贝文件或目录到镜像中,用法与ADD相同,但不支持自动下载和解压

COPY ./start.sh /start.sh

 

9、ENTRYPOINT:启动容器时执行的shell命令,同CMD类似,不会这些命令行被docker run 指定的命令行所覆盖,而且,这些命令行参数会被当做参数传递给ENTRYPOINT指定指定指定的程序

ENTRYPOINT /bin/bash -C '/start.sh'
ENTRYPOINT ["/bin/bash","-C","/start.sh"]

注意:dockerfile中可以存在多个ENTRYPOINT指令,但仅有最后一个会生效

 

10、VOLUME:指定目录容器挂载点到宿主机自动生成的目录或其他容器

VOLUME ["var/lib/mysql"]

注意:一般不会在dockerfile中用到,更常见的时在docker run -v的时候指定数据卷

 

11、user:为RUN、CMD、ENTRUPOINT执行shell命令指定运行用户

USER root

 

12、WORKDIR:为RUN、CMD、COPY、AND设置工作目录

WORKDIR /data

 

13、HEALTHCHECK:告诉docker如何测试容器以检查它是否仍在工作

HEALTHCHECK --interval=5m --timeout=3s --retries=3 CMD curl -f http://localhost/ || exit 1

--interval=5m :每个多长时间探测一次,默认30s
--timeout=3s:服务响应超时时长,默认30s
--start-period=3s:服务启动多久后开始探测,默认0秒
--retries=3:认为检测失败几次为宕机,默认3次

一些返回值说明:
0:容器成功是健康的,随时可以使用
1:不健康的容器无法正常工作
2:保留不使用此退出代码

 

14、ARG:构建镜像时,指定一些参数

FROM centos:7
ARG user
USER $user

    在使用docker build时可以带上自定义参数user了
docker build --build-arg user=root Dockerfile

 

 二、dockerfile案例

  

 mkdir soft
#上传所需要的安装包
 cd soft
ls
apache-tomcat-8.5.51.tar.gz
OpenJDK8U-jdk_x64_linux_openj9_8u242b08_openj9-0.18.1.tar.gz
#编写Dockerfile文件
vim Dockerfile

FROM centos:latest  #指定基础镜像
MAINTAINER fengzhilaoling  #作者

USER root  #命令执行用户

ADD OpenJDK8U-jdk_x64_linux_openj9_8u242b08_openj9-0.18.1.tar.gz /usr/local/ #从宿主机拷贝安装包到容器
ADD apache-tomcat-8.5.51.tar.gz /usr/local #从宿主机拷贝安装包到容器

WORKDIR /usr/local #切换工作目录
RUN mv apache-tomcat* tomcat8 #将Tomcat的目录更改名称

ENV JAVA_HOME=/usr/local/jdk8u242-b08  PATH=$PATH:JAVA_HOME/bin  #设置JAVA_HOME的环境变量
ADD tomcat_start.sh ./  #将脚本拷贝到当前工作目录 也就是WORKDIR /usr/local 切换到的目录
RUN chmod +x ./tomcat_start.sh  #给脚本加执行权限
EXPOSE 8080  #设置服务的端口

ENTRYPOINT /usr/local/tomcat_start.sh  #启动服务脚本


#编写Tomcat启动脚本
tomcat_start.sh 

#!/bin/bash

/usr/local/tomcat8/bin/startup.sh

#在当前目录下执行docker build
docker build -t="tomcat:v1.2" . 

-t:指定创建镜像的名称
.:表示使用当前目录下的Dockerfile 进行镜像创建

#创建完成查看
docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              v1.0                ef3e559278fa        49 minutes ago      500MB
tomcat              v1.2                ef3e559278fa        49 minutes ago      500MB
nginx               latest              6678c7c2e56c        7 days ago          127MB
centos              latest              470671670cac        7 weeks ago         237MB

  

 

posted @ 2020-03-12 12:56  风之老凌  阅读(164)  评论(0)    收藏  举报