Docker入门与应用系列(五)Dockerfile
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的更多相关文章
- Docker入门教程(三)Dockerfile
Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...
- Docker入门与应用系列(四)数据卷管理
一.介绍 Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(译者注:镜像栈顶部)添加一个读写层.如果运行中的容器修改了现有的一个已经存 ...
- Docker 入门教程(3)——Dockerfile
Dockerfile Dockerfile是一个文本文件,用来定制镜像. 镜像是分层存储的,前一层会是下一层的基础.而镜像的定制就是定制每一层镜像在上一层做了什么改变. Dockerfile其内包含一 ...
- Docker入门与应用系列(四)网络管理
一.Docker的五种网络模式 在使用docker run创建docker容器时,可以用--net选项指定容器的网络模式,Docker有以下5种网络模式: 1. bridge模式 使用docker r ...
- Docker入门与应用系列(三)容器管理
一.启动容器 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另一个是将终止状态的容器重新启动. 1.1 新建并启动 主要命令为 docker run 下面的命令输出一个”Hello,world ...
- Docker入门与应用系列(二)镜像管理
1.1 什么是镜像 简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统. 1.2 镜像从哪里来 Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容 ...
- Docker入门与应用系列(一)介绍和部署
Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...
- Docker入门与应用系列(六)Docker私有与公共镜像仓库
1.搭建私有镜像仓库 Docker Hub作为Docker默认官方公共镜像:如果想搭建自己的私有镜像仓库,官方提供registry镜像,使搭建私有仓库非常简单 1.1下载registry镜像并启动 d ...
- Docker入门与应用系列(七)Docker图形界面管理之DockerUI
1.dockeruiDockerrUI是一个基于Docker API提供图形化页面简单的容器管理系统,支持容器管理.镜像管理.1.1 下载镜像 docker pull abh1nav/dockerui ...
随机推荐
- fwrite和fread函数的用法小结(转)
fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出. #include <stdio.h> size_t fread(void * ...
- mac 查看目前哪些进程占用哪些端口
lsof -nP | grep TCP | grep LISTEN lsof -i :TCP
- C++14系列(1):Linux下C++14开发环境配置
g++安装 參考地址: http://sysads.co.uk/2014/07/install-gcc-gnu-4-9-1-on-ubuntu-14-04/ 当前Ubuntu的LTS版本号为14.04 ...
- PHP-php-fpm占用系统资源分析
1.别的先不管,先top看一下cpu.ram.swap哪个比较紧张. 由上图分析,可以看出共有602个进程,其中有601个进程休眠了.这好像有点不对劲,内核进程也就80个左右,加上memcached, ...
- mybatis学习知识
目录 1,目录 2,介绍 3,快速入门 4,配置XML 5,xml文件映射 6,动态sql 7,java api 8,Statement Builders 9,日志 1,介绍 1.1 介绍 1.1.1 ...
- Linux Load average负载详细解释
http://tianmaotalk.iteye.com/blog/1027970 Linux Load average负载详细解释 linux查看机器负载
- easyui datagrid动态设置行、列、单元格不允许编辑
Easyui datagrid 行编辑.列编辑.单元格编辑设置 功能: 动态对datagrid 进行行.列.单元格编辑进行设置不允许编辑. 禁用行编辑: 在编辑方法调用前,对选择的行进行判断,如果不允 ...
- 区别原生chrome 和以chrome为内核的360浏览器
function isChrome360() { if( navigator.userAgent.toLowerCase().indexOf('chrome') > -1 ) { var des ...
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- Linux上寻找并杀死僵尸进程
转载: http://blog.csdn.net/shanzhizi/article/details/47320595 linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进 ...