mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 20:31:18 +00:00
202 lines
13 KiB
Go
202 lines
13 KiB
Go
## 4.5 使用 Dockerfile 定制镜像
|
||
|
||
从刚才的 `docker commit` 的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
|
||
|
||
Dockerfile 是一个文本文件,其内包含了一条条的 **指令 (Instruction)**,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
|
||
|
||
### 4.5.1 使用 docker init 快速创建 (推荐)
|
||
|
||
Docker 提供了 `docker init` 命令,可以根据项目类型自动生成 Dockerfile、.dockerignore 和 compose.yaml 文件:
|
||
|
||
```bash
|
||
$ docker init
|
||
```
|
||
|
||
该命令会交互式地询问项目类型 (如 Go、Node.js、Python、Rust 等),并生成符合最佳实践的配置文件。对于新项目,这是推荐的起步方式。
|
||
|
||
### 4.5.2 手动创建 Dockerfile
|
||
|
||
还以之前定制 `nginx` 镜像为例,这次我们使用 Dockerfile 来定制。
|
||
|
||
在一个空白目录中,建立一个文本文件,并命名为 `Dockerfile`:
|
||
|
||
```bash
|
||
$ mkdir mynginx
|
||
$ cd mynginx
|
||
$ touch Dockerfile
|
||
```
|
||
|
||
其内容为:
|
||
|
||
```docker
|
||
FROM nginx
|
||
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
|
||
```
|
||
|
||
这个 Dockerfile 很简单,一共就两行。涉及到了两条指令,`FROM` 和 `RUN`。
|
||
|
||
### 4.5.3 FROM 指定基础镜像
|
||
|
||
所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个 `nginx` 镜像的容器,再进行修改一样,基础镜像是必须指定的。而 `FROM` 就是指定 **基础镜像**,因此一个 `Dockerfile` 中 `FROM` 是必备的指令,并且必须是第一条指令。
|
||
|
||
在 [Docker Hub](https://hub.docker.com/search?q=&type=image&image_filter=official) 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如 [ |