Dockerfile 是 Docker 中用于定义镜像自动化构建流程的配置文件,在 Dockerfile 中,包含了构建镜像过程中需要执行的命令和其他操作。它可以明确设定 Docker 镜像的制作过程,帮助我们在容器体系下能够完成自动构建。习惯性的会使用默认的文件名 Dockerfile,以及会将其置于镜像构建上下文目录中

流程:

1、新建Dockerfile文件
2、写内容:例如基于Ubuntu构建Nginx

  1. # 构建一个基于ubuntu的docker定制镜像
  2. # 基础镜像
  3. FROM ubuntu
  4. # 镜像作者 MAINTAINER已废弃,改为LABEL代替
  5. # MAINTAINER my_name myemail@domain.com
  6. LABEL maintainer="myemail@domain.com"
  7. # 执行命令
  8. ## 换成国内的软件源
  9. RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
  10. RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
  11. ## 安装nginx
  12. RUN apt update >/dev/null 2>&1
  13. RUN apt install nginx -y >/dev/null 2>&1
  14. # 暴露对外端口
  15. EXPOSE 80

3、执行构建命令

  1. docker build --network=host -t ubuntu-nginx:v1 .

注意:最后有参数”.”,最后的 . 代表本次执行的上下文路径
--network=host 使用宿主机的网络连接代理容器的网络(在一些情况下,容器可能无法顺畅地连接外网)。
-t ubuntu-nginx:v1 指定生产的镜像名称为 ubuntu-nginx ,版本号为 v1。
-f 指定Dockerfile所在位置

镜像构建过程
  1. [user@centos8 nginx]$ docker build --network=host -t ubuntu-nginx:v1 .
  2. # 将上下文求发送给Docker引擎
  3. Sending build context to Docker daemon 2.56kB
  4. # 下载依赖的镜像
  5. Step 1/7 : FROM ubuntu
  6. latest: Pulling from library/ubuntu
  7. d51af753c3d3: Pull complete
  8. fc878cd0a91c: Pull complete
  9. 6154df8ff988: Pull complete
  10. fee5db0ff82f: Pull complete
  11. Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7
  12. Status: Downloaded newer image for ubuntu:latest
  13. # 生成镜像 1d622ef86b13
  14. ---> 1d622ef86b13
  15. Step 2/7 : MAINTAINER my_name myemail@domain.com
  16. # 运行容器 4eec6e3094f0,在容器内运行上面的这个命令,标记维护者信息
  17. ---> Running in 4eec6e3094f0
  18. # 移除临时容器 4eec6e3094f0
  19. Removing intermediate container 4eec6e3094f0
  20. # 生成镜像 6679d1c204e3
  21. ---> 6679d1c204e3
  22. Step 3/7 : RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
  23. # 运行容器84d38c20d8c4,在容器内运行上面的这个命令,更换软件源记录
  24. ---> Running in 84d38c20d8c4
  25. # 移除临时容器 84d38c20d8c4
  26. Removing intermediate container 84d38c20d8c4
  27. # 生成镜像 83f29f7b055a
  28. ---> 83f29f7b055a
  29. Step 4/7 : RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
  30. # 运行容器 763e4493d93f, 在容器内运行上面的这个命令,更换软件源记录
  31. ---> Running in 763e4493d93f
  32. # 移除临时容器 763e4493d93f
  33. Removing intermediate container 763e4493d93f
  34. # 生成镜像 6297f20605d9
  35. ---> 6297f20605d9
  36. Step 5/7 : RUN apt update >/dev/null 2>&1
  37. # 运行容器 2665a7e5a2e9,在容器内运行上面的这个命令, 更新软件源缓存
  38. ---> Running in 2665a7e5a2e9
  39. # 移除临时容器 2665a7e5a2e9
  40. Removing intermediate container 2665a7e5a2e9
  41. # 生成镜像 fdfed940ca4d
  42. ---> fdfed940ca4d
  43. Step 6/7 : RUN apt install nginx -y >/dev/null 2>&1
  44. # 运行 容器 722a9a544643,在容器内运行上面的这个命令, 安装nginx
  45. ---> Running in 722a9a544643
  46. # 移除临时容器 722a9a544643
  47. Removing intermediate container 722a9a544643
  48. # 生成镜像 6ee76f7df9e5
  49. ---> 6ee76f7df9e5
  50. Step 7/7 : EXPOSE 80
  51. # 运行容器 a12ed3216ee0,在容器内运行上面的这个命令, 暴露80端口
  52. ---> Running in a12ed3216ee0
  53. # 移除临时容器 a12ed3216ee0
  54. Removing intermediate container a12ed3216ee0
  55. # 生成最终的镜像 7cf64279ba98
  56. ---> 7cf64279ba98
  57. Successfully built 7cf64279ba98
  58. # 将这个镜像标记命名 ubuntu-nginx 版本号v1
  59. Successfully tagged ubuntu-nginx:v1

查看构建过程:

  1. docker history ubuntu-nginx:v1

Dockerfile 的结构

Dockerfile 主要包含四部分内容:

  1. 基础镜像信息;
  2. 维护者信息;
  3. 镜像操作指令;
  4. 容器启动时指令。


上下文路径:

上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢