DockerFile
DockerFile 介绍
Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
DockerFile 构建过程
DockerFile的指令
FROM: 指定基础镜像,Dockerfile第一个命令
FROM:定制的镜像都是基于FROM的镜像。比如下图的php就是定制需要的基础镜像,后续操作都是基于php。
FROM php
格式:
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
ps: tag或digest是可选的,tag不选默认为latest 最新版本
MAINTAINER:维护者/创作者
格式:
MAINTAINER <名字>
RUN: 构建镜像时执行的命令
RUN: 用于执行后面跟着的命令行命令。有两种格式:
shell 格式命令:
RUN ./test.php dev offline
其实就是在终端操作shell命令;
RUN command
拓展默认说明:
linux:/bin/sh -c
windows: cmd /s /c
exec格式:
RUN ["./test.php",“dev”,“offline”] // 等价于 RUN ./test.php dev offline
RUN [“可执行文件”, “参数1”, “参数2”]
说明:可将 ./test.php理解为可执行的文件,后面就是两个参数
注意:
多行命令不要写多个RUN,因为Dockerfile中每一个指令都会建一层。多少个RUN就构建多少层镜像,会造成镜像的臃肿、多层,不仅仅增加了部署的时间,还容易出错。例如下面
root@VM-8-11-ubuntu:/home/docker# cat Dockerfile
FROM php:7.4
RUN apt-get update
RUN pecl install redis-5.1.1
RUN pecl install xdebug-2.8.1
RUN docker-php-ext-enable redis xdebug
root@VM-8-11-ubuntu:/home/docker# docker build -t myphp/php .
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM php:7.4
以上执行会创建额外4个镜像,可以简化为以下的格式
root@VM-8-11-ubuntu:/home/docker# cat Dockerfile
FROM php:7.4
RUN apt-get update \
&& pecl install redis-5.1.1 \
&& pecl install xdebug-2.8.1 \
&& docker-php-ext-enable redis xdebug
如上,以&&符号连接命令,这样执行后,只会创建一层镜像。我们在查看执行步骤时可以看到
root@VM-8-11-ubuntu:/home/docker# docker build -t myphp/php .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM php:7.4
build 构建镜像命令
在Dockerfile文件的存放目录下,执行构建动作:
注: 最后的点如果后面没有接路径,则表示的是当前目录下的Dockerfile文件
$ docker build -t myphp/php:v1 . // v1 代表版本号
Successfully built cc4f99ce42bb
Successfully tagged myphp/php:v1
// 输出上面这个表示成功了。
ADD
将本地文件添加到容器中,tar类型文件会自动解压,可以访问网络资源,类似wget
格式:
格式:
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
示例:
ADD home/index.php /home/www # index.php 到 /home/www下
ADD *.php /home/www # ? 替代一个单字符,例如:"*.txt"
ADD index.php relativeDir/ # 添加 "index.php" 到 `WORKDIR`/relativeDir/ 工作目录下
更多详细的命令可以查看文档链接: docker命令