Docker 入门指南

2024-03-18 王汪旺
容器化 DevOps 技术

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

  1. 访问 Docker 官网下载最新的 Docker Desktop for Mac:Docker Desktop for Mac.
  2. 下载完成后,双击 .dmg​ 文件并将 Docker 拖动到 Applications 文件夹。
  3. 打开 Docker Desktop 应用,首次启动时可能会要求你授权安装和配置一些后台服务。
  4. 在终端中运行 docker --version​ 检查 Docker 是否正确安装。

3.2 在 Windows 上安装 Docker

  1. 访问 Docker 官网下载最新的 Docker Desktop for Windows:Docker Desktop for Windows.
  2. 下载完成后,运行安装包并按照向导进行安装,确保启用 WSL 2(Windows Subsystem for Linux)功能。
  3. 安装完成后,启动 Docker Desktop 应用,首次启动时,Docker 会进行一些初始化设置。
  4. 在命令行运行 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 扩展

  1. 打开 VSCode,点击左侧的扩展图标。
  2. 搜索 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