美文网首页
使用 Dockerfile 定制镜像

使用 Dockerfile 定制镜像

作者: 沧海一粟谦 | 来源:发表于2018-05-20 23:40 被阅读11次
    Pride & Prejudice

    Dockerfile 简介

    镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。

    Dcokerfile是一个文本文件,由一系列指令和参数构建的脚本,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 Dockerfile,当我们需要定制自己额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成 image 即可,省去了敲命令的麻烦。

    Dockerfile 文件格式

    Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动执行指令。

    # This dockerfile uses the ubuntu image
    # VERSION 2 - EDITION 1
    # Author: docker_user
    # Command format: Instruction [arguments / command] ..
     
    # 1、第一行必须指定 基础镜像信息
    FROM ubuntu
     
    # 2、维护者信息
    MAINTAINER docker_user docker_user@email.com
     
    # 3、镜像操作指令
    RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
    RUN apt-get update && apt-get install -y nginx
    RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
     
    # 4、容器启动执行指令
    CMD /usr/sbin/nginx
    

    RUN 指令:每执行一条RUN 指令,镜像添加新的一层,并提交
    CMD 指令:来指明运行容器时的操作命令

    可以使用一个 RUN 指令,并使用 && 将各个所需命令串联起来。Dockerfile 支持 Shell 类的行尾添加 \ 的命令换行方式,以及行首 # 进行注释的格式。

    构建镜像

    以nginx 镜像为例。在一个空白目录中,建立一个文本文件,并命名为 Dockerfile

    $ mkdir mynginx
    $ cd mynginx
    $ touch Dockerfile
    

    Dockerfile 文件内容为:

    FROM nginx
    RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
    

    在 Dockerfile 文件所在目录执行:(注意命令最后有一个 . 表示当前目录)

    docker build -t nginx:v1 .
    

    构建完成之后,使用 docker images 命令查看所有镜像

    [root@localhost mynginx]# docker images
    REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
    nginx                   v1                  2b06b1493d7c        24 seconds ago      109 MB
    docker.io/nginx         latest              ae513a47849c        2 weeks ago         109 MB
    docker.io/ubuntu        latest              452a96d81c30        3 weeks ago         79.6 MB
    docker.io/hello-world   latest              e38bc07ac18e        5 weeks ago         1.85 kB
    

    使用 docker run 命令来启动容器

    docker run  --name nginx_v1   -d -p 81:80 nginx:v1
    

    这条命令表示用 nginx:v1 镜像启动一个容器,命名为nginx_v1,并且映射了 81 端口,这样我们可以用浏览器去访问这个 nginx 服务器


    容器启动后,需要对容器内的文件进行进一步的完善,可以使用docker exec -it xx bash命令再次进行修改

    [root@localhost mynginx]# docker exec -it nginx_v1   bash
    root@4277f160cd56:/# echo '<h1>Hello, admin!</h1>' > /usr/share/nginx/html/index.html
    root@4277f160cd56:/# exit
    

    修改了容器的文件,也就是改动了容器的存储层,可以通过 docker diff 命令看到具体的改动

    docker diff nginx_v1 
    

    其他docker镜像构建用法

    docker build 还支持从 URL 构建,比如可以直接从 Git repo 中构建:

    docker build https://github.com/twang2218/gitlab-ce-zh.git#:8.14
    

    这行命令指定了构建所需的 Git repo,并且指定默认的 master 分支,构建目录为 /8.14/,然后 Docker 就会自己去 git clone 这个项目、切换到指定分支、并进入到指定目录后开始构建。

    用给定的 tar 压缩包构建

    $ docker build http://server/context.tar.gz
    

    参考
    Dockerfile reference
    Docker镜像构建文件Dockerfile及相关命令介绍
    使用 Dockerfile 定制镜像
    深入Dockerfile(一): 语法指南

    相关文章

      网友评论

          本文标题:使用 Dockerfile 定制镜像

          本文链接:https://www.haomeiwen.com/subject/dccxjftx.html