Dockerfile常用指令记录

Dockerfile常用指令

FROM

FROM centos:latest

MAINTAINER

指定维护者信息

MAINTAINER "changhf"<chang_hf@163.com>

COPY

复制本地主机的 (为Dockerfile所在目录的相对路径)到容器中的 。

当使用本地目录为源目录时,推荐使用 COPY 。

ADD

ADD jdk-8u91-linux-x64.tar.gz /opt

与 COPY 类似,格式为宿主机路径:容器路径从 build context 复制文件到镜像, 宿主机路径可以是Dockerfile所在目录的一个相对路径,第二个参数是容器的目标路径,必须是绝对路径。

RUN

RUN ln -s /opt/jdk1.8.0_91 /opt/jdk

当命令较长时可以使用 \ 来换行。
每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。经验告诉我们,多条命令可以使用 \ 来合并成一条,这样将减小所构建的镜像的体积,原因是在镜像中每执行一条命令都会产生一个中间镜像,我们需要尽可能的减少中间镜像。
另一种写法:

RUN["/bin/bash", "-c", "echo hello"] 

CMD

支持三种格式

CMD[“executable”,”param1”,”param2”] 使用 exec 执行,推荐方式;

CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;

CMD [“param1”,”param2”] 提供给 ENTRYPOINT 的默认参数;

CMD /opt/jdk/bin/java -version

每个Dockerfile最多只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器通过dcoker run命令,将会覆盖掉 CMD 指定的命令。
Dockerfile中还有一个与CMD指令功能类似的ENTRYPOINT指令,只是后者所执行的指令不能被docker run命令覆盖。

docker run -i -t changhf/centosWithJava /bin/bash //覆盖CMD中的命令 执行/bin/bash

ENV

指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。

ENV JAVA_HOME /opt/jdk1.8.0_91/java/bin

WORKDIR

设置进入容器时的工作目录。
可以使用多个 WORKDIR 指令,后面参数是相对路径,基于前面命令指定的路径。

WORKDIR /home
WORKDIR admin
RUN pwd
则最终路径为 /home/admin

EXPOSE

指定Docker容器暴露的端口号,用于端口映射。容器内部只需对外暴露相应的端口,并映射到宿主机的端口上,外界就能随时访问容器内部的应用程序。这也正式Docker的强项:使用容器技术封装应用程序,让外界无需关注应用程序的运行环境。

docker run -d -p 50000:5000 -v ~/docker-registry:/tmp/registry registry

-p表示对容器中应用程序暴露的端口进行端口映射,左边的50000为宿主机的端口,5000为容器内部需要暴露的端口。执行该命令表示启动一个Docker Registry,可以通过127.0.0.1:50000查看是否启动成功。

EXPOSE 80

VOLUME

格式为 VOLUME [“/data”] 。设置可被挂载的数据卷。
创建一个可以从挂载宿主机文件或目录到容器的挂载点,一般用来存放数据库和需要保持的数据等。

通过命令方式启动一个容器

docker run --name data -it -v /opt/data  --privileged=true docker.io/ubuntu /bin/bash

目录映射
-v后面的映射关系是宿主机路径:容器路径,可以理解为目录映射,这样就可以让所有的容器共享宿主机数据,从而只需要改变宿主机的数据源就能够影响到所有的容器数据。宿主机上的文件/目录是要提前存在的,容器里对应的文件/目录会自动创建。

数据卷权限:
–privileged=true用于开放权限,有时映射的容器路径无法访问,只需启动时加上该设置即可。
参考:Dockerfile 常用指令
数据卷的使用

猜你喜欢

转载自blog.csdn.net/chang_li/article/details/79679039