Dockerfile

 

一、什么是Dockerfile

1、Dockerfile的用途

Dockerfile是用来构建镜像的,Dockerfile构建过程:
  • 1.从基础镜像运行一个容器
  • 2.执行一条指令,对容器作出修改
  • 3.执行类似docker commit的操作,提交一个新的镜像层
  • 4.再基于刚提交的镜像运行一个新容器
  • 5.执行Dockerfile中的下一跳指令,直至所有指令执行完毕.

2、运行构建

注意文件名字必须叫Dockerfile:
  • # docker build -t="syx/df_test2" .
  • -t="syx/df_test2" ,指定产生镜像的 镜像名:标签名
  • 每条RUN指令产生一个新都会创建一个新的镜像层并对镜像进行提交,可以启动中间产生的镜像,运行下一条指令进行调试!!!
  • 下次运行时不会重新创建该缓存镜像,可以指定参数(--no-cache)强制创建!

运行结束就能看到我们自己构建的镜像了

  • # docker images

3、执行镜像

  • # docker run -d -p 8080:80 --name static_web liangshengqi/static_web nginx -g "daemon off"
  • # docker run -d -P --name static_web liangshengqi/static_web nginx -g "daemon off"  将容器80端口对宿主机开放,并且绑定到主机的一个随机端口

4、查看镜像的 ONBUILD 指令

docker inspect imgId

二、Dockerfile的例子

1、例一

# vim Dockerfile
  • FROM ubuntu
  • MAINTAINER syx '783284481@qq.com'
  • RUN apt-get update && apt-get install -y nginx
  • EXPOSE 80

2、例二

# version: 0.0.1

FROM ubuntu: 14.04

MAINTAINER liangshengqi "liangshengqi@langchao.com"

RUN apt-get update

RUN apt-get install -y nginx

RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html

EXPOSE 80

三、Dockerfile的指令

1、 CMD

CMD ["/bin/bash","-l"]

docker run 命令可以覆盖 CMD指令。

2、 ENTRYPOINT

ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]

ENTRYPOINT指令指定的命令不会被docker run覆盖,docker run传递的参数会再次传递给ENTRYPOINT指定的命令。

这个命令会以前台的方式启动nginx守护进程,此时这个容器作为一个web服务器来运行。

组合 ENTRYPOINT 和 CMD 

ENTRYPOINT ["/usr/sbin/nginx"]

CMD ["-h"] 

这个例子中,

  • 如果启动容器时,在命令行中指定参数传递给nginx守护进程,如指定 -g "daemon off",nginx守护进程就以指定的参数方式运行(此处是以前台方式运行)
  • 如果启动容器时,在命令行中没有指定参数,就会使用默认的CMD指定的-h参数(显示nginx的帮助信息)

 其实,--entrypoint可以覆盖dockerfile中的ENTRYPOINT指令! 

3、WORKDIR 设置工作目录

  • WORKDIR /opt/webapp/db
  • RUN bundle install
  • WORKDIR /opt/webapp
  • ENTRYPOINT  ["backup"]

或者

  • docker run -it -w /var/log ubuntu pwd

4、ENV 设置环境变量

  • ENV TARGET_DIR  /opt/app
  • WORKDIR $TARGET_DIR

或者临时有效的设置

  • docker run  -it  -e "WEB_PORT=8080"  ubuntu env

5、USER 指定该镜像会以什么样的用户去运行

USER user

USER user:group

USER uid

USER uid:gid

6、ADD 和 COPY

ADD  复制文件和目录,如果需要解压,就解压

COPY 复制文件

  • COPY conf.d  /etc/apache2
  • ADD latest.tar.gz  /var/www/wordpress

7、ONBUILD

当一个镜像被其他镜像用作基础镜像时,会触发的动作

ONBUILD  ADD  .  /ap/src

ONBUILD RUN cd  /app/src && make

8、VOLUME 

 

原文地址:https://www.cnblogs.com/lexiaofei/p/7172210.html