dockerfile常用指令:
FROM ##指定基础镜像
MAINTAINER ##设置镜像作者
COPY ##存在文件复制到另一个指定路径下
ADD ##用法与copy类似,
ADD html.tar /var/www ##解压
ADD http://ip/html.tar /var/www ##下载
ENA ##设置环境变量
ENA HOSTNAME server1.example.com
EXPOSE ##爆漏用户使用端口
VOLUME ##声明数据卷,通常指定应用数据挂载点
数据卷:
-
一般VOLUME指定挂载点,没有此路径就会新建路径。
-
在运行docker宿主机上,可以根据命令docker inspect 容器名的具体信息,可以查看封装容器,声明的数据卷,Source会存在此容器目录挂接到本地_data目录。
-
由于自动挂载的路径很长,不太方便记,也可以在运行的时候指定挂载路径
docker run -it --name vm3 -v /opt/data:/data test:v1 ##:前为物理机挂载目录,:后为docker挂载目录
WORKDIR ##为RUN CMD ENTRYPOINT ADD COPY指令设置镜像中当前工作目录,不存在就自动创建。类似与cd
RUN 在容器中运行命令并传建新的镜像层,常用于安装软件包
RUN yun install -y vim
CMD 与 ENTRYPOINT ##用于设置容器启动后需要运行的指令,但CMD会被docker run后面的命令行覆盖,但是ENTRYPOINT不会被忽略,一定会被执行。
##docker run 后面的参数可以传递给ENTRYPOINT当作参数,但是ENTRYPOINT只能指定一个,否则只有最后一个生效。
shell模式:
vim dockerfile ##新建镜像配置文件
From busybox
ENV name world
ENTRYPOINT echo "hello,$name"
docker build -t test:v2 . ##构建镜像
docker run --rm test:v2 ##运行容器
exec模式:
vim dockerfile ##新建镜像配置文件
From busybox
ENV name world
ENTRYPOINT ["/bin/echo","hello,$name"]
docker build -t test:v3 . ##构建镜像
docker run --rm test:v3 ##运行容器
注:这是由于shell格式底层会调用/bin/sh -C执行命令,可以解析变量。但是exec模式不会,所以只要指定/bin/sh -C指令解析命令。如下:
vim dockerfile ##新建镜像配置文件
From busybox
ENV name world
ENTRYPOINT ["/bin/sh","-c","echo hello,$name"]
docker build -t test:v4 . ##构建镜像
docker run --rm test:v4 ##运行容器
由于CMD命令前,如docker run后存在参数会被覆盖,所以
vim dockerfile ##新建镜像配置文件
From busybox
ENTRYPOINT ["/bin/echo","hello"]
CMD ["WORLD"]
docker build -t test:v6 . ##构建镜像
docker run --rm test:v6 ##运行容器
docker run --rm test:v6 westos ##运行容器,但加参数