跳转至

Docker

约 877 个字 预计阅读时间 3 分钟

镜像与容器

Docker 镜像(Image)和容器(Container)是 Docker 技术的核心概念,它们之间的关系可以通过以下几点来理解:

  1. 镜像是只读的:Docker 镜像是一个只读的模板,它包含了运行一个应用所需的所有内容,包括代码、运行时环境、库、环境变量和配置文件等。镜像是创建 Docker 容器的基础。
  2. 容器是镜像的运行实例:当你启动一个镜像,Docker 会创建一个新的容器。容器是镜像的一个运行实例,你可以把它看作是一个轻量级的独立运行环境。你可以在容器中启动应用,对文件进行修改,安装新的软件等。每个容器都是独立的,容器与容器之间不会互相影响。
  3. 容器的更改不会影响镜像:由于镜像是只读的,因此在容器中进行的所有更改(例如修改文件、安装新软件等)都不会影响到镜像。如果你删除一个容器并创建一个新的容器,那么新的容器会恢复到镜像的原始状态。
  4. 可以从容器创建新的镜像:虽然容器的更改不会影响到原始镜像,但是你可以选择将容器的当前状态保存为新的镜像。这个新的镜像将包含容器中的所有更改。这使得你可以创建一个基本镜像,然后在容器中进行修改,最后保存为新的镜像,以此来创建定制的应用环境。
  5. 镜像可以被复用:由于镜像是只读的,因此同一个镜像可以被用来创建多个容器。每个容器都有自己的文件系统,它们可以独立运行,互不影响。

总的来说,镜像和容器的关系可以用这样一个比喻来形象地描述:镜像就像是一个类(Class),而容器就像是这个类的一个对象(Object)。

Dockerfile

  1. 创建一个空的 Dockerfile:在你的项目目录中,创建一个名为 Dockerfile 的新文件。Dockerfile 的文件名是固定的,且不带任何扩展名。
  2. 指定基础镜像:在 Dockerfile 的开始部分,使用 FROM 指令来指定基础镜像。例如,如果你的应用需要运行在 Node.js 环境中,你可以使用 FROM node:14 来指定 Node.js 14 作为你的基础镜像。
  3. 复制文件和目录:使用 COPY 指令来将你的代码和其他必要的文件复制到镜像中。例如,你可以使用 COPY . /app 来将当前目录中的所有文件复制到镜像的 /app 目录中。
  4. 设置工作目录:使用 WORKDIR 指令来设置镜像中的工作目录。例如,你可以使用 WORKDIR /app 来将工作目录设置为 /app
  5. 安装依赖:如果你的应用有依赖,你可以使用 RUN 指令来安装这些依赖。例如,如果你的 Node.js 应用有 package.json 文件,你可以使用 RUN npm install 来安装依赖。
  6. 指定启动命令:使用 CMD 指令来指定启动你的应用的命令。例如,你可以使用 CMD ["node", "app.js"] 来启动你的 Node.js 应用。
  7. 构建镜像:保存并关闭 Dockerfile,然后在命令行中运行 docker build -t your-image-name . 来构建你的镜像。这里,your-image-name 是你给你的镜像起的名字,. 指的是 Dockerfile 所在的目录。