Docker 的Dockerfile指令

简介: Docker 的Dockerfile指令

Dockerfile指令

  • (1) CMD
    用于指定一个容器启动时要运行的命令.

类似RUN

  • 指定要运行的特定命令
sudo docker run -i -t hiekay/static_web /bin/true
  • 使用CMD
CMD ["/bin/true"]
  • 给CMD指令传递参数
CMD ["/bin/bash", "-l"]

将-l 标志传递给/bin/bash命令.
docker run 命令可以覆盖CMD命令

  • (2) ENTRYPOINT
    ENTRYPOINT 和CMD命令类似,但是不容易在启动的时候被覆盖.
ENTRYPOINT ["/usr/sbin/nginx"]

指定参数

ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;" ]
  • (3) WORKDIR
    WORKDIR指令用来在从镜像创建一个新容器时,在容器内部设置一个工作目录,ENTRYPOINT或者CMD指定的程序会在这个目录下执行.

如 使用WORKDIR命令

WORKDIR /opt/webapp/db
RUN bundle install
WORKDIR /opt/webapp
ENTRYPOINT ["rackup"]

我们将目录切换为/opt/webapp/db 后运行bundle install , 之后将目录切换为/opt/webapp,最后设置ENTRYPOINT指令来启动rackup命令.

可以通过-w标志在运行时候覆盖工作目录

  • 覆盖工作目录
sudo docker run -ti -w /var/log ubuntu pwd

该命令会将容器内的工作目录设置为/var/log .

  • (4) ENV
    ENV指令用来在镜像构建过程中设置环境变量.
  • 在Dockerfile文件中设置环境变量
ENV RVM_PATH /home/rvm/
  • 为RUN指令设置前缀
 RUN gem install unicorn 
  • 添加ENV 前缀后执行
RVM_PATH=/home/rvm/ gem install unicorn
  • 在其他Dockerfile指令中使用环境变量
ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR

在这里我们设定了一个新的环境变量TARGET_DIR, 并在WORKDIR中使用了它的值,因此实际上WORKDIR指令的值会被设置为/opt/app

  • (5) USER
    USER 指令用来指定该镜像会以什么用户去运行.
USER nginx 
  • 指定USER和GROUP的各种组合
USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group

也可以在docker run 命令通过-u选项覆盖该指令的值.

  • (6) VOLUME
    VOLUME指令用来向基于镜像创建的容器添加卷.

    • 使用VOLUME指令
VOLUME ["/opt/project"]

这个指令会为基于此镜像创建的任何容器创建一个名为 /opt/project 的挂载点.

  • 使用VOLUME指令指定多个卷
VOLUME ["/opt/project", "/data" ]
  • (7)ADD
    ADD指令用来将构建环境下的文件和目录复制到镜像中.

如:

ADD software.lic /opt/application/software.lic

解析:ADD指令将会将构建目录下的software.lic文件复制到镜像中的/opt/application/software.lic

  • 在ADD指令中使用URL作为文件源
ADD http://wordpress.org/latest.zip /root/wordpress.zip
  • 将归档文件作为ADD指令中的源文件
ADD latest.tar.gz /var/www/wordpress

会自动解压到目录下.

  • (8)COPY
    COPY指令非常类似ADD 不同是COPY只关心在构建上下文中复制本地文件,而不会去做文件提取和解压.
  • 使用COPY指令
COPY conf.d /etc/apache2

将 本地 conf.d目录中的文件复制到/etc/apache2目录中.

  • (9) ONBUILD
    ONBUILD 指令能为镜像添加触发器.当一个镜像被用做其他镜像的基础镜像时,该镜像中的触发器将会被执行.
  • 添加ONBUILD指令
ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src && make
  • 通过docker inspect 命令查看镜像中的ONBUILD命令
sudo docker inspect ID
  • 新的ONBUILD镜像Dockerfile
#Version: 0.0.1
FROM ubuntu:18.04
MAINTAINER hiekay "hikay5230@gmail.com"
RUN apt-get update
RUN apt-get install -y apache2
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apche2
ONBUILD ADD . /var/www/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/apache2"]
CMD ["-D", "FOREGROUND"]
  • 构建apche2镜像
sudo docker build -t="hiekay/apache2" .

解析:在新构建的镜像中包含一条ONBUILD指令, 该指令将构建环境所在的目录下的内容全部添加到镜像中的/var/www/目录小.我们将这个Dockerfile 作为一个通用的Web应用程序的模板,可以基于这个模板来构建Web应用程序.

  • 构建webapp的Dockerfile
FROM hiekay/apache2
MAINTAINER hiekay "hikay5230@gmail.com"
ENV APPLICATION_NAME webapp
ENV ENVIRONMENT development
  • 构建webapp镜像
sudo docker build -t="hiekay/webapp" .

这个构建过程就会基于hiekay/apache2镜像,就会执行ADD指令. 因为ADD 指令就是在ONBUILD 触发器中指定的.

目录
相关文章
|
3月前
|
Cloud Native NoSQL Redis
云原生 Docker Dockerfile 构建应用
【1月更文挑战第9天】云原生 Docker Dockerfile 构建应用
|
3月前
|
Cloud Native Docker 容器
云原生 Docker Dockerfile 构建配置
【1月更文挑战第9天】云原生 Docker Dockerfile 构建配置
|
4月前
|
Linux 开发工具 Docker
Docker dockerfile 案例:centos 支持 vim
Docker dockerfile 案例:centos 支持 vim
52 0
|
3月前
|
分布式计算 Java Linux
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
Docker 是一套构建在 Linux 内核之上的高级工具,旨在帮助开发人员和运维人员更轻松地交付应用程序和依赖关系,实现跨系统和跨主机的部署。使用安全且轻量级的容器环境来实现这一目标。容器可以手动创建,也可以通过编写 Dockerfile 自动创建。开发人员和运维人员可以将应用程序及其依赖打包到容器中,实现应用程序的可移植性和环境一致性。
119 5
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
|
3月前
|
Java 持续交付 Docker
Docker 项目如何使用 Dockerfile 构建镜像?
Docker 简介:讲述 Docker 的起源、它是如何革新现代软件开发的,以及它为开发者和运维团队带来的好处。重点强调 Docker 的轻量级特性和它在提高应用部署、扩展和隔离方面的优势。
|
4月前
|
应用服务中间件 Linux nginx
Docker Compose 安装与使用(常用指令)
Docker Compose 安装与使用(常用指令)
229 0
|
1月前
|
Java 网络安全 开发者
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
43 0
|
3月前
|
运维 Ubuntu Docker
【Docker】Dockerfile 构建文件
【1月更文挑战第26天】【Docker】Dockerfile 构建文件
|
3月前
|
应用服务中间件 nginx Docker
docker系列:dockerfile及其用法解析
docker系列:dockerfile及其用法解析
80 0
|
3月前
|
缓存 Ubuntu JavaScript
Docker自定义镜像-构建镜像-Dockerfile语法
Docker自定义镜像-构建镜像-Dockerfile语法
45 0