
Docker 及 Docker Compose 的一些常用命令与实践
Docker 和 Docker Compose 是现代化应用开发与部署中不可或缺的工具,它们极大地简化了环境配置、应用打包和多容器编排。本文将介绍它们的安装方法、常用命令,并提供一个使用 Docker Compose部署 Nginx Proxy Manager 的实例。
安装 Docker 和 Docker Compose
推荐使用官方的安装方式以获取最新、最稳定的版本。
安装 Docker Engine
官方提供了方便的脚本来安装最新稳定版的 Docker Engine,这通常包含了 Docker CLI、containerd 等核心组件,并且现在**默认也包含了 Docker Compose V2 (作为 docker compose
CLI 插件)**。
**使用官方脚本 (推荐,适用于测试和开发环境)**:
1
2
3
4curl -fsSL [https://get.docker.com](https://get.docker.com) -o get-docker.sh
sudo sh get-docker.sh
# 添加当前用户到 docker 组,避免每次都 sudo (需要重新登录或 newgrp docker 生效)
sudo usermod -aG docker $USER这个脚本会自动检测你的 Linux 发行版并安装最新版本。对于生产环境,建议遵循 Docker 官方文档中针对特定发行版(如 Ubuntu, CentOS 等)的详细手动安装步骤:Install Docker Engine。
避免使用旧的包管理器版本: 直接使用
apt install docker.io
或yum install docker
安装的版本可能相对陈旧,建议使用上述官方脚本或官方文档的步骤。
安装 Docker Compose
如上所述,通过 get.docker.com
脚本安装的 Docker Engine 通常已经包含了 Compose V2,你可以通过 docker compose version
来验证。推荐使用集成的 docker compose
命令(注意中间没有连字符 -
)。
**如果需要独立的
docker-compose
(兼容旧脚本或特定需求)**:
虽然不推荐,但如果你确实需要独立的docker-compose
二进制文件(它也支持 V2 语法),可以通过以下方式安装最新版本:1
2
3
4
5
6
7
8# 自动获取最新版本号并下载
LATEST_COMPOSE_VERSION=$(curl -s [https://api.github.com/repos/docker/compose/releases/latest](https://api.github.com/repos/docker/compose/releases/latest) | grep 'tag_name' | cut -d\" -f4)
# 下载对应系统架构的二进制文件
sudo curl -L "[https://github.com/docker/compose/releases/download/$](https://github.com/docker/compose/releases/download/$){LATEST_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version注意:
apt install docker-compose
通常安装的是非常旧的 v1 版本,强烈不建议 使用此方法。**推荐一个一键安装脚本 (第三方)**:
如果你偏好使用脚本,可以尝试作者提供的脚本(请注意使用第三方脚本的潜在风险,建议审查脚本内容):1
2
3
4
5# 克隆仓库
git clone [https://github.com/ZefanHu/docker-install-script](https://github.com/ZefanHu/docker-install-script)
cd docker-install-script
# 执行脚本
sudo ./docker-install-script.sh
Docker 常用命令
以下是一些管理 Docker 容器和镜像的基础命令:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
: 创建并运行一个新的容器。- 示例:
docker run -d -p 8080:80 --name mynginx nginx
(后台运行 Nginx,将主机 8080 映射到容器 80) - 常用选项:
-d
(后台运行),-p hostPort:containerPort
(端口映射),--name containerName
(命名容器),-v hostPath:containerPath
(挂载卷),-e KEY=VALUE
(设置环境变量),--rm
(容器停止后自动删除)
- 示例:
docker ps [OPTIONS]
: 列出正在运行的容器。-a
或--all
: 列出所有容器 (包括已停止的)。-q
或--quiet
: 只显示容器 ID。
docker stop CONTAINER [CONTAINER...]
: 停止一个或多个运行中的容器 (发送 SIGTERM 信号,尝试优雅停止)。- 示例:
docker stop mynginx
- 示例:
docker start CONTAINER [CONTAINER...]
: 启动一个或多个已停止的容器。- 示例:
docker start mynginx
- 示例:
docker restart CONTAINER [CONTAINER...]
: 重启一个或多个容器。docker rm CONTAINER [CONTAINER...]
: 删除一个或多个已停止的容器。-f
或--force
: 强制删除运行中的容器 (发送 SIGKILL)。
docker logs [OPTIONS] CONTAINER
: 查看容器的日志。-f
或--follow
: 持续跟踪日志输出。--tail N
: 显示最后 N 行日志。
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
: 在运行中的容器内执行命令。- 示例:
docker exec -it mynginx bash
(进入 mynginx 容器的交互式 Bash Shell) -i
: 交互式。-t
: 分配一个伪终端。
- 示例:
docker images [OPTIONS] [REPOSITORY[:TAG]]
: 列出本地存储的镜像。docker rmi IMAGE [IMAGE...]
: 删除一个或多个本地镜像。-f
或--force
: 强制删除 (即使有容器基于它创建)。
docker pull NAME[:TAG|@DIGEST]
: 从镜像仓库 (默认 Docker Hub) 拉取镜像。- 示例:
docker pull ubuntu:latest
- 示例:
docker build [OPTIONS] PATH | URL | -
: 使用 Dockerfile 构建镜像。- 示例:
docker build -t myapp:1.0 .
(在当前目录根据 Dockerfile 构建名为 myapp:1.0 的镜像) -t name:tag
: 指定镜像名称和标签。
- 示例:
Docker Compose 常用命令 (推荐使用 V2 插件语法)
Docker Compose 用于定义和运行多容器 Docker 应用。推荐使用 docker compose
(无连字符) 命令。
docker compose up [OPTIONS] [SERVICE...]
: 创建并启动docker-compose.yml
文件定义的所有服务 (或指定服务)。- 示例:
docker compose up -d
(在后台启动所有服务) -d
: 后台运行。--build
: 在启动前构建镜像。
- 示例:
docker compose down [OPTIONS]
: 停止并删除由up
命令创建的容器、网络、卷。-v
或--volumes
: 同时删除定义在volumes
中的数据卷。--rmi all|local
: 删除构建的镜像 (all
: 所有,local
: 仅无标签的)。
docker compose ps [OPTIONS] [SERVICE...]
: 列出 Compose 项目中的容器状态。docker compose logs [OPTIONS] [SERVICE...]
: 查看服务的日志。-f
或--follow
: 持续跟踪日志。--tail N
: 显示最后 N 行日志。
docker compose build [OPTIONS] [SERVICE...]
: 构建或重新构建服务使用的镜像。docker compose pull [OPTIONS] [SERVICE...]
: 拉取服务依赖的镜像。docker compose exec [OPTIONS] SERVICE COMMAND [ARG...]
: 在指定服务的一个运行容器内执行命令。- 示例:
docker compose exec webserver nginx -v
- 示例:
注意: 如果你安装并使用的是独立的 docker-compose
(带连字符),上述命令将连字符加回去即可,例如 docker-compose up -d
。
示例:使用 Docker Compose 安装 Nginx Proxy Manager
Nginx Proxy Manager (NPM) 是一个带有 Web 界面的 Nginx 反向代理管理工具,非常适合用 Docker Compose 部署。
确保 Docker 和 Docker Compose 已安装。
创建 NPM 配置目录:
1
2
3mkdir -p ~/npm-data && cd ~/npm-data
# 使用 -p 确保父目录不存在时也会创建
# 将数据放在用户目录下,避免权限问题,可按需修改路径创建
docker-compose.yml
文件:
在~/npm-data
目录下创建一个名为docker-compose.yml
的文件,并填入以下内容(选择一个版本):官方最新版:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22version: '3.8' # 使用较新的 Compose 文件格式版本
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm_app # 添加容器名方便管理
restart: unless-stopped
ports:
# Public HTTP Port:
- '80:80'
# Public HTTPS Port:
- '443:443'
# Admin Interface Port:
- '81:81'
volumes:
- ./data:/data # 持久化应用数据
- ./letsencrypt:/etc/letsencrypt # 持久化 Let's Encrypt 证书
networks: # 推荐为NPM创建一个独立的网络
- npm_network
networks:
npm_network:
driver: bridge中文版 (chishin):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19version: '3.8' # 同样建议使用较新版本
services:
app:
image: 'chishin/nginx-proxy-manager-zh:latest' # 使用中文版镜像标签
container_name: npm_app_zh
restart: unless-stopped # 或者 always
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- npm_network
networks:
npm_network:
driver: bridge
启动服务:
在~/npm-data
目录下执行:1
docker compose up -d
(如果使用独立版,则为
docker-compose up -d
)访问 NPM 管理界面:
启动成功后,在浏览器中访问服务器的http://<你的服务器IP>:81
。默认登录凭据:
- Email:
admin@example.com
- Password:
changeme
首次登录后,系统会强制要求你修改默认用户信息和密码。
- Email:
通过这些命令和示例,希望能帮助你更好地理解和使用 Docker 与 Docker Compose 来管理你的应用容器。
- Title: Docker 及 Docker Compose 的一些常用命令与实践
- Author: 凡
- Created at : 2024-01-26 00:48:52
- Updated at : 2025-04-29 19:22:00
- Link: https://xblog.aptzone.cc/2024/01/26/docker以及docker-compose的一些常用命令/
- License: All Rights Reserved © 凡