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 触发器中指定的.
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
构建docker镜像
1.创建Docker Hub账号 网址:https://hub.docker.com/ 注册. 登录 $ sudo docker login 2.用docker commit命令创建镜像 创建一个要进行修改的定制容器 $ sudo docker run -i -t ubuntu /bin/bash root@7dfcf4332617:/# 在容器中安装apache软件包 root@7dfcf4332617:/# apt-get -yqq update root@7dfcf4332617:/# apt-get -y install apache2 提交定制容器 $ sudo docker commit 7dfcf4332617 hiekay/apache2 检查新创建的镜像 $ sudo docker images hiekay/apache2 REPOSITORY TAG IMAGE ID CREATED SIZE hiekay/apache2 latest d36fa6c04e5b About a minute ago 205MB 提交另一个新的定制容器 $ sudo docker ...
- 下一篇
DataWorks V2.0 添加数据源典型问题场景
DataWorks添加数据源典型问题可分为连通性问题、参数问题、权限问题三类。 连通性问题 连通性问题主要体现为测试连通性失败。 问题现象:添加MySQL数据源时,网络类型选择为经典网络,点击测试连通性时失败报错:测试连接失败,测试数据源联通性失败,连接数据库失败,数据库连接串…异常消息:Communications link failure. The last packet sent successfully to the server was 0 milliseconds ago.The dirver has not received any packets from the server.解决方案:出现上述报错通常都是网络连通性问题导致。可检查您的网络是否可达,以及防火墙对这个IP/端口是否有相关限制,安全组是否已配置对IP/端口
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路