您的位置:首页 > 运维架构 > Docker

Docker--------Dockerfile实战

2017-06-15 13:05 661 查看
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. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息