标签:container docker dockerfile
1. 背景
Dockerfile是为快速构建docker image[镜像]而设计的,当你使用docker build 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大小写均可)的纯文本文件并执行里面的指令构建出一个docker image。这比SaltStack的配置管理要简单的多,不过还是要掌握一些简单的指令。
Dockerfile 由一行行命令语句组成,并且支持以#开头的注释行。指令是不区分大小写的,但是通常我们都大写。
2. Dockerfile内容结构
* 基础镜像信息
* 维护者信息
* 镜像操作指令
* 容器启动时执行指令
3. 常用指令
*. FROM 指定基础镜像
格式:FROM<image>或FROM<image>:<tag>
FROM是Dockerfile里的第一条指令(必须是),后面跟有效的镜像名(如果该镜像你的本地仓库没有则会从远程仓库Pull取)。然后后面的其它指令FROM的镜像中执行。
# Base image FROM centos
*. MAINTAINER 维护者信息
格式:MAINTAINER <name>
# Maintainer MAINTAINER lisea cnlisea@126.com
*. RUN 指定运行命令 [可以指定多条]
格式:RUN <command>或 RUN[“executable”, “param1”, “param2”]。
# Commands RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm RUN yum install nginx -y RUN echo "daemon off;" >> /etc/nginx/nginx.conf
*. EXPOSE 设置容器内部暴露的端口号
EXPOSE 80
*. CMD 指定容器启动是执行的命令,可被启动容器参数覆盖
格式:
CMD [“executable”,”param1″,”param2″] 使用exec 执行,推荐方式
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用
CMD [“param1″,”param2”] 提供给ENTRYPOINT的默认参数
CMD指定容器启动是执行的命令,每个Dockerfile只能有一条CMD命令,如果指定了多条,只有最后一条会被执行。
如果你在启动容器的时候也指定的命令,那么会覆盖Dockerfile构建的镜像里面的CMD命令。
CMD ["nginx"]
*. ENTRYPOINT 指定容器启动是执行的命令,不可被启动容器参数覆盖
格式:
ENTRYPOINT [“executable”, “param1″,”param2”]
ENTRYPOINT command param1 param2(shell中执行)
ENTRYPOINT ["nginx"]
*. ADD 添加文件至容器内部,如果文件是可识别的压缩包会自动解压
格式:
ADD <src>… <dest>
ADD [“<src>”,… “<dest>”]
ADD index.html /usr/share/nginx/html/index.html
*. USER 指定容器运行用户名和UID
格式: USER root
USER root
4. 实战
* 构件nginx镜像,基础镜像为centos, 容器内部暴露端口为80, 添加文件index.html主页文件至nginx html目录下.
创建index.html文件
[root@harbor nginx]# echo "http://lisea.blog.51cto.com" > index.html
编写 dockerfile 文件 vim dockerfile
# Nginx # 1.0.1 # Author lisea # Base image FROM centos # Maintainer MAINTAINER lisea cnlisea@126.com # Commands RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm RUN yum install nginx -y RUN echo "daemon off;" >> /etc/nginx/nginx.conf # Add files ADD index.html /usr/share/nginx/html/index.html EXPOSE 80 CMD ["nginx"]
构建镜像,名称为lisea/nginx tag为1.0.1
[root@harbor nginx]# docker build -t lisea/nginx:v1.0.1 .
查看本地镜像
[root@harbor nginx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE lisea/nginx v1.0.1 010fff3a1451 6 seconds ago 387.2 MB docker.io/centos latest 3bee3060bfc8 9 days ago 192.5 MB
5. 总结
以需求驱动技术,技术本身没有优略之分,只有业务之分。
本文出自 “sea” 博客,请务必保留此出处http://lisea.blog.51cto.com/5491873/1937013
标签:container docker dockerfile
原文地址:http://lisea.blog.51cto.com/5491873/1937013