Dockerfile指令
指令 | 含义 |
---|---|
FROM镜像 | 指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令 |
MAINTAINER名字 | 说明新镜像的维护人信息 |
RUN命令 | 在所基于的镜像上执行命令,并提交到新的镜像中 |
CMD[“要运行的程序”,“参数1”,“参数2”] | 指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行 |
EXPOSE端口号 | 指定新镜像加载到Docker时要开启的端口 |
ENV环境变量 | 变量值 设置一个环境变量的值,会被后面的RUN使用 |
ADD 源文件/目录 目标文件/目录 | 将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL |
COPY 源文件/目录 目标文件/目录 | 将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中 |
VOLUME [ “目录”] | 在容器中创建一个挂载点 |
USER用户/UID | 指定运行容器时的用户 |
WORKDIR路径 | 为后续的RUN、CMD、ENTRYPOINT指定工作目录 |
ONBUILD命令 | 指定所生成的镜像作为一个基础镜像时所要运行命令 |
HEALTHCHECK | 健康检查 |
制作一个cp命令的工具镜像
mkdir cp
cd cp/
mkdir bin lib64
cp /usr/bin/cp /cp/bin/
把cp命令的依赖库复制到lib64
[root@docker cp]# cp `ldd /usr/bin/cp |grep -P '/lib64/.*so.\d+' -o` lib64/
[root@docker cp]# ls
bin lib64
[root@docker cp]# cd lib64/
[root@docker lib64]# ls
ld-linux-x86-64.so.2 libacl.so.1 libattr.so.1 libc.so.6 libdl.so.2 libpcre.so.1 libpthread.so.0 libselinux.so.1
[root@docker lib64]#
我们为了验证后面的结果再拷贝一个命令cat
[root@docker cp]# cp /usr/bin/cat /cp/bin/
root@docker cp]# ldd /usr/bin/cat
linux-vdso.so.1 => (0x00007ffcb57fa000)
libc.so.6 => /lib64/libc.so.6 (0x00007f56c758a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f56c7957000)
依赖库和cp命令重复就不需要再复制了
- 写Dockerfile
FROM scratch #选择一个空镜像
ENV PATH=/bin #设置环境变量 执行命令方便
COPY . / #把当前目录文件全部复制到容器的根下
ONBUILD COPY w.war / #以这个镜像为母镜像的时候执行这条命令
- 制作镜像
[root@docker cp]# docker build -t mycp .
Sending build context to Docker daemon 3.312MB
Step 1/4 : FROM scratch
--->
Step 2/4 : ENV PATH=/bin
---> Running in 4947aa88e142
Removing intermediate container 4947aa88e142
---> 75d6089666be
Step 3/4 : COPY . /
---> 0f1f0c12b606
Step 4/4 : ONBUILD COPY w.war /
---> Running in 5abc6d10eb3a
Removing intermediate container 5abc6d10eb3a
---> 4bca6379ca0d
Successfully built 4bca6379ca0d
Successfully tagged mycp:latest
镜像制作完成!!!
应用CP镜像
你要把app复制到容器里面运行 这里就用到了母镜像的ONBUILD指令,app的包名一样 只需要写以一个dockerfile一致用就行!!!
- Dockerfile
[root@docker /]# mkdir app1
[root@docker /]# cd app1/
root@docker app1]# vim Dockerfile
FROM mycat 这里引用的母镜像里面会有ONBUILD COPY w.war / 这就就会执行
[root@docker app1]# echo "123 " > w.war 首歌制作一个文件 做测试
[root@docker app1]# ls
Dockerfile w.war
[root@docker app1]# docker build -t app1 .
Sending build context to Docker daemon 3.072kB
Step 1/1 : FROM mycp
# Executing 1 build trigger
---> 41f7152825ff
Successfully built 41f7152825ff
Successfully tagged app1:latest
测试
[root@docker app1]# docker run -it --rm app1 cat /w.war
123
显示123 证明已经复制进去了