一、什么是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