前言

最近使用Docker的频率越来越多了,让我觉得是时候对Docker进行一个小小的学习,和记录一下他的cheat sheet了。

于是乎,下了这一篇记录一下。

这篇我们主要讨论一下 Docker 和 Docker Compose

正文

1. Docker 和 Docker Compose

1.1 什么是Docker?

Docker 是一个容器化平台,提供容器的打包、运行和管理功能。

它能让你把应用及其依赖打包成镜像,并以容器的形式运行,比如:

docker run -d -p 8080:80 nginx

1.2 什么是Docker Compose?

Docker Compose 是 基于 Docker 的多容器管理工具。

它使用一个 docker-compose.yml 文件来描述多个容器的服务、网络、卷和依赖关系。适合微服务架构或者需要多个服务协同工作的场景,比如:

docker compose up -d

就能一次性拉起整个应用栈(比如 Web 服务 + 数据库 + 缓存)。

1.3 两种的关系

简单而言,Docker 是主体,Docker Compose是Docker下面的一个工具;Docker是引擎,更加关注于单个容器的生命周期管理,Docker Compose 则是对一组容器的生命周期管理,从某种意义上类似 对象 和 对象数组的 区别。通常在开发、测试环境中,Docker Compose用于快速定义和启动多个应用组件 类似(ai-servicedatabasebackend等),而所有的ai-servicedatabasebackend又分别是一个独立的Docker。

flowchart LR subgraph Dev["开发者 / 终端"] A[Docker CLI<br/>docker ...] B[Docker Compose CLI<br/>docker compose ...] C[(docker-compose.yml)] end subgraph Engine["Docker Engine (dockerd)"] D[镜像 Images] E[容器 Containers] F[网络 Networks] G[数据卷 Volumes] end A -->|单容器操作| Engine B -->|解析 yml 并调用 Docker API| Engine C -->|描述多服务编排| B Engine --> D Engine --> E Engine --> F Engine --> G classDef node fill:#f6f8fa,stroke:#aeb6c1,color:#111; class A,B,C,D,E,F,G,Engine,Dev node;

2. Cheat Sheet

2.1 Docker CLI Cheat Sheet(官方)

参考来自 CLI Cheat Sheet(以下部分通过Google Translate 翻译)

Docker 提供了在松散隔离的容器环境中打包和运行应用程序的功能。

这种隔离性和安全性允许您在给定主机上同时运行多个容器。容器轻量级,包含运行应用程序所需的一切,因此您无需依赖主机上当前安装的资源。您可以在工作时轻松共享容器,并确保与您共享的每个人都能获得相同的容器,并以相同的方式运行。

安装(Installation)

Docker Desktop 可以在Mac、Linux、Windows上运行:点此下载

Docker's Example: here

Docker官方文档:here

镜像(Images)

Docker 镜像是一个轻量级、独立、可执行的软件包,其中包含运行应用程序所需的一切:

代码、运行时、系统工具、系统库和设置。

# 通过 Dockerfile 构建镜像
docker build -t <image_name>

# 通过 Dockerfile 构建镜像(不使用缓存)
docker build -t <image_name> . –no-cache

# 列出本地镜像
docker images

# 删除镜像
docker rmi <image_name>

# 删除所有未使用的镜像
docker image prune

Docker hub

Docker Hub 是 Docker 提供的一项服务,用于查找和与团队共享容器镜像。了解更多信息并查找镜像,请点击此处

# 登录 Docker
docker login -u <username>

# 将镜像发布到 Docker Hub
docker push <username>/<image_name>

# 在 Hub 中搜索镜像
docker search <image_name>

# 从 Docker Hub 拉取镜像
docker pull <image_name>

常用命令

# 启动Docker进程
docker -d

# 获取 Docker 帮助。也可在所有子命令中使用 –help
docker --help

# 显示系统信息
docker info

容器(Containers)

容器是 Docker 镜像的运行时实例。无论基础架构如何,容器始终以相同的方式运行。

容器将软件与其环境隔离,并确保其即使在开发和预发布阶段存在差异的情况下也能保持一致性。

# 使用自定义名称从镜像创建并运行容器
docker run --name <container_name> <image_name>

# 运行容器并将容器的端口发布到主机
docker run -p <host_port>:<container_port> <image_name>

# 在后台运行容器
docker run -d <image_name>

启动或停止现有容器
docker start|stop <container_name> (or <container-id>)

# 移除已停止的容器
docker rm <container_name>

# 在正在运行的容器内打开 shell
docker exec -it <container_name> sh

# 获取并跟踪容器日志
docker logs -f <container_name>

# 检查正在运行的容器
docker inspect <container_name>(或 <container_id>)

# 列出当前正在运行的容器
docker ps

# 列出所有 docker 容器(正在运行和已停止)
docker ps --all

# 查看资源使用情况
docker container stats

2.2 Docker Compose Cheat Sheet

参考自 ChatGPT

启动容器

# 启动容器
docker compose up 

# 后台启动容器
docker compose up -d

# 启动时强制重新构建镜像
docker compose up --build -d

# -f <file>:指定docker-compose.yml 文件路径
docker compose -f <file> up -d

停止容器

# 停止并移除容器(保留网络和数据卷)
docker compose down

# 停止并同时删除数据卷(慎用,会清空数据库等持久化数据)
docker compose down -v

重启容器

# 重启所有服务
docker compose restart

# 重启指定服务(例如 backend)
docker compose restart backend-dev

常用辅助命令

# 查看运行中的服务
docker compose ps

# 查看实时日志(所有服务)
docker compose logs -f

# 查看某个服务日志
docker compose logs -f backend-dev

# 进入容器交互式终端(例如 MySQL)
docker compose exec mysql-dev bash

总结

好累,但素,就是酱紫!记录一下~!

参考

[1] CLI Cheat Sheet

立志做一个有趣的碳水化合物。