Dockerfile

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  证明已经复制进去了
上一篇:Ascend Pytorch算子功能验证


下一篇:R安装程序包:ERROR: failed to lock directory ‘/usr/lib64/R/library’ for modifying