1. Docker 容器简介
Docker 是一个开源的应用容器引擎,它使开发者能够将应用程序及其依赖打包到一个标准化的单元中,称为容器。容器能够在任何环境中轻松运行,不受操作系统和硬件的限制。
1.1 容器 vs 虚拟机
- 容器:容器使用操作系统层的虚拟化技术,容器共享宿主机的操作系统核心,运行时更加轻量,启动更快。容器启动时仅包含应用程序及其依赖。
- 虚拟机:虚拟机模拟整个硬件并运行完整的操作系统,因此开销较大,启动也较慢。
2. Dockerfile 详解
2.1 什么是 Dockerfile
Dockerfile 是一个文本文件,包含了一系列指令,这些指令描述了如何构建一个 Docker 镜像。Dockerfile 定义了应用程序的环境、所需的依赖包、运行命令等。通过 Dockerfile,可以自动化地创建定制的 Docker 镜像,保证在不同机器上运行时环境一致。
2.2 Dockerfile 常见指令
- FROM:指定基础镜像。例如,可以选择 Ubuntu、Node.js 或 Python 作为基础镜像。
dockerfile
FROM node:14
* WORKDIR:设置工作目录。所有后续命令都会在这个目录下执行。
dockerfile
WORKDIR /app
* COPY:将文件从宿主机复制到容器中的指定路径。
dockerfile
COPY . /app
* RUN:执行命令。可以安装软件包或执行其他命令。每个 RUN 命令会创建一个新的镜像层。
dockerfile
RUN npm install
* CMD:指定容器启动时默认执行的命令。一个 Dockerfile 只能有一个 CMD 指令。如果 Dockerfile 中没有 CMD 指令,容器启动时不会执行任何命令。
dockerfile
CMD ["npm", "start"]
* EXPOSE:指定容器应该监听的端口。此命令并不会实际开放端口,而是作为文档说明用途。
dockerfile
EXPOSE 3000
* ENTRYPOINT:指定容器启动时运行的命令。与 CMD 类似,但更具强制性。CMD 可以提供默认参数给 ENTRYPOINT 使用。
dockerfile
ENTRYPOINT ["python", "app.py"]
2.3 示例 Dockerfile
以下是一个简单的 Node.js 应用的 Dockerfile 示例:
# 使用官方 Node.js 镜像作为基础镜像
FROM node:14
# 创建并设置工作目录
WORKDIR /app
# 将当前目录的所有文件复制到容器中
COPY . .
# 安装依赖
RUN npm install
# 容器启动时执行的命令
CMD ["npm", "start"]
2.4 构建镜像
使用 Dockerfile 构建镜像非常简单,只需运行以下命令:
docker build -t my-node-app .
这个命令会按照 Dockerfile 中定义的步骤构建镜像,并将其命名为 my-node-app
。
3. Docker 安装
3.1 在 macOS 上安装 Docker
- 访问 Docker 官网下载最新的 Docker Desktop for Mac:Docker Desktop for Mac.
- 下载完成后,双击
.dmg
文件并将 Docker 拖动到 Applications 文件夹。 - 打开 Docker Desktop 应用,首次启动时可能会要求你授权安装和配置一些后台服务。
- 在终端中运行
docker --version
检查 Docker 是否正确安装。
3.2 在 Windows 上安装 Docker
- 访问 Docker 官网下载最新的 Docker Desktop for Windows:Docker Desktop for Windows.
- 下载完成后,运行安装包并按照向导进行安装,确保启用 WSL 2(Windows Subsystem for Linux)功能。
- 安装完成后,启动 Docker Desktop 应用,首次启动时,Docker 会进行一些初始化设置。
- 在命令行运行
docker --version
检查 Docker 是否正确安装。
4. 基本 Docker 操作命令
4.1 查看 Docker 版本
docker --version
4.2 拉取镜像
docker pull <image_name>
例如,拉取最新的 Ubuntu 镜像:
docker pull ubuntu:latest
4.3 查看已下载的镜像
docker images
4.4 运行容器
docker run -it <image_name> /bin/bash
例如,启动一个 Ubuntu 容器:
docker run -it ubuntu:latest /bin/bash
4.5 查看正在运行的容器
docker ps
4.6 停止容器
docker stop <container_id>
4.7 删除容器
docker rm <container_id>
4.8 删除镜像
docker rmi <image_name>
5. 使用 Docker Compose
Docker Compose 是用于定义和运行多容器 Docker 应用的工具,适用于管理多服务的应用,如数据库和应用服务同时运行的情况。
5.1 安装 Docker Compose
如果您已经安装了 Docker Desktop,则 Docker Compose 已经默认安装。您可以运行以下命令验证:
docker-compose --version
5.2 示例 docker-compose.yml
文件
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
5.3 启动多容器应用
docker-compose up
5.4 停止服务
docker-compose down
6. 在 VSCode 中使用 Docker
6.1 安装 Docker 扩展
- 打开 VSCode,点击左侧的扩展图标。
- 搜索 Docker,找到并安装 Docker 扩展。
6.2 管理容器
通过 VSCode 的 Docker 扩展,您可以:
- 查看镜像和容器的列表。
- 启动、停止、删除容器。
- 执行 Docker 命令,如
docker run
。
7. 常见问题与解决方案
7.1 容器启动失败
如果容器无法启动,检查容器的日志信息:
docker logs <container_id>
7.2 内存限制问题
如果容器在运行时内存不足,可以通过 --memory
参数限制内存大小:
docker run -it --memory="512m" ubuntu /bin/bash
7.3 容器端口映射
确保容器端口和主机端口正确映射:
docker run -it -p 8080:80 nginx