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新建的容器里面了
最新文章
- matlab 将多个盒图放在一张图上
- cssSelector定位笔记1
- hdu 3579 Hello Kiki (中国剩余定理)
- iOS push与present Controller的区别
- 用简单直白的方式讲解A星寻路算法原理
- Kinect for Windows SDK开发初体验(一)环境配置
- javascript中,你真的会用console吗?
- laravel框架——表单验证
- Core Data 学习简单整理01
- Jimmy Choo_百度百科
- delphi如何获得当前操作系统语言环境
- 记得12306货运系统“抢购空”编写插件--chrome交互式插件的各个部分
- Python中exec的使用
- java核心技术卷一笔记(1)
- 【linux】 vsftpd自动
- Elasticsearch——起步
- Python WMI获取Windows系统信息
- OpenCV:直线拟合——cv::fitLine()详解
- 直方图与bin
- golang遇到的win下读取txt字符乱码的问题