美文网首页
使用 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(一): 语法指南

相关文章

  • Docker 定制镜像

    使用Dockerfile定制镜像 Dockerfile from指定镜像基础 在 Docker Hub 上有非常多...

  • 九、Dockerfile应用

    1、 通过dockefile定制企业镜像 dockerfile的基本使用方式 创建用于存放dockerfile的目...

  • 使用 Dockerfile 定制镜像

    Dockerfile 简介 镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建...

  • 使用 Dockerfile 定制镜像

    最近公司项目上线原因,一直加班。没有时间更新文章。隔壁部门需要我提供sdk的打包的支持,所以一直在学习docker...

  • Dockerfile文件指令

    docker使用Dockerfile来定制镜像,那么Dockerfile文件如何编写?以下就是一个简单的Docke...

  • docker常用操作命令

    Dockerfile镜像定制 vim Dockerfile 创建定制文件,写入具体配置内容 docker buil...

  • docker 笔记6

    Dockerfile 定制镜像 touch Dockerfile docker build -t myngin...

  • Docker入门-Dockerfile的使用

    使用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置、文件。我们可以把每一层修改、安装、构...

  • Docker Nginx的使用

    Docker Nginx的使用 使用dockerfile定制nginx镜像新建一个目录t-nginx sudo m...

  • 【实践】5.DOCKER之制作镜像

    1. 摘要 本文讲解使用 Dockerfile 定制镜像的方法,也介绍docker commit的使用方法。 2....

网友评论

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

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