Dockerfile的基本结构
Dockerfile是一个包含用于组合镜像的命令的文本文档。可以使用在命令行中调用任何命令。Docker通过读取Dockerfile中的指令自动生成镜像。
docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
Dockerfile由一行行命令语句组成,并且支持以#开头的注释行
Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
Dockerfile文件说明
Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#字符开头则被视为注释。可以在Docker文件中使用 RUN , CMD , FROM , EXPOSE , ENV 等指令。
Dockerfile常见命令
命令 | 说明 |
---|---|
FROM | 指定基础镜像,必须为第一个命令 |
MAINTAINER | 维护者(作者)信息 |
ENV | 设置环境变量 |
RUN | 构建镜像时执行的命令 |
CMD | 构建容器后调用,也就是在容器启动时才进行调用。 |
ENTRYPOINT | 指定运行容器启动过程执行命令,覆盖CMD参数。ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。 |
ADD | 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget |
COPY | 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源 |
WORKDIR | 工作目录,类似于cd命令 |
ARG | 用于指定传递给构建运行时的变量 |
VOLUMN | 用于指定持久化目录 |
EXPOSE | 指定于外界交互的端口 |
USER | 指定运行容器时的用户名或UID,后续的 RUN也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户 |
案例实战
修改mysql官网镜像时区
可以使用IDEA来编写,装了docker插件后编写Dockerfile文件会有提示
- 编写Dockerfile文件
FROM mysql:5.7.31
MAINTAINER mysql from date UTC by Asia/Shanghai "laosiji@lagou.com"
ENV TZ Asia/Shanghai
- 将文件放在linux里面
- 进行build
docker build命令可以用来使用Dockerfile创建镜像
语法:
docker build [OPTIONS] PATH | URL | -
常用参数:
- --build-arg=[] :设置镜像创建时的变量
- -f:指定要使用的Dockerfile路径
- --rm:设置镜像成功后删除中间容器
- --tag、-t:镜像的名字及标签,通常是name:tag的格式或者name格式
执行命令:
docker build --rm -t lagou/mysql:5.7 .
注意:最后的“点”代表在当前目录下找Dockerfile文件。
- 查看是否构建成功
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情