欢迎光临范阳布衣的运维博客
分享工作和学习中的知识、技术

docker-Dockerfile

Dockerfile指令

| 指令 | 说明 |
| :———— | :———— |
| FROM | 构建的容器是基于那个镜像;例:FROM centos:7 任何Dockerfile中的第一条指令必须为FROM指令|
| MAINTAINER | 镜像维护者信息 例:zhyr zhyr@zyrcc.cn 该信息将会写入生成镜像的Author属性域中。 |
| RUN | 构建镜像时运行的shell命令 例:RUN [“yum”,”install”,”nginx”] RUN yum install nginx |
| CMD | 运行容器时执行的shell命令 例:CMD [“./sbin/php-fpm”, “-c”, “/usr/local/php/etc/php-fpm.conf”] CMD [“/usr/bin/sshd”,”-D”] |
| EXPOSE | 声明容器运行的端口 例:EXPOSE 8080 |
| ENV | 设置容器内的环境变量 例:MYSQL_ROOT_PASSWORD 123456 JAVA_HOME /usr/local/jdk1.8.0_91 |
| ADD | 拷贝文件或目录到镜像,如果是URL或是压缩包会自动下载或解压 例:ADD ADD [“”,… “”] ADD https://xxx.com/html.tar.gz /var/www/html ADD html.tar.gz /var/www/html|
| COPY | 拷贝文件或目录到镜像,当使用本地目录为源目标时,推荐使用COPY 例:COPY ./start.sh /start.sh 源路径如果是一个目录,则该目录下的所有内容都将被加入到容器,但是该目录本身不会 |
| ENTRYPOINT | 运行容器时执行的shell命令 例:ENTRYPOINT /bin/bash -c ‘start.sh’ ENTRYPOINT [“/bin/sh”,”-c “,”/start.sh”] |
| VOLUME | 指定容器挂载点到宿主机自动生成的目录或其他容器 例:VOLUME [“/var/lib/mysql”] |
| USER | 为RUN,CMD和ENTRYPIONT执行命令指定运行用户 USER [:] or USER [] 例:USER inca|
| WORKDIR | 为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录 例:WORKDIR /data |
| HEALTHICHEC | 健康检查
HEALTHCHECK –interval=5m –timeout=3s –retries=3 \
CMD curl -f http://localhost/ || exit 1 –inerval=DURATION (默认为:30s):多久检查一次; –timeout=DURATION (默认为:30s):每次检查等待结果的超时时间; –retries=N    (默认为:3):如果失败了,重试几次才最终确定失败。 |
| ARG | 在构建镜像时指定一些参数 例: FROM centos:6 ARG user # ARG user=root USER $user # docker build –build-arg user=lizhenliang Dockerfile . |

CMD与ENTRYPOINT的语法

如果你使用第二个语法:CMD(或ENTRYPOINT)是一个数组,它执行的命令完全像你期望的那样。如果使用第一种语法,Docker会在你的命令前面加上/bin/sh –c
使用CMD和ENTRYPOINT时,请务必使用数组语法。

Dockerfile编写小结

  • 1.精简镜像用途:尽量让每个镜像的用途都比较集中、单一,避免构造大而复杂、多功能的镜像;
  • 2.选用合适的基础镜像:过大的基础镜像会造成构建出臃肿的镜像,一般推荐比较小巧的镜像作为基础镜像;
  • 3.提供详细的注释和维护者信息: Dockerfile也是一种代码,需要考虑方便后续扩展和他人使用;
  • 4.正确使用版本号:使用明确的具体数字信息的版本号信息,而非latest,可以避免无法确认具体版本号,统一环境;
  • 5.减少镜像层数:减少镜像层数建议尽量合并RUN指令,可以将多条RUN指令的内容通过&&连接;
  • 6.及时删除临时和缓存文件:这样可以避免构造的镜像过于臃肿,并且这些缓存文件并没有实际用途;
  • 7.提高生产速度:合理使用缓存、减少目录下的使用文件,使用.dockeringore文件等;
  • 8.调整合理的指令顺序:在开启缓存的情况下,内容不变的指令尽量放在前面,这样可以提高指令的复用性;
  • 9.减少外部源的干扰:如果确实要从外部引入数据,需要制定持久的地址,并带有版本信息,让他人可以重复使用而不出错。

Build镜像命令

命令参数

Usage :docker image build [OPTIONS] PATH | URL | -
Options:
-t, --tag list# 镜像名称
-f, --file string# 指定Dockerfile文件位置

命令应用

docker build .
docker build -t shykes/myapp .
docker build -t shykes/myapp -f /path/Dockerfile /path
未经允许不得转载:范阳布衣 » docker-Dockerfile