DockerFile
-
From 指定基础镜像
-
RUN 执行命令
RUN echo ‘
Hello, Docker!
’ > /usr/share/nginx/html/index.html -
COPY 复制文件
COPY <源路径>... <目标路径>
COPY ["<源路径1>",... "<目标路径>"]
源路径:
COPY home?.txt /mydir/ 可以是通配符
COPY home* /mydir/
目标路径:
可以是容器内的绝对路径
也可以是当前工作目录的相对路径
ps:使用copy命令,源文件的各种元数据都会被保留
比如读、写、执行权限等。
- ADD 更高级的复制文件
尽可能的使用COPY,最适用ADD的场合就是需要自动解压缩的时候
如:ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
- CMD容器启动命令
* shell 格式: CMD <命令>
* exec 格式: CMD ["可执行文件", "参数1", "参数2"...]
* 参数列表格式: CMD ["参数1", "参数2"...] 。在指定了 ENTRYPOINT 指令后,
用 CMD 指定具体的参数。
容器就是进程,启动容器的时候,需要指定运行的程序以及参数。
CMD就是用于指定默认容器的主进程的启动命令的。
- ENTRYPOINT入口点
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序以及参数
应用运行前的准备工作,dockerFile中可以包含:
ENTRYPOINT ["docker-entrypoint.sh"]
此时便会运行这个sh里面的命令
-
ENV设置环境变量
设置环境变量
ENV VERSION =1.0 -
ARG构建参数
与ENV不同的是,ARG构建的是环境的环境变量
-
VOLUME定义匿名卷
VOLUME /data
这里的 /data 目录就会在运行时自动挂载为匿名卷,
任何向 /data 中写入的信息都不会记
录进容器存储层,从而保证了容器存储层的无状态化。
覆盖这个挂载设置。比如:
docker run -d -v mydata:/data xxxx
在这行命令中,就使用了 mydata 这个命名卷挂载到了 /data 这个位置,替代了
Dockerfile 中定义的匿名卷的挂载配置。
- EXPOSE 声明端口
要将 EXPOSE 和在运行时使用 -p <宿主端口>:<容器端口> 区分开来。
-p ,是映射宿主端口和容器端口,换句话说,
就是将容器的对应端口服务公开给外界访问,
而 EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动
-
WORKDIR 指定工作目录
果需要改变以后各层的工作目录的位置,那么应该使用 WORKDIR
格式为 WORKDIR <工作目录路径> 。