Docker基础之十一: 镜像操作(Dockerfile)

简介: Docker镜像(Dockerfile) https://docs.docker.com/engine/reference/builder/ Docker可以通过Dockerfile的指令来编译Image,Dockerfile的主要好处是可以通过极少的空间来动态构建一个镜像,但是对国内用户而言,

Docker镜像(Dockerfile)

对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。

https://docs.docker.com/engine/reference/builder/

Docker可以通过Dockerfile的指令来编译Image,Dockerfile的主要好处是可以通过极少的空间来动态构建一个镜像,但是对国内用户而言,通常是比较通过的,因为下载国外的资源都比较慢。

1 Dockerfile 参考手册

1.1 如何使用

建立了Dockerfile之后,进入到所在目录,然后执行docker build.

通过-f选项,可以指定 Dockerfile:

$ docker build -f /path/to/a/Dockerfile .
AI 代码解读

通过-t选项可以为镜像添加一个tag:

$ docker build -t shykes/myapp .
AI 代码解读

build过程中,会一条一条的执行语句,比如:

$ docker build -t svendowideit/ambassador .
Sending build context to Docker daemon 15.36 kB
Step 0 : FROM alpine:3.2
 ---> 31f630c65071
Step 1 : MAINTAINER SvenDowideit@home.org.au
 ---> Using cache
 ---> 2a1c91448f5f
Step 2 : RUN apk update &&      apk add socat &&        rm -r /var/cache/
 ---> Using cache
 ---> 21ed6e7fbb73
Step 3 : CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \& wait/' | sh
 ---> Using cache
 ---> 7ea8aef582cc
Successfully built 7ea8aef582cc
AI 代码解读

1.2 Dockerfile格式

# Comment
INSTRUCTION arguments
AI 代码解读

指令是不区分大小写的,不过一般都使用大写来区分指令和参数。Dockerfile的第一句指令,必须是'FROM',这个后面紧跟的是基础镜像名称。#可以用来注释。

1.3 环境变量替换指令

环境变量指令是ENV,这个类似于编程语言的变量,只能在Dockerfile中使用。例如:

FROM busybox
ENV foo /bar
WORKDIR ${foo}   # WORKDIR /bar
ADD . $foo       # ADD . /bar
COPY \$foo /quux # COPY $foo /quux
AI 代码解读

其中支持变量应用的指令包括:

ADD
COPY
ENV
EXPOSE
LABEL
USER
WORKDIR
VOLUME
STOPSIGNAL
ONBUILD
AI 代码解读

1.4 dockerignoe file

如果你的编译目录下有一些文件是不需要打包进Image的,你可以使用该文件进行过滤。重要涉及的指令是ADD和COPY。

1.5 FROM

FROM <image>
AI 代码解读

或者

FROM <image>:<tag>
AI 代码解读

或者

FROM <image>@<digest>
AI 代码解读

FROM指令指定了目标Image的基础镜像。tag是某个特定版本的镜像, digest是最新引入的一种ID,类似于唯一标示符。

1.6 MAINTAINER

MAINTAINER <name>
AI 代码解读

这个字段一目了然,就是设置作者。

1.7 RUN

RUN包含两种格式:

  • RUN (shell格式,这种命令运行在shell中 /bin/sh -c)
  • RUN ["executable", "arg1", "arg2"] (exec格式) RUN指令可以执行任何命令,并在当前image的顶层添加一个文件层,并提交到新的image中。由此我们可以看出,每一个RUN指令都会新加一层文件系统,虽然这个并不占多少空间,不过还是推荐尽可能多的减少指令。因此我们可以使用\来做换行处理。
    RUN /bin/bash -c 'source $HOME/.bashrc ;\
    echo $HOME'
    
    AI 代码解读
    不换行形式:
    RUN /bin/bash -c 'source $HOME/.bashrc ; echo $HOME'
    
    AI 代码解读
    exec模式:
    RUN apt-get dist-upgrade -y
    AI 代码解读
目录
打赏
0
2
2
1
105
分享
相关文章
docker环境安装kafka/Flink/clickhouse镜像
通过上述步骤和示例,您可以系统地了解如何使用Docker Compose安装和配置Kafka、Flink和ClickHouse,并进行基本的验证操作。希望这些内容对您的学习和工作有所帮助。
131 28
Docker Image即Docker镜像
Docker 镜像是 Docker 容器的基础,包含了运行应用程序所需的一切。通过 Dockerfile 可以方便地创建自定义镜像,并且利用 Docker 提供的命令可以轻松管理和使用这些镜像。掌握 Docker 镜像的创建、管理和使用,是进行容器化应用开发和部署的基础技能。希望本文能帮助读者更好地理解 Docker 镜像的概念和操作,提高开发和运维效率。
51 6
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
66 1
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
129 26
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
97 27
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
203 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用。掌握这些Docker基础概念和操作,可以显著提高开发和部署效率,确保应用程序的可移植性和可扩展性。
82 22
Docker基础使用教程,零基础一小时入门
Docker基础知识总结,一文让你读懂Docker是什么
197 0
Docker基础使用教程,零基础一小时入门
Docker基础之四: Docker入门
Docker入门 首先我们检查docker是否安装成功: root@gctest:~# docker info Containers: 3 Images: 18 Server Version: 1.9.0 Storage Driver: aufs Root Dir: /var/lib
13264 2
docker基础入门之二
一、docker文件系统:   linuxFS包括boot file system 和 root file system   boot file system (bootfs),包含bootloader和kernel,在系统启动完成后,kernel滞留内存,bootfs解除挂载;   root...
1168 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等