Docker 镜像是 Docker 容器的基础,是构建容器环境的蓝图。镜像包含了运行应用程序所需的所有内容:代码、依赖库、配置文件等。本章将详细介绍如何创建、管理、使用 Docker 镜像。
创建镜像
创建 Docker 镜像有多种方法,最常见的是通过 Dockerfile 来定义和构建镜像。Dockerfile 是一个文本文件,其中包含了一系列指令,用于指导 Docker 如何构建镜像。
使用 Dockerfile 构建镜像
首先,需要创建一个 Dockerfile 文件。以下是一个简单的示例:
// www.javascriptcn.com code example # 使用官方 Python 运行时作为父镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 将当前目录内容拷贝到容器的工作目录下 COPY . /app # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 暴露端口 EXPOSE 5000 # 指定运行命令 CMD ["python", "app.py"]
接下来,可以通过 docker build 命令来构建镜像。假设 Dockerfile 在当前目录下:
docker build -t my-python-app .
这里 -t 参数用于指定镜像标签(tag),可以方便地识别镜像。
管理镜像
一旦镜像被创建,就可以使用 Docker 提供的各种命令来管理和操作它。
查看镜像列表
使用 docker images 命令可以查看所有本地存储的镜像:
docker images
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE my-python-app latest 1234567890ab 2 minutes ago 500MB
删除镜像
如果不再需要某个镜像,可以使用 docker rmi 命令删除它。例如,要删除 my-python-app 镜像:
docker rmi my-python-app
如果该镜像已经被某个容器使用,你需要先停止并删除相关的容器,或者使用 -f 参数强制删除:
docker rmi -f my-python-app
使用镜像
有了镜像之后,下一步就是运行容器了。
启动容器
使用 docker run 命令可以基于镜像启动一个新的容器:
docker run -d -p 5000:5000 my-python-app
这里的 -d 参数表示以后台模式运行容器,-p 参数用来映射主机的 5000 端口到容器的 5000 端口。
进入容器
如果你需要进入正在运行的容器内部进行操作,可以使用 docker exec 命令:
docker exec -it container_name_or_id bash
这里的 -it 参数表示打开一个交互式的终端会话。
镜像版本控制
在开发过程中,经常需要对镜像进行多次迭代。因此,良好的版本管理策略对于维护镜像非常重要。
使用标签
给镜像添加标签可以帮助区分不同版本。例如:
docker tag my-python-app:latest my-python-app:v1.0
这样,即使后续更新了镜像,也可以通过标签来访问特定版本的镜像。
多阶段构建
为了减小最终镜像的体积,可以采用多阶段构建的方式。这种方式允许你在构建过程中生成中间镜像,但最终镜像只包含必要的组件,从而减少不必要的文件。
// www.javascriptcn.com code example # 第一阶段:构建应用 FROM node:12 AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 第二阶段:创建最小化镜像 FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html
在这个例子中,第一阶段使用了 Node.js 来构建前端应用,第二阶段则使用了一个更小的 Nginx 镜像来部署构建好的静态文件。
总结
通过本章的学习,你应该掌握了如何使用 Docker 镜像来构建和管理容器环境。从创建镜像、管理镜像到使用镜像以及镜像版本控制,这些都是 Docker 开发中的基本技能。希望这些知识能帮助你更高效地进行开发工作。