diff --git a/Docker/Docker 部署 MongoDB.md b/Docker/Docker 部署 MongoDB.md index 2929280..514b553 100755 --- a/Docker/Docker 部署 MongoDB.md +++ b/Docker/Docker 部署 MongoDB.md @@ -1,88 +1,114 @@ -1.镜像下载 -下载 `MongoDB` 镜像命令: +# Docker 部署 MongoDB -``` -``` -docker pull mongo -``` -``` - 执行 `docker images` 查看镜像,下载成功,如下图: +## 1. 下载 MongoDB 镜像 -2.启动 `MongoDB` -启动 `MongoDB` 命令: +```bash +docker pull mongo:latest -``` -``` -docker run -p 27017:27017 -v $PWD/db:/data/db -d mongo:latest +# 查看已下载的镜像 +docker images mongo ``` -``` -## 命令说明: +## 2. 启动 MongoDB 容器 -``` -``` - -p 27017:27017 : +```bash +docker run -d \ + --name mongodb \ + -p 27017:27017 \ + -v $PWD/data:/data/db \ + mongo:latest ``` -``` -## 将容器的 +### 参数说明 -``` -``` -27017 +| 参数 | 说明 | +|------|------| +| `-d` | 后台运行 | +| `--name mongodb` | 容器名称 | +| `-p 27017:27017` | 端口映射(主机:容器) | +| `-v $PWD/data:/data/db` | 数据卷挂载,持久化存储 | + +## 3. 配置认证(可选,推荐) + +```bash +# 创建管理员账号 +docker exec -it mongodb mongosh admin + +# 在 mongosh 中执行 +db.createUser({ + user: "admin", + pwd: "你的密码", + roles: [{ role: "root", db: "admin" }] +}) + +# 退出 +exit ``` -``` -## 端口映射到主机的 +### 带认证启动 -``` -``` -27017 +```bash +docker stop mongodb +docker rm mongodb + +docker run -d \ + --name mongodb \ + -p 27017:27017 \ + -v $PWD/data:/data/db \ + -e MONGO_INITDB_ROOT_USERNAME=admin \ + -e MONGO_INITDB_ROOT_PASSWORD=你的密码 \ + mongo:latest --auth ``` -``` -## 端口 +## 4. 连接测试 -``` -``` - -v $PWD/db:/data/db : +```bash +# 方式一:使用 mongosh 连接 +docker exec -it mongodb mongosh --host 127.0.0.1 + +# 方式二:从另一容器连接 +docker run -it --rm \ + --link mongodb:mongo \ + mongo:latest \ + mongosh --host mongo + +# 方式三:从主机连接(需要安装 mongosh) +mongosh mongodb://admin:密码@localhost:27017 ``` -``` -## 将主机中当前目录下的**`db`**挂载到容器的 +看到以下提示说明部署成功: ``` -``` -/data/db +It looks like you are trying to access MongoDB over HTTP on the native driver port. ``` -``` -**,作为**`mongo`**数据存储目录**`` -启动成功,如下图: +## 5. 常用管理命令 -3.测试连接 `MongoDB` -连接 `MongoDB` 命令: +```bash +# 查看容器状态 +docker ps | grep mongodb -``` -``` -docker run -it mongo:latest mongo --host 172.17.0.1 +# 查看日志 +docker logs -f mongodb + +# 进入容器 +docker exec -it mongodb bash + +# 停止/启动 +docker stop mongodb +docker start mongodb ``` -``` -## 命令说明: +## 6. 数据备份与恢复 -``` -``` - +```bash +# 备份(数据在挂载的 $PWD/data 目录中) +tar -czvf mongodb-backup-$(date +%Y%m%d).tar.gz data/ + +# 恢复 +tar -xzvf mongodb-backup-xxxxxxxx.tar.gz ``` -``` -## 使用**`mongo`**镜像执行**`mongo` **命令连接到刚启动的容器**`,`**主机**`IP`**为 +--- -``` -``` -172.17.0.1 -``` - -``` -提示信息 `It looks like you are trying to access MongoDB over HTTP on the native driver port.` ,nice,部署 `MongoD` 成功! \ No newline at end of file +> 参考:[MongoDB Docker 官方文档](https://hub.docker.com/_/mongo) diff --git a/Docker/INDEX_Docker.md b/Docker/INDEX_Docker.md index b2771a4..1d0362c 100755 --- a/Docker/INDEX_Docker.md +++ b/Docker/INDEX_Docker.md @@ -1,28 +1,62 @@ --- title: Docker 索引 tags: + - Docker + - 容器 - 索引 created: 2026-04-21 +updated: 2026-04-21 --- -# Docker +# Docker 知识索引 -> 自动生成的索引文件 +> 容器技术学习笔记汇总 -## 文件列表 +## 📚 目录 -| 文件名 | 大小 | 说明 | -|--------|------|------| -| [[Docker 部署 MongoDB]] | 1KB | | -| [[Docker安装redis]] | 1KB | | -| [[Rancher_Rancher的状态存储在什么地方?]] | 619B | | -| [[Rancher_如何在同一个主机上运行Rancher-Rancher和Rancher-Rancher-Agent]] | 957B | | -| [[centos7设置docker开机自启动,并设置容器自动重启]] | 837B | | -| [[docker rm & docker rmi & docker prune 的差异]] | 196B | | -| [[docker rm &amp; docker rmi &amp; docker prune 的差异]] | 196B | | -| [[docker镜像清理]] | 485B | | -| [[如何批量删除Docker中已经停止的容器]] | 1KB | | -| [[安装docker-compose]] | 545B | | +### 基础入门 +| 笔记 | 说明 | +|------|------| +| [[Docker安装redis]] | Redis 容器化部署 | +| [[Docker 部署 MongoDB]] | MongoDB 容器化部署 | +| [[安装docker-compose]] | Docker Compose 安装 | + +### 运维管理 +| 笔记 | 说明 | +|------|------| +| [[centos7设置docker开机自启动]] | Docker 及容器自启动配置 | +| [[docker镜像清理]] | 清理无用镜像 | +| [[如何批量删除Docker中已经停止的容器]] | 批量清理已停止容器 | + +### Rancher +| 笔记 | 说明 | +|------|------| +| [[Rancher状态存储位置]] | Rancher 单节点存储位置 | +| [[Rancher和Agent同主机运行]] | 单节点运行 Rancher + Agent | --- -*共 10 个文件* + +## 🔧 常用命令速查 + +```bash +# 镜像操作 +docker pull <镜像> # 下载镜像 +docker images # 查看本地镜像 +docker rmi <镜像> # 删除镜像 +docker image prune -f # 清理无用镜像 + +# 容器操作 +docker ps -a # 查看所有容器 +docker run -d <镜像> # 后台运行容器 +docker stop <容器> # 停止容器 +docker rm <容器> # 删除容器 +docker logs <容器> # 查看容器日志 + +# 清理 +docker container prune # 删除已停止容器 (Docker 1.13+) +docker system prune -f # 清理所有未使用资源 +``` + +--- + +*共 9 篇笔记* diff --git a/Docker/centos7设置docker开机自启动.md b/Docker/centos7设置docker开机自启动.md new file mode 100755 index 0000000..ebce3c3 --- /dev/null +++ b/Docker/centos7设置docker开机自启动.md @@ -0,0 +1,71 @@ +# CentOS 7 设置 Docker 开机自启动 + +## 1. 设置 Docker 开机启动 + +```bash +# 启用 Docker 服务开机自启 +systemctl enable docker + +# 验证设置 +systemctl is-enabled docker +``` + +## 2. 设置容器自动重启 + +### 方式一:创建容器时指定 + +```bash +docker run -d --restart=always --name <容器名> <镜像> +``` + +`--restart` 参数选项: + +| 值 | 说明 | +|----|------| +| `no` | 容器退出时不重启(默认) | +| `on-failure` | 仅在非 0 状态退出时重启 | +| `on-failure:3` | 非 0 退出时最多重启 3 次 | +| `always` | 无论退出状态如何都重启 | +| `unless-stopped` | 除非手动停止,否则始终重启 | + +### 方式二:修改已有容器 + +```bash +# 更新容器重启策略 +docker update --restart=always <容器ID或名称> + +# 示例 +docker update --restart=always my-redis +docker update --restart=always 8a3c5f7d2e91 +``` + +## 3. 批量设置所有容器 + +```bash +# 将所有容器设置为自动重启 +docker update --restart=always $(docker ps -aq) +``` + +## 4. 验证配置 + +```bash +# 查看容器重启策略 +docker inspect <容器名> --format='{{.HostConfig.RestartPolicy.Name}}' + +# 查看所有容器的重启策略 +docker ps --format '{{.Names}}: {{.Status}}' +``` + +## 常见问题 + +**Q:容器内应用崩溃退出后,Docker 会重启容器吗?** + +A:`--restart=always` 会在容器退出时自动重启。但如果容器内应用不断崩溃,Docker 会不断重启,可能造成死循环。建议使用健康检查机制。 + +**Q:服务器重启后,容器启动顺序重要吗?** + +A:如果容器有依赖关系(如 Web 应用依赖数据库),需要考虑启动顺序。可使用 `docker-compose` 的 `depends_on` 或设置重启策略的 `condition`。 + +--- + +> 参考:[Docker 官方文档 - 重启策略](https://docs.docker.com/config/containers/start-containers-automatically/) diff --git a/Docker/docker镜像清理.md b/Docker/docker镜像清理.md index 8983c6f..a0e8ad3 100755 --- a/Docker/docker镜像清理.md +++ b/Docker/docker镜像清理.md @@ -1,2 +1,62 @@ -1. **大量****镜像通过命令 docker image prune -f 清理。** -2. **通过命令 docker images | awk 'NR!=1{print $1":"$2}' | xargs docker rmi 可以批量清除无用的镜像,且不会影响使用中的镜像和基础镜像,满足笔者的需求。** > 来自 <[https://www.cnblogs.com/sqgzy/p/11864675.html](https://www.cnblogs.com/sqgzy/p/11864675.html)> > 来自 <[https://www.cnblogs.com/sqgzy/p/11864675.html](https://www.cnblogs.com/sqgzy/p/11864675.html)> \ No newline at end of file +# Docker 镜像清理 + +## 清理无用镜像 + +### 方法一:prune 命令(推荐) + +```bash +# 清理悬空镜像(无 tag 的镜像) +docker image prune -f + +# 清理所有未使用镜像 +docker image prune -a -f +``` + +### 方法二:批量清理 + +```bash +# 批量删除所有无用镜像,不会影响正在使用的镜像 +docker images | awk 'NR!=1{print $1":"$2}' | xargs docker rmi +``` + +### 方法三:system prune(全面清理) + +```bash +# 清理所有未使用的容器、网络、镜像 +docker system prune -f + +# 清理所有未使用的镜像,不仅仅是悬空镜像 +docker system prune -a -f + +# 清理卷(注意:会删除数据) +docker system prune --volumes -f +``` + +## 清理前后对比 + +```bash +# 查看清理前 +docker images -a + +# 清理 +docker system prune -f + +# 查看清理后 +docker images -a +``` + +## 定时清理(可选) + +创建 cron 任务定期清理: + +```bash +# 编辑 crontab +crontab -e + +# 每周日凌晨 3 点清理 +0 3 * * 0 /usr/bin/docker system prune -f +``` + +--- + +> 参考:[Docker 官方文档](https://docs.docker.com/config/pruning/) diff --git a/Docker/如何批量删除Docker中已经停止的容器.md b/Docker/如何批量删除Docker中已经停止的容器.md index b446941..3b42f8b 100755 --- a/Docker/如何批量删除Docker中已经停止的容器.md +++ b/Docker/如何批量删除Docker中已经停止的容器.md @@ -1,28 +1,74 @@ -**方法一:** -## #**==显示所有的容器,过滤出****Exited****状态的容器,取出这些容器的****ID**==, -## sudo docker ps -a|grep Exited|awk '{print $1}' -## #**==查询所有的容器,过滤出****Exited****状态的容器,列出容器****ID**==,删除这些容器 -## sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'` -xx -**方法二:** -## #====删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了) -## sudo docker rm $(sudo docker ps -a -q) +# 批量删除已停止的 Docker 容器 -**方法三:** -## #**==根据容器的状态,删除****Exited**==状态的容器 -## sudo docker rm $(sudo docker ps -qf status=exited) +## 方法一:使用 docker ps + awk(最常用) -**方法四:** -## #Docker 1.13**==版本以后,可以使用** **docker containers prune** ==命令,删除孤立的容器。 -## sudo docker container prune +```bash +# 查看所有已停止的容器 +sudo docker ps -a | grep Exited -~~#~~~~删除所有镜像~~ -~~sudo docker rmi $(docker images -q)~~ +# 获取已停止容器的 ID +sudo docker ps -a | grep Exited | awk '{print $1}' -**附图:** -## 02-====删除所有的容器,所有未运行的容器都被删除,正在运行的无法删除,达到删除不用容器的目的。 -## 03-**==低于****1.13****版本的****Docker**==,可以根据容器的状态来进行删除 -## 04-**==查询所有的容器,过滤出状态为****Exited**==的容器 -## 05-Docker 1.13**==版本以后,开始支持****prune**==命令,快速删除已退出的容器 +# 批量删除已停止容器 +sudo docker rm $(docker ps -a | grep Exited | awk '{print $1}') +``` - > 来自 <[https://blog.csdn.net/jiangeeq/article/details/79499324](https://blog.csdn.net/jiangeeq/article/details/79499324)> \ No newline at end of file +## 方法二:删除所有未运行的容器 + +```bash +# 删除所有未运行的容器 +sudo docker rm $(sudo docker ps -a -q) +``` + +## 方法三:根据容器状态删除(Docker 1.13+) + +```bash +# 删除所有 Exited 状态的容器 +sudo docker rm $(docker ps -qf status=exited) +``` + +参数说明: +- `-q`:只输出容器 ID +- `status=exited`:筛选已退出的容器 +- `status=created`:筛选已创建但未启动的容器 +- `status=running`:筛选正在运行的容器 + +## 方法四:docker container prune(Docker 1.13+ 推荐) + +```bash +# 删除所有已停止的容器(交互式确认) +docker container prune + +# 直接删除,不确认(适合脚本) +docker container prune -f +``` + +## 方法五:删除所有容器(谨慎使用) + +```bash +# 删除所有容器(包括运行中的) +docker rm -f $(docker ps -aq) + +# 仅删除已停止的容器 +docker container prune -f +``` + +## 完整流程示例 + +```bash +# 1. 查看当前容器状态 +docker ps -a + +# 2. 统计已停止容器数量 +docker ps -a | grep Exited | wc -l + +# 3. 批量删除已停止容器 +docker rm $(docker ps -aq -f status=exited) + +# 4. 确认删除结果 +docker ps -a +``` + +--- + +> Docker 1.13+ 版本建议使用 `docker container prune` 命令,更简洁安全。 diff --git a/Docker/安装docker-compose.md b/Docker/安装docker-compose.md index 8c4fdeb..939abbb 100755 --- a/Docker/安装docker-compose.md +++ b/Docker/安装docker-compose.md @@ -1,4 +1,70 @@ -## INSTALL AS A CONTAINER -## Compose can also be run inside a container, from a small bash script wrapper. To install compose as a container run this command: -sudo curl -L --fail [https://github.com/docker/compose/releases/download/1.25.4/run.sh](https://github.com/docker/compose/releases/download/1.25.4/run.sh) -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose - > 来自 <[https://docs.docker.com/compose/install/#alternative-install-options](https://docs.docker.com/compose/install/#alternative-install-options)> \ No newline at end of file +# 安装 Docker Compose + +## 方式一:作为容器运行(推荐) + +Docker Compose 可以作为容器运行,通过一个轻量级 bash 脚本调用。 + +```bash +# 下载并安装 +sudo curl -L --fail \ + https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m) \ + -o /usr/local/bin/docker-compose + +sudo chmod +x /usr/local/bin/docker-compose + +# 验证安装 +docker-compose --version +``` + +## 方式二:pip 安装 + +```bash +pip install docker-compose +``` + +## 方式三:standalone 二进制 + +```bash +# 下载指定版本 +COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d'"' -f4) + +curl -L \ + "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \ + -o /usr/local/bin/docker-compose + +chmod +x /usr/local/bin/docker-compose +``` + +## 快速使用 + +```yaml +# docker-compose.yml 示例 +version: '3.8' +services: + web: + image: nginx:latest + ports: + - "80:80" + db: + image: postgres:13 + environment: + POSTGRES_PASSWORD: secret +``` + +```bash +# 启动服务 +docker-compose up -d + +# 查看状态 +docker-compose ps + +# 查看日志 +docker-compose logs -f + +# 停止服务 +docker-compose down +``` + +--- + +> 参考:[Docker Compose 官方文档](https://docs.docker.com/compose/)