Docker
约 877 个字 预计阅读时间 3 分钟
镜像与容器¶
Docker 镜像(Image)和容器(Container)是 Docker 技术的核心概念,它们之间的关系可以通过以下几点来理解:
- 镜像是只读的:Docker 镜像是一个只读的模板,它包含了运行一个应用所需的所有内容,包括代码、运行时环境、库、环境变量和配置文件等。镜像是创建 Docker 容器的基础。
- 容器是镜像的运行实例:当你启动一个镜像,Docker 会创建一个新的容器。容器是镜像的一个运行实例,你可以把它看作是一个轻量级的独立运行环境。你可以在容器中启动应用,对文件进行修改,安装新的软件等。每个容器都是独立的,容器与容器之间不会互相影响。
- 容器的更改不会影响镜像:由于镜像是只读的,因此在容器中进行的所有更改(例如修改文件、安装新软件等)都不会影响到镜像。如果你删除一个容器并创建一个新的容器,那么新的容器会恢复到镜像的原始状态。
- 可以从容器创建新的镜像:虽然容器的更改不会影响到原始镜像,但是你可以选择将容器的当前状态保存为新的镜像。这个新的镜像将包含容器中的所有更改。这使得你可以创建一个基本镜像,然后在容器中进行修改,最后保存为新的镜像,以此来创建定制的应用环境。
- 镜像可以被复用:由于镜像是只读的,因此同一个镜像可以被用来创建多个容器。每个容器都有自己的文件系统,它们可以独立运行,互不影响。
总的来说,镜像和容器的关系可以用这样一个比喻来形象地描述:镜像就像是一个类(Class),而容器就像是这个类的一个对象(Object)。
Dockerfile¶
- 创建一个空的 Dockerfile:在你的项目目录中,创建一个名为
Dockerfile
的新文件。Dockerfile 的文件名是固定的,且不带任何扩展名。 - 指定基础镜像:在 Dockerfile 的开始部分,使用
FROM
指令来指定基础镜像。例如,如果你的应用需要运行在 Node.js 环境中,你可以使用FROM node:14
来指定 Node.js 14 作为你的基础镜像。 - 复制文件和目录:使用
COPY
指令来将你的代码和其他必要的文件复制到镜像中。例如,你可以使用COPY . /app
来将当前目录中的所有文件复制到镜像的/app
目录中。 - 设置工作目录:使用
WORKDIR
指令来设置镜像中的工作目录。例如,你可以使用WORKDIR /app
来将工作目录设置为/app
。 - 安装依赖:如果你的应用有依赖,你可以使用
RUN
指令来安装这些依赖。例如,如果你的 Node.js 应用有package.json
文件,你可以使用RUN npm install
来安装依赖。 - 指定启动命令:使用
CMD
指令来指定启动你的应用的命令。例如,你可以使用CMD ["node", "app.js"]
来启动你的 Node.js 应用。 - 构建镜像:保存并关闭 Dockerfile,然后在命令行中运行
docker build -t your-image-name .
来构建你的镜像。这里,your-image-name
是你给你的镜像起的名字,.
指的是 Dockerfile 所在的目录。