文档章节

Docker学习(二)Dockerfile指令

MinghanSui
 MinghanSui
发布于 2017/06/28 14:47
字数 1111
阅读 6
收藏 0

前言:

     Dockerfiles是由一系列命令和参数构成的脚本文件,这些命令最终会创建一个新的镜像。

     Dockerfile的指令不区分大小写,但是貌似推荐都是大写,注释用#号开头,一行只支持一条指令。

     Docker程序将这些Dockerfile的指令翻译成Linux命令来执行。

 

基本命令:

     FROM deta/ubuntu_java:16.04_8_111

     FROM ubuntu

     FROM(用来指定基础镜像image),如果本地仓库没有镜像,会到官方仓库中寻找。

     FROM命令必须是Dockerfile的首个命令。

     如果不写tag,默认指定最后修改的版本。

 

     MAINTAINER MinghanSui

     用于描述制作者相关信息,写入到镜像中,可以用docker inspect查看相关信息。

     这个命令用于声明作者,并应该放在FROM的后面。

 

     RUN

     shell格式:RUN chmod 775 /usr/local/apache-tomcat-8.0.36/bin/catalina.sh

     shell格式:RUN apt-get install vim -y

     exec格式:RUN ["apt-get","install","vim","-y"]

     exec格式:RUN ["/bin/bash","-c","apt-get install vim -y"]

     RUN接收命令作为参数并用于创建镜像。不用于CMD命令,RUN命令用于创建镜像。

     exec格式的命令不会触发shell,所以导致 $HOME 这样的环境变量无法生效。

     但exec格式命令可以在没有bash的镜像环境中执行。

 

     ADD apache-tomcat-8.0.36.tar.gz /usr/local/

     ADD命令有两个参数,源(必须是Dockerfile相对路径)和目标(必须是容器绝对路径)。

     它的作用是从源系统中复制文件到目标容器中。

     如果目标路径不存在的话会自动联级创建。如果源是一个URL,URL的内容将被下载并复制到容器中。

    并且压缩包会自动解压。建议只有在复制tar文件的时候使用ADD。

 

     COPY conf/catalina.sh /usr/local/apache-tomcat-8.0.36/bin/

     COPY 和 ADD 功能相似,但少了远程URL、自动解压这两个功能。

     但是建议尽量使用COPY,并使用RUN和COPY的组合来替代ADD指令,因为它处理比 ADD 透明。 

 

     CMD

     shell格式: CMD echo "Hello Docker"

     exec格式: CMD ["echo Hello Docker]

     exec格式: CMD ["xxxxxxx.sh"]

     CMD在镜像构建了容器之后,容器启动时执行的命令。但一个Dockerfile只执行最后一条CMD命令。

     但是当 docker run command 与 CMD command 同时存在时,CMD command不生效。

     它与 ENTRYPOINT 的功能非常相似,区别就是如果 docker run 后面出现了与 CMD 相同命令,

     CMD会被覆盖,而 ENTRYPOINT 不会覆盖,而是追加。

     当出现exec格式的 ENTRYPOINT 指令时, CMD 指令只能被当做 ENTRYPOINT 指令的参数使用,

     其他情况则会被覆盖。

 

     ENTRYPOINT

     ENTRYPOINT echo "Hello Docker"

     ENTRYPOINT ["echo", "Hello Docker"]

     ENTRYPOINT echo

     CMD "Hello Docker"

     ENTRYPOINT是在镜像构建了容器之后,容器启动时执行的命令。

     但一个Dockerfile只执行最后一条ENTRYPOINT命令。

     exec格式:docker run的参数,会追加到 ENTRYPOINT 后面,并覆盖CMD的参数。

     但是可以在docker run时使用 -entrypoint 来无效 ENTRYPOINT 指令。

     shell格式 :ENTRYPOINT会触发shell,忽略docker run和CMD的参数。

     我们一般使用 ENTRYPOINT 来设置不会经常变化的命令,然后用CMD来设置可能改变的命令。

     如果 ENTRYPOINT 和 CMD 结合使用,可以从 CMD 命令中移除“applicatione”只保留参数,

     参数将自动传递给 ENTRYPOINT 命令执行。

     当出现exec格式的 ENTRYPOINT 指令时 CMD 指令只可能被当做 ENTRYPOINT 指令的参数使用,

     其他情况则会被覆盖。

 

     ENV LANG en_US.UTF-8

     此命令用于以 key value 的形式设置环境变量,并且在容器中可以被脚本和程序调用。

     此机制为在容器中运行的应用带来了很大的便利。

 

     VOLUME ["/my_folder"]

     此命令可以让你的容器访问宿主机上的目录,也就是将本地文件夹挂载到容器中,

     可用来让其它容器共享数据、备份、迁移等功能。

 

     WORKDIR /usr/local/apache-tomcat-8.0.36/webapps/intelligent_decision

     此命令用于切换运行目录,类似cd,对RUN、CMD、ENTRYPOINT命令生效。

 

     EXPOSE 8080 9090

     用来指定开放端口,使容器内的应用可以通过此开放的端口和外界交互。

    (端口是用于多个容器直接通信用的)。

     如果想在宿主机访问要在启动容器的时候做端口映射步骤(-p)。

 

     USER root

     此命令用于指定UID、用户。

     

© 著作权归作者所有

MinghanSui
粉丝 2
博文 50
码字总数 15360
作品 0
沈阳
程序员
私信 提问
IntelliJ IDEA快速实现Docker镜像部署

一、Docker开启远程访问 二、IntelliJ IDEA安装Docker插件 三、启用Docker 四、Spring Boot服务docker部署 1、新建一个Spring Boot工程,在工程里写一个REST接口,如下,简单返回一个字符串。...

吴伟祥
2018/11/09
4.5K
2
使用 Dockerfile定制Java Web镜像

一、前言 对使用 Docker 搭建 Java Web 运行环境(利用 commit 理解镜像构成 来源:黄勇 )博文的归纳: 1、启动容器: docker run <相关参数> <镜像 ID> <初始命令> -i:表示以“交互模式”运...

吴伟祥
2018/11/16
826
0
每天5分钟玩转Docker容器技术(四)

每天5分钟玩转Docker容器技术(一) 每天5分钟玩转Docker容器技术(二) 每天5分钟玩转Docker容器技术(三) 镜像的缓存特性 Docker 会缓存已有镜像的镜像层,构建新镜像时,如果某镜像层已经...

阿里云云栖社区
2018/01/04
0
0
Docker学习与和应用(二)_使用Docker

在前一篇文章 Docker学习与和应用(一)_初步认识中,我们初步介绍了Docker解决了什么问题,Docker容器化技术与传统的虚拟化方式的区别,以及简要介绍了Docker的几大核心概念:镜像、容器和仓库...

dhb_oschina
2016/06/19
101
0
Docker 学习笔记2. 容器使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/xundh/article/details/91948373 Docker 学习笔记2. 容器使用 一、 ...

谢厂节
06/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部