Docker 容器基础:创建、运行、管理

发布于:2025-02-13 ⋅ 阅读:(9) ⋅ 点赞:(0)

1. 什么是 Docker 容器?

Docker 容器是一个轻量级、可移植的虚拟化单元,用于打包、分发和运行应用程序。容器与传统的虚拟机不同,它不需要运行整个操作系统,而是利用宿主机操作系统的内核。每个容器都包含应用程序及其依赖,保证了应用的一致性和可移植性。

容器与虚拟机的区别

  • 容器:共享宿主机内核,启动速度快,占用资源少。
  • 虚拟机:每个虚拟机都运行一个完整的操作系统,占用更多资源,启动较慢。

2. Docker 容器的基本概念

2.1 容器的特点

  • 轻量级:容器不包含操作系统,只包含应用程序和依赖,启动速度快,资源占用少。
  • 隔离性:每个容器运行在独立的环境中,相互之间没有影响。
  • 可移植性:容器可以在任何地方运行,无论是开发环境、测试环境还是生产环境。
  • 易于管理:容器可以通过 Docker CLI 或 Docker Compose 管理。

3. Docker 容器的创建与运行

3.1 拉取 Docker 镜像

在创建容器之前,我们首先需要从 Docker Hub 或其他仓库拉取镜像。镜像是容器的基础,是一个只读的应用程序模板。

docker pull nginx:latest

此命令会从 Docker Hub 拉取 Nginx 镜像,并将其存储在本地。

3.2 创建并运行 Docker 容器

使用 docker run 命令可以创建并运行一个容器。该命令不仅创建容器,还启动并运行它。

docker run -d -p 8080:80 --name my-nginx nginx:latest
  • -d:表示容器在后台运行(detached mode)。
  • -p 8080:80:将宿主机的 8080 端口映射到容器的 80 端口,允许通过访问 localhost:8080 来访问 Nginx。
  • --name my-nginx:为容器指定一个名称,方便后续管理。
  • nginx:latest:使用从 Docker Hub 拉取的 nginx 镜像。

3.3 查看正在运行的容器

运行 docker ps 命令查看当前正在运行的容器:

docker ps

输出示例:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                  NAMES
f6d510d8c377   nginx:latest   "/docker-entrypoint.…"   3 minutes ago    Up 3 minutes    0.0.0.0:8080->80/tcp   my-nginx

3.4 进入容器

如果需要进入容器进行调试或查看文件,可以使用 docker exec 命令:

docker exec -it my-nginx bash

这将打开容器的交互式终端,让你可以在容器内部执行命令。


4. Docker 容器的管理

4.1 查看所有容器

除了查看正在运行的容器(docker ps),你还可以查看所有容器,包括已经停止的容器。

docker ps -a

4.2 停止容器

停止容器可以使用 docker stop 命令:

docker stop my-nginx

这会停止名为 my-nginx 的容器。

4.3 启动已停止的容器

如果容器已经停止,可以使用 docker start 启动它:

docker start my-nginx

4.4 重启容器

如果容器在运行过程中出现问题,或者你修改了容器配置,可以使用 docker restart 来重启容器:

docker restart my-nginx

4.5 删除容器

如果不再需要容器,可以使用 docker rm 删除容器。需要先停止容器,然后删除它:

docker stop my-nginx
docker rm my-nginx

如果你想强制删除正在运行的容器,可以使用 -f 参数:

docker rm -f my-nginx

4.6 删除镜像

如果不再需要某个镜像,可以使用 docker rmi 删除它:

docker rmi nginx:latest

5. 容器与数据管理

5.1 持久化数据:数据卷(Volumes)

Docker 容器是临时的,容器删除后,容器内的数据也会丢失。为了持久化数据,我们可以使用 数据卷(Volumes),它可以将数据存储在宿主机上,不受容器生命周期的影响。

创建和使用数据卷:

docker run -d -p 8080:80 --name my-nginx -v /my/host/data:/usr/share/nginx/html nginx:latest
  • -v /my/host/data:/usr/share/nginx/html:将宿主机 /my/host/data 目录映射到容器的 /usr/share/nginx/html 目录。容器对该目录的所有更改都会同步到宿主机上。

5.2 持久化容器的日志

Docker 允许你将容器的日志输出到宿主机,便于日志分析和存档。可以使用 -v 参数将容器的日志目录挂载到宿主机:

docker run -d -p 8080:80 --name my-nginx -v /my/host/logs:/var/log/nginx nginx:latest

6. 使用 Docker Compose 管理多个容器

6.1 什么是 Docker Compose?

Docker Compose 是一个工具,用于定义和管理多容器 Docker 应用。它使用 YAML 文件来配置应用的服务,然后通过一个简单的命令启动所有服务。

6.2 创建 docker-compose.yml 文件

例如,一个简单的 Web 应用可能需要两个服务:Web 服务和数据库服务。以下是一个 docker-compose.yml 示例:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword

6.3 使用 Docker Compose 启动服务

在项目目录下创建 docker-compose.yml 文件后,使用以下命令启动所有服务:

docker-compose up

这将拉取所需镜像并启动 webdb 服务。

6.4 停止和删除服务

要停止并删除容器,可以使用以下命令:

docker-compose down

7. Docker 容器的最佳实践

7.1 使用官方镜像

尽量使用 Docker 官方提供的镜像,这些镜像经过测试和优化,确保了安全性和可靠性。例如,使用 nginx:latestubuntu:20.04

7.2 最小化镜像大小

为了优化镜像的构建时间和存储空间,尽量使用轻量级的基础镜像,如 alpine 镜像:

FROM node:14-alpine

7.3 使用 .dockerignore 文件

.dockerignore 文件用于排除不必要的文件(如 .gitnode_modules)进入镜像,减少镜像体积:

.dockerignore 示例

.git
node_modules
*.log

7.4 使用多阶段构建

多阶段构建可以通过多个 FROM 指令优化镜像,减少不必要的构建依赖。

# 第一阶段:构建阶段
FROM node:14 AS build
WORKDIR /app
COPY . .
RUN npm install && npm run build

# 第二阶段:生产阶段
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html

8. 总结

  • Docker 容器 是一个轻量级、可移植的应用运行环境,容器化应用可以快速部署、迁移,并保证一致性。
  • 容器的基本操作 包括创建、运行、停止、删除容器,管理容器的数据。
  • 使用 Docker Compose 可以轻松管理多容器应用,简化开发和部署流程。
  • 优化 Docker 镜像 可以减少构建时间和存储空间,提高 Docker 容器的运行效率。