docker - [11] 数据卷之DockerFile
通过DockerFile可以生成一个镜像
一、DockerFile的介绍
狂神:
dockerfile是用来构建docker镜像的文件命令参数脚本。狂神:
dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件狂神:
Docker镜像逐渐成为企业交付的标准,必须要掌握!
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过 DockerFile 构建生成的镜像,最终发布和运行的产品。
DockerContainer:容器就是镜像运行起来提供服务的。
二、DockerFile的指令
| 指令 | 说明 |
| FROM | 设置镜像使用的基础镜像 |
| MAINTAINER | 设置镜像的作者 |
| RUN | 编译镜像时运行的脚本 |
| CMD | 设置容器的启动命令 |
| LABEL | 设置镜像的标签 |
| EXPOSE | 设置镜像暴露的端口 |
| ENV | 设置容器的环境变量 |
| ADD | 编译镜像时复制文件到镜像中 |
| COPY | 编译镜像时复制文件到镜像中 |
| ENTRYPOINT | 设置容器的入口程序 |
| VOLUME | 设置容器的挂载卷 |
| USER | 设置运行RUN CMD ENTRYPOINT的用户名 |
| WORKDIR | 设置RUN CMD ENTRYPOINT COPY ADD指令的工作目录 |
| ARG | 设置编译镜像时加入的参数 |
| ONBUILD | 设置镜像的ONBUILD指令 |
| STOPSIGNAL | 设置容器的退出信号量 |
2.1、CMD和ENTRYPOINT的区别
CMD:指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
(1)编写dockerfile并构建镜像,之后启动镜像;

(2)直接运行镜像,会执行CMD处配置的命令。如果执行docker run 2b06f9641629 -l会报错。

(3)追加参数会报错:docker run 2b06f9641629 -l

ENTRYPOINT:指定这个容器启动的时候要运行的命令,可以追加命令
(1)编写dockerfile:dockerfile-entrypoint-test
FROM centos
ENTRYPOINT ["ls","-a"]
(2)构建镜像:docker build -f dockerfile-entrypoint-test -t entrypointtest .

(3)启动镜像:docker images | grep entrypoint

(4)追加参数:docker run a58b53c50da3 -l

三、DockerFile构建过程
3.1、docker file语法规范
1、每个保留关键字(指令)都必须是大写字母
2、执行从上到下顺序执行
3、
#表示注释4、每一个指令都会创建一个新的镜像层,并提交
示例:centos的dockerfile
FROM scratch
MAINTAINER The CentOS Project <cloud-ops@centos.org>
ADD c7-docker.tar.xz /
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="2016-03-04"
# Volumes for systemd
# VOLUME ["/run", "/tmp"]
# Environment for systemd
# ENV container=docker
# For systemd usage this changes to /usr/sbin/init
# Keeping it as /bin/bash for compatability with previous
CMD ["/bin/bash"]
3.2、docker file构建步骤
(1)编写一个dockerfile文件
(2)docker build构建成为一个镜像
(3)docker run运行镜像
(4)docker push发布镜像(DockerHub、阿里云镜像仓库)
(1)编写dockerfile文件:dockerfile1
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
(2)docker build构建成为一个镜像:harleycentos:1.0
docker build -f dockerfile1 -t harleycentos:1.0 .

mydockerfile-centos:dockerfile文件路径
mycentos:0.1镜像名
(3)docker run运行镜像:docker run -it harleycentos:1.0 bash

(4)可以使用docker inspect看到demo中的挂载属于匿名挂载

(5)docker push发布镜像
3.3、制作一个centos镜像
(1)编写dockerfile文件:mydockerfile
# 以哪个镜像作为基础
FROM centos
MAINTAINER harley<hhl686666@163.com>
# 设置环境变量MYPATH
ENV MYPATH /usr/local
# 设置工作目录(docker run -it运行镜像之后所在的目录)
WORKDIR $MYPATH
# 安装vim、net-tools
RUN yum -y install vim
RUN yum -y install net-tools
# 暴露80端口
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash
(2)构建镜像:docker build -f mydockerfile -t mycentos:0.1 .
— 要养成终身学习的习惯 —

浙公网安备 33010602011771号