Dockerfile是为快速构建docker image而设计的,当你使用dockerbuild 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行里面的指令构建出一个docker image。

Dockerfile 由一行行命令语句组成,并且支持以#开头的注释行。

指令是不区分大小写的,但是通常我们都大写。

指令

描述

格式

FROM

构建的新镜像基于那个镜像

FROM centos:6

MAINTAINER

镜像维护者信息

MAINTAINER syavingc

RUN

构建镜像运行的shell命令、

命令较长使可以使用\来换行

格式:RUN <command>或 RUN["executable", "param1", "param2"]

RUN yum install nginx

CMD

运行容器时执行的shell命令

解释:

CMD指定容器启动是执行的命令,每个Dockerfile只能有一条CMD命令,如果指定了多条,只有最后一条会被执行。如果你在启动容器的时候也指定的命令,那么会覆盖Dockerfile构建的镜像里面的CMD命令。

CMD ["-c", "start.sh"]

CMD ["/usr/sbin/sshd", "-D"]

CMD /usr/sbin.sshd -D

EXPOSE

生成容器运行的服务端口

EXPOSE 80 443

ENV

设置容器内环境变量

ENV MYSQL_ROOT_PASSWORD123456

ADD

拷贝文件或者目录到镜像,如果是URL或压缩包会自动下载或者自动解压

ADD <src>…<dest> 将指定的<src>复制到容器文件系统中的<dest>

ADD ["<src>",... "<dest>"]

ADD http.tar.gz /var/www/html

COPY

拷贝文件或目录到镜像

同上

VOLUME

指定容器挂载点到宿主机自动生成的目录或其他容器

VOLUME ["/usr/local/mysql"]

USER

指定运行容器时的用户名和UID,后续的RUN指令也会使用这里指定的用户。

USER syavingc

USER <user>[:<group>] or USER <uid>[:<GID>]

WORKDIR

为RUN、CMD、COPY、ADD设置工作目录

WORKDIR /data/

ENTRYPOINT

运行容器时执行的shell命令

ENTRYPOINT ["/bin/bash", "-c", "/start.sh"]

ENTRYPOINT /bin/bash -c '/start.sh'

HEALTHCHECK

健康检查

HEALTHCHECK --interval=5m --timeout=3s\

CMD curl -f http://localhost/ || exit 1

ARG

ARG指定了一个变量在docker build的时候使用,可以使用--build-arg <varname>=<value>来指定参数的值,不过如果构建的时候不指定就会报错

ARG<name>[=<default value>]

 RUN、CMD和ENTRYPOINT指令区别

1、RUN在building时运行,可以写多条

2、CMD和ENTRYPOINT在运行container时运行,只能写一条,如果写多条,最后一条生效。

3、CMD在RUN时可以被COMMAND覆盖,ENTRYPOINT不会被COMMAND覆盖,但可以指定-ENTRYPOINT覆盖

1.1 Build镜像命令

使用Dockerfile文件构建镜像

docker build [options] path|url|-
options:
-t --tag list    #镜像名称
-f --file string #指定Dockerfile文件位置
#实例
docker build .        #默认找当前目录以Dockerfile为命名的文件
docker build -t data/app -t /path/Dockerfile /path
docker build -t data/app - < Dockerfile
docker build -t data/app - < test.tar.gz
docker build -t data/app http://www.syaving.com/Dockerfile
docker build -t data/app http://www.syaving.com/test.tar.gz

基于SSH的dockerfile

FROM centos:
MAINTAINER syavingc

ENV ROOT_PASSWORD 

RUN yum install -y openssh-server
RUN echo $ROOT_PASSWORD |passwd --stdin root

RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

CMD ["/usr/sbin/sshd","-D"]

EXPOSE 

查看build完成后的镜像

root@linux-node3:/data# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 seconds ago      309MB
wordpress           v1                  4ba156b9e30d         minutes ago      405MB
centos                                 df3764b1d215         weeks ago         194MB

创建新的容器

root@linux-node3:/data# docker run -itd --name : ssh:v1
d8f2b5460f2b89f9281dd4276626ca7ac595668bd5a66e75cabc2bfb5eba3b63
root@linux-node3:/data# docker ps -l
CONTAINER ID        IMAGE               COMMAND               CREATED              STATUS              PORTS                  NAMES
d8f2b5460f2b        ->/tcp   ssh

现在可以通过IP+端口登陆docker新建的容器里面了

Docker入门与应用系列(五)Dockerfile的更多相关文章

  1. Docker入门教程(三)Dockerfile

    Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...

  2. Docker入门与应用系列(四)数据卷管理

    一.介绍 Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(译者注:镜像栈顶部)添加一个读写层.如果运行中的容器修改了现有的一个已经存 ...

  3. Docker 入门教程(3)——Dockerfile

    Dockerfile Dockerfile是一个文本文件,用来定制镜像. 镜像是分层存储的,前一层会是下一层的基础.而镜像的定制就是定制每一层镜像在上一层做了什么改变. Dockerfile其内包含一 ...

  4. Docker入门与应用系列(四)网络管理

    一.Docker的五种网络模式 在使用docker run创建docker容器时,可以用--net选项指定容器的网络模式,Docker有以下5种网络模式: 1. bridge模式 使用docker r ...

  5. Docker入门与应用系列(三)容器管理

    一.启动容器 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另一个是将终止状态的容器重新启动. 1.1 新建并启动 主要命令为 docker run 下面的命令输出一个”Hello,world ...

  6. Docker入门与应用系列(二)镜像管理

    1.1 什么是镜像 简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统. 1.2 镜像从哪里来 Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容 ...

  7. Docker入门与应用系列(一)介绍和部署

    Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...

  8. Docker入门与应用系列(六)Docker私有与公共镜像仓库

    1.搭建私有镜像仓库 Docker Hub作为Docker默认官方公共镜像:如果想搭建自己的私有镜像仓库,官方提供registry镜像,使搭建私有仓库非常简单 1.1下载registry镜像并启动 d ...

  9. Docker入门与应用系列(七)Docker图形界面管理之DockerUI

    1.dockeruiDockerrUI是一个基于Docker API提供图形化页面简单的容器管理系统,支持容器管理.镜像管理.1.1 下载镜像 docker pull abh1nav/dockerui ...

随机推荐

  1. 折叠表格思路及遇到的问题(tableView:viewForHeaderInSection:的section从1开始,不是从0开始)

    项目需要做了一个类似qq联系人的折叠表格,思路很简单:设置每个section的header,在header上显示组名等信息,然后根据折叠与否,设置每个section中cell的数量,如果折叠,则将之设 ...

  2. mongod启动时候几个参数说明

    1.--storageEngine从3.0开始,新增了一个存储引擎WT.老版本的存储引擎被称作mmapv1 2.--oplogSizeOplog是复制的主要组成部分,位于local数据库中.在初始化复 ...

  3. php对二维数据进行排序

    PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义. 方法一:(经验证,成功)   作用:对二维数组进行指定key排序 参数:$arr ...

  4. Jumpserver web界面跳板机

    Jumpserver.org 普通用户 仪表盘 查看主机 上传下载 访问官网 欢迎使用Jumpserver开源跳板机系统 帮助 Log out 查看资产 仪表盘 资产管理 查看资产 主机详细信息列表 ...

  5. 在ubuntu上使用Virtual-Box安装Mininet

    使用Virtual-Box安装Mininet看上去简单,但其中也暗藏许多坑.我自己装了多次Mininet,但每次都有缺陷: mininet访问不了网络 用宿主机访问不了mininet虚拟机 最后,终于 ...

  6. atitit. it软件项目管理---自己的员工,雇佣军、援军,混合的员工 杂牌 人员管理架构

    atitit. it软件项目管理---自己的员工,雇佣军.援军,混合的员工 杂牌 人员管理架构 1. 企业的正规军,雇佣军,杂牌划分 1 1.1. 企业的员工基本是雇佣而来 1 1.2. 全职员工与兼 ...

  7. poj 1475 Pushing Boxes 推箱子(双bfs)

    题目链接:http://poj.org/problem?id=1475 一组测试数据: 7 3 ### .T. .S. #B# ... ... ... 结果: //解题思路:先判断盒子的四周是不是有空 ...

  8. 转-subl配置全栈开发环境

    为 Sublime Text 3 设置 Python 的全栈开发环境 Sublime Text 3 (ST3) 是一个轻量级的跨平台文字编辑器,尤以其轻快的速度,易用性和强大的社区支持而著称.它一经面 ...

  9. jquery实现页面的搜索功能

    $(function(){ $("input[type=button]").click(function(){ var txt=$("input[type=text]&q ...

  10. Qt 槽函数的使用

    今天在代码中遇到这样一个问题,自己感觉槽和函数都写的没错,但是就是不执行槽函数,因为是一个定时器的使用,即定时时间到了就执行槽函数. SeventhWizardPage::SeventhWizardP ...