赞
踩
学会使用DockerHub找自己想要的镜像以后,我们会很方便的使用一些公用镜像仓库的Docker镜像。但是开发和部署的过程中,能找到的镜像可能并不能满足我们需要,这样我们就需要自己制作Docker镜像。我们通过需要编写一个 Dockerfile,然后来生成一个Docker镜像。Dockerfile 是一个文本文件,包含了从基础镜像构建新镜像所需的一系列命令和参数。这些命令涵盖了复制文件、安装软件、设置环境变量等多种操作,它们在 Docker 镜像构建过程中按顺序执行。
FROM - 指定基础镜像
FROM ubuntu:20.04
这条指令设置了使用 Ubuntu 20.04 作为基础镜像。
RUN - 执行命令
RUN apt-get update && apt-get install -y nginx
运行命令来更新包管理器的索引并安装 Nginx。
CMD - 提供容器启动时的默认执行命令
CMD ["nginx", "-g", "daemon off;"]
设置容器启动时默认运行 Nginx。
EXPOSE - 声明端口
EXPOSE 80
告知 Docker 镜像意图在运行时开放 80 端口。
ENV - 设置环境变量
ENV NGINX_VERSION 1.14
设置环境变量 NGINX_VERSION
。
COPY 和 ADD - 复制文件/目录
COPY . /app
将当前目录下的所有文件复制到镜像的 /app
目录中。
WORKDIR - 设置工作目录
WORKDIR /app
设置后续的 RUN、CMD、ENTRYPOINT 命令的工作目录。
ENTRYPOINT - 设置容器启动时执行的命令
ENTRYPOINT ["python3", "-m", "http.server"]
设置容器启动时运行 Python3 的 HTTP 服务器。
USER - 设置运行用户
USER myuser
指定接下来的 RUN、CMD 以及 ENTRYPOINT 命令的运行用户。
ARG - 定义构建参数
ARG version
定义一个名为 version
的参数,可在构建时提供。
VOLUME - 定义匿名卷
VOLUME /var/log/nginx
在容器中创建一个点 /var/log/nginx
,可以用来存储数据。
1、编写 Dockerfile:根据需要创建一个包含上述指令的 Dockerfile。假设文件内容如下:
- FROM ubuntu:20.04
- RUN apt-get update && apt-get install -y nginx
- COPY . /var/www/html
- EXPOSE 80
- CMD ["nginx", "-g", "daemon off;"]
以下是 Dockerfile 的详细解释:
FROM ubuntu:20.04
:指定基础镜像为 Ubuntu 20.04。这意味着构建的 Docker 镜像将基于 Ubuntu 20.04 镜像。RUN apt-get update && apt-get install -y nginx
:执行命令,更新软件包列表和安装 Nginx。这里使用了 &&
符号,表示在更新软件包列表后再安装 Nginx。-y
参数表示在安装过程中自动回答 yes。COPY . /var/www/html
:将当前目录中的所有文件复制到容器的 /var/www/html
目录中。这里的 .
表示当前目录,/var/www/html
是 Nginx 的默认网站目录。EXPOSE 80
:声明容器将监听 80 端口。这里的 80 端口是 Nginx 的默认端口。CMD ["nginx", "-g", "daemon off;"]
:指定容器启动时执行的命令。这里的命令是启动 Nginx,并使用 daemon off;
参数以前台模式运行。这个 Dockerfile 构建了一个简单的 Nginx 服务器,它基于 Ubuntu 20.04,安装了 Nginx,并配置了服务器以运行你提供的网站内容。当构建并运行这个镜像时,它将启动 Nginx 并使其能够提供静态内容,监听在容器的 80 端口上。这种配置非常适合托管静态网站或作为 Web 应用的前端服务器。
2、构建镜像:在 Dockerfile 所在目录执行以下命令:
docker build -t my-nginx-image .
这将构建一个新的镜像,并标记为 my-nginx-image
。
命令的参数说明如下:
docker
:Docker 命令行工具的名称。build
:构建 Docker 镜像的命令。-t
:指定镜像的标签(tag)。这里的标签为 my-nginx-image
,表示构建的 Docker 镜像的名称为 my-nginx-image
。.
:指定 Dockerfile 所在的路径。这里的路径为 .
,表示 Dockerfile 位于当前目录。执行 docker build -t my-nginx-image .
命令后,Docker 会在当前目录中查找 Dockerfile,然后根据 Dockerfile 中的指令,构建 Docker 镜像。构建完成后,镜像会被存储在本地,可以使用 docker images
命令查看。
3、运行容器:
docker run -p 8080:80 my-nginx-image
这会启动一个容器实例,使用该镜像,并将本地的 8080 端口映射到容器的 80 端口。
命令的参数说明如下:
docker
:Docker 命令行工具的名称。run
:运行 Docker 容器的命令。-p
:指定端口映射。这里的端口映射是将容器的 80 端口映射到宿主机的 8080 端口。这意味着当访问宿主机的 8080 端口时,会被转发到容器的 80 端口。my-nginx-image
:指定要运行的 Docker 镜像。这里的镜像名称为 my-nginx-image
,是之前构建的 Docker 镜像。通过这些步骤,你可以创建几乎任何类型的 Docker 镜像,以满足各种应用场景和需求。
基础镜像(Base Image)是构建 Docker 镜像的起点,所有 Docker 镜像都是从一个基础镜像开始构建的。基础镜像包含了操作系统的最小化安装或特定应用的运行环境,从中可以添加更多的层次(Layer)来创建最终的镜像。
Ubuntu
Alpine Linux
CentOS
Debian
Scratch
scratch
是一个空白的镜像,不包含任何文件或内容。BusyBox
选择基础镜像时,应考虑以下因素:
通过这些考虑,你可以选择最适合你的项目需求的基础镜像。在 Dockerfile 中使用基础镜像非常简单,只需在文件顶部使用 FROM
指令指定即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。