一、Dockerfile自定义镜像:
Dockerfile 是一个文本文件,其内包含了一条条的**指令(Instruction);
二、Dockerfile创建:
1)在一个空白目录中,建立一个文本文件,并命名为 `Dockerfile`:
2)在Dockerfile文件内写指令;
三、构建镜像:
docker build [选项] <上下文路径/URL/->
1)Docker上下文构建:docker build -t MyImage .
//最后一个.点表示当前目录,用于指定上下文(Context);
上下文:该目录会打包发给docker服务器,docker文件内的操作只能是./当前文件形式,不能是../或者/等;
2)Git repo构建:docker build https://github.com/twang2218/gitlab-ce-zh.git#:8.14
3)tar压缩包构建:docker build http://server/context.tar.gz
三、Dockerfile指令:
1)FROM:指定基础镜像;
//scratch:FROM scratch;表示一个空白镜像;
2)RUN:
1)shell格式:RUN <命令>;
2)exec格式:RUN ["可执行文件", "参数1", "参数2"];
//Dockerfile中每一个指令都会建立一层,则需要把多行合并:
每句语句用/反斜杠结尾,第二局开始用&&符号开头;
3)COPY:复制;
COPY 源路径 目标路径
<源路径>:可以是多个,甚至可以是通配符;//COPY home* /mydir/
<目标路径>:
(1)容器内的绝对路径;
(2)工作目录的相对路径;//用WORKDIR指令设置工作路径;
//copy指令会把各种源数据保留;
4)ADD:
ADD指令和`COPY`的格式和性质基本一致。
但是在 `COPY` 基础上增加自动解压tar压缩包的功能。
5)ENV:环境变量;
1)ENV <key> <value>;
2)ENV <key1>=<value1> <key2>=<value2>…
使用变量:$key
6)EXPOSE:声明端口;
EXPOSE <端口1> [<端口2>...]
docker run -P:会自动随机映射EXPOSE的端口;
-p <宿主端口>:<容器端口>和EXPOSE不同:
-p是暴露端口给外界访问;
EXPOSE仅仅是声明容器打算使用什么端口,并不会自动在宿主进行端口映射。
7)VOLUME:指定数据卷
//数据卷的作用就是将一些动态的数据和本地文件/文件夹进行绑定,在读写时使用的是本地的文件/文件夹。
docker run -p 80:8080 -d -v /home/ROOT:/usr/local/tomcat/webapps/ROOT/ tomcat
docker run -v 绝对路径的文件夹:要挂载到的容器内的文件夹/ 镜像名
8)WORKDIR:
WORKDIR <工作目录路径>
//dockerfile中cd无效,需要指定工作目录;
9)CMD:
运行一个文件,并传入参数;
CMD ["catalina.sh", "run"]:运行catalina.sh文件并传入参数run;
10)ENTRYPOINT:
同cmd类似,但是cmd只能执行一次,entrypoint可以执行多次;
原文地址:https://www.cnblogs.com/Tractors/p/11337313.html