编写Dockerfile

来源:互联网 发布:seo的意思 编辑:程序博客网 时间:2024/06/15 17:29

Dockerfile可以分为四个部分

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行的指令

制作nginx镜像举例:

[root@docker ~]# mkdir -p /opt/docker-files/nginx/[root@docker ~]# cd !$cd /opt/docker-files/nginx/[root@docker nginx]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre2-10.30.tar.gz[root@docker nginx]# wget http://nginx.org/download/nginx-1.12.1.tar.gz[root@docker nginx]# vim Dockerfile# This is my first Dockerfile# Version 1.0# Author: zhaot# base imagesFROM centos:7.2.1511# MAINTAINERMAINTAINER zhaot# COMMANDADD pcre2-10.30.tar.gz /usr/local/srcADD nginx-1.12.1.tar.gz /usr/local/srcRUN yum install -y gcc gcc-c++ make openssl-develRUN useradd -s /bin/nologin -M wwwWORKDIR /usr/local/src/nginx-1.12.1RUN ./configure --user=www --group=www --with-http_ssl_module --with-pcre=/usr/local/src/pcre2-10.30 && make && make installRUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.confENV PATH /usr/local/nginx/sbin:$PATHEXPOSE 80CMD ["nginx"][root@docker nginx]# docker build -t nginx-test:v1 .
  1. COPY和ADD的区别
 - COPY仅进行复制操作 - ADD如果是压缩文件,复制完之后自动解压;可ADD链接
  1. ENTRYPOINT和CMD的区别
 - ENTRYPOINTAn ENTRYPOINT allows you to configure a container that will run as an executable.用法:ENTRYPOINT ["/bin/echo"] 那么docker build出来的镜像以后的容器功能就像一个/bin/echo程序,那么我可以这样用它docker run -it entrypoint “this is a test”多条ENTRYPOINT只会执行最后一条ENTRYPOINT设为[“/bin/sh -c”]时候运行的情况[root@docker ~]# docker run -it entrypoint /bin/bash root@4c8549e7ce3e:/# ps PID TTY TIME CMD 1 ? 00:00:00  sh 19 ? 00:00:00  ps - CMDThe main purpose of a CMD is to provide defaults for an executing container.用法:CMD ["/bin/echo", "this is a echo test"] docker run之后会直接输出:this is a echo test,类似于开机启动但是如果docker run -it -d cmd /bin/bash,则会覆盖/bin/echo
  1. ONBUILD的用法
 - ONBUILDONBUILD ADD . /appONBUILD RUN chown -R nginx:nginx /app在当前Dockerfile不生效,在FROM此镜像的下个镜像中生效
  1. VOLUME的用法
 - VOLUMEVOLUME ["/var/lib/mysql"]将容器的/var/lib/mysql目录和宿主机进行映射,容器被删除,此目录不会消失