mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-25 03:05:32 +00:00
Add blank lines before headers
This commit is contained in:
@@ -92,6 +92,7 @@ flowchart TD
|
||||
#### 端口映射
|
||||
|
||||
```bash
|
||||
|
||||
## 将容器的 80 端口映射到宿主机的 8080 端口
|
||||
|
||||
$ docker run -d -p 8080:80 nginx
|
||||
@@ -108,6 +109,7 @@ $ docker run -d -p 127.0.0.1:8080:80 nginx
|
||||
#### 数据卷挂载
|
||||
|
||||
```bash
|
||||
|
||||
## 挂载命名卷
|
||||
|
||||
$ docker run -v mydata:/data nginx
|
||||
@@ -124,6 +126,7 @@ $ docker run -v /host/path:/container/path:ro nginx
|
||||
#### 环境变量
|
||||
|
||||
```bash
|
||||
|
||||
## 设置单个环境变量
|
||||
|
||||
$ docker run -e MYSQL_ROOT_PASSWORD=secret mysql
|
||||
@@ -136,6 +139,7 @@ $ docker run --env-file .env myapp
|
||||
#### 资源限制
|
||||
|
||||
```bash
|
||||
|
||||
## 限制内存
|
||||
|
||||
$ docker run -m 512m nginx
|
||||
@@ -150,6 +154,7 @@ $ docker run --cpus=1.5 nginx
|
||||
使用 `docker start` 重新启动已停止的容器:
|
||||
|
||||
```bash
|
||||
|
||||
## 查看所有容器(包括已停止的)
|
||||
|
||||
$ docker ps -a
|
||||
@@ -187,6 +192,7 @@ root@ba267838cc1b:/# ps
|
||||
**原因**:主进程执行完毕或无法保持运行
|
||||
|
||||
```bash
|
||||
|
||||
## 这个容器会立即退出(echo 执行完就结束了)
|
||||
|
||||
$ docker run ubuntu echo "hello"
|
||||
@@ -203,6 +209,7 @@ $ docker run -d nginx # nginx 是持续运行的服务
|
||||
**原因**:未正确映射端口
|
||||
|
||||
```bash
|
||||
|
||||
## 错误:没有 -p 参数,外部无法访问
|
||||
|
||||
$ docker run -d nginx
|
||||
@@ -217,6 +224,7 @@ $ docker run -d -p 80:80 nginx
|
||||
**原因**:未使用数据卷,数据保存在容器存储层
|
||||
|
||||
```bash
|
||||
|
||||
## 使用数据卷持久化
|
||||
|
||||
$ docker run -v mydata:/app/data myapp
|
||||
|
||||
@@ -126,6 +126,7 @@ $ docker container ls -a
|
||||
#### 1. 长期运行的服务使用 -d
|
||||
|
||||
```bash
|
||||
|
||||
## Web 服务器
|
||||
|
||||
$ docker run -d -p 80:80 nginx
|
||||
@@ -144,6 +145,7 @@ $ docker run -d -p 6379:6379 redis
|
||||
当容器启动有问题时,**去掉 `-d` 参数** 可以直接看到输出和错误:
|
||||
|
||||
```bash
|
||||
|
||||
## 有问题的容器,先前台运行看看发生了什么
|
||||
|
||||
$ docker run myimage:latest
|
||||
@@ -156,6 +158,7 @@ $ docker run myimage:latest
|
||||
```bash
|
||||
$ docker run --rm ubuntu:24.04 echo "Hello, World!"
|
||||
Hello, World!
|
||||
|
||||
## 容器执行完后自动删除
|
||||
|
||||
...
|
||||
@@ -164,6 +167,7 @@ Hello, World!
|
||||
#### 4. 配合日志查看
|
||||
|
||||
```bash
|
||||
|
||||
## 后台启动
|
||||
|
||||
$ docker run -d --name myapp myimage:latest
|
||||
|
||||
@@ -34,6 +34,7 @@ flowchart TD
|
||||
#### 自定义超时时间
|
||||
|
||||
```bash
|
||||
|
||||
## 等待 30 秒后强制终止
|
||||
|
||||
$ docker stop -t 30 mycontainer
|
||||
@@ -46,6 +47,7 @@ $ docker stop -t 0 mycontainer
|
||||
#### 停止多个容器
|
||||
|
||||
```bash
|
||||
|
||||
## 停止多个指定容器
|
||||
|
||||
$ docker stop container1 container2 container3
|
||||
@@ -75,6 +77,7 @@ $ docker kill 容器名或ID
|
||||
#### 发送自定义信号
|
||||
|
||||
```bash
|
||||
|
||||
## 发送 SIGHUP(让进程重新加载配置)
|
||||
|
||||
$ docker kill -s HUP mycontainer
|
||||
@@ -91,6 +94,7 @@ $ docker kill -s TERM mycontainer
|
||||
容器的生命周期与主进程绑定。主进程退出时,容器自动停止:
|
||||
|
||||
```bash
|
||||
|
||||
## 主进程是交互式 bash
|
||||
|
||||
$ docker run -it ubuntu bash
|
||||
@@ -139,6 +143,7 @@ $ docker start -ai 容器名
|
||||
#### 重启运行中的容器
|
||||
|
||||
```bash
|
||||
|
||||
## 先停止再启动
|
||||
|
||||
$ docker restart 容器名
|
||||
@@ -209,10 +214,12 @@ $ docker stop $(docker ps -q) && docker container prune -f
|
||||
确保容器主进程正确处理信号:
|
||||
|
||||
```dockerfile
|
||||
|
||||
## Dockerfile 示例
|
||||
|
||||
FROM node:22
|
||||
...
|
||||
|
||||
## 使用 exec 形式确保信号能传递给 node 进程
|
||||
|
||||
CMD ["node", "server.js"]
|
||||
@@ -221,6 +228,7 @@ CMD ["node", "server.js"]
|
||||
#### Q:容器无法停止
|
||||
|
||||
```bash
|
||||
|
||||
## 强制终止
|
||||
|
||||
$ docker kill 容器名
|
||||
|
||||
@@ -27,6 +27,7 @@ Docker 提供两种进入容器的命令:
|
||||
#### docker exec 基本用法
|
||||
|
||||
```bash
|
||||
|
||||
## 进入容器并启动交互式 shell
|
||||
|
||||
$ docker exec -it 容器名 /bin/bash
|
||||
@@ -50,6 +51,7 @@ $ docker exec -it 容器名 /bin/sh
|
||||
#### docker exec 示例
|
||||
|
||||
```bash
|
||||
|
||||
## 启动一个后台容器
|
||||
|
||||
$ docker run -dit --name myubuntu ubuntu
|
||||
@@ -74,6 +76,7 @@ CONTAINER ID IMAGE STATUS NAMES
|
||||
不进入交互模式,直接执行命令:
|
||||
|
||||
```bash
|
||||
|
||||
## 查看容器内进程
|
||||
|
||||
$ docker exec myubuntu ps aux
|
||||
@@ -90,6 +93,7 @@ $ docker exec -u root myubuntu apt update
|
||||
#### 只用 -i 不用 -t 的区别
|
||||
|
||||
```bash
|
||||
|
||||
## 只用 -i:可以执行命令,但没有提示符
|
||||
|
||||
$ docker exec -i myubuntu bash
|
||||
@@ -135,6 +139,7 @@ flowchart LR
|
||||
#### docker attach 示例
|
||||
|
||||
```bash
|
||||
|
||||
## 启动容器
|
||||
|
||||
$ docker run -dit --name myubuntu ubuntu
|
||||
@@ -168,6 +173,7 @@ CONTAINER ID IMAGE STATUS NAMES
|
||||
```bash
|
||||
$ docker attach myubuntu
|
||||
root@243c32535da7:/#
|
||||
|
||||
## 按 Ctrl+P 然后 Ctrl+Q
|
||||
|
||||
read escape sequence
|
||||
@@ -221,6 +227,7 @@ flowchart LR
|
||||
#### 1. 首选 docker exec
|
||||
|
||||
```bash
|
||||
|
||||
## 进入容器调试
|
||||
|
||||
$ docker exec -it myapp bash
|
||||
@@ -247,6 +254,7 @@ $ docker exec myapp python manage.py migrate
|
||||
某些精简镜像 (如基于 `scratch` 或 `distroless`) 没有 shell:
|
||||
|
||||
```bash
|
||||
|
||||
## 这会失败
|
||||
|
||||
$ docker exec -it myapp bash
|
||||
|
||||
@@ -32,6 +32,7 @@ mycontainer
|
||||
#### 强制删除运行中的容器
|
||||
|
||||
```bash
|
||||
|
||||
## 不加 -f 会报错
|
||||
|
||||
$ docker rm running_container
|
||||
@@ -48,6 +49,7 @@ running_container
|
||||
#### 删除容器及其数据卷
|
||||
|
||||
```bash
|
||||
|
||||
## 删除容器时同时删除其匿名卷
|
||||
|
||||
$ docker rm -v mycontainer
|
||||
@@ -62,6 +64,7 @@ $ docker rm -v mycontainer
|
||||
#### 删除所有已停止的容器
|
||||
|
||||
```bash
|
||||
|
||||
## 方式一:使用 prune 命令(推荐)
|
||||
|
||||
$ docker container prune
|
||||
@@ -81,6 +84,7 @@ $ docker container prune -f
|
||||
#### 删除所有容器:包括运行中的
|
||||
|
||||
```bash
|
||||
|
||||
## 先停止所有容器,再删除
|
||||
|
||||
$ docker stop $(docker ps -q)
|
||||
@@ -94,6 +98,7 @@ $ docker rm -f $(docker ps -aq)
|
||||
#### 按条件删除
|
||||
|
||||
```bash
|
||||
|
||||
## 删除所有已退出的容器
|
||||
|
||||
$ docker rm $(docker ps -aq -f status=exited)
|
||||
@@ -125,6 +130,7 @@ $ docker container prune --filter "until=24h"
|
||||
#### 示例
|
||||
|
||||
```bash
|
||||
|
||||
## 删除所有基于 nginx 镜像的容器
|
||||
|
||||
$ docker rm $(docker ps -aq -f ancestor=nginx)
|
||||
@@ -141,6 +147,7 @@ $ docker rm $(docker ps -aq -f status=created)
|
||||
> 有容器依赖的镜像无法删除。
|
||||
|
||||
```bash
|
||||
|
||||
## 尝试删除有容器依赖的镜像
|
||||
|
||||
$ docker image rm nginx
|
||||
@@ -159,6 +166,7 @@ $ docker image rm nginx
|
||||
#### 开发环境
|
||||
|
||||
```bash
|
||||
|
||||
## 定期清理已停止的容器
|
||||
|
||||
$ docker container prune -f
|
||||
@@ -171,9 +179,11 @@ $ docker system prune -f
|
||||
#### 生产环境
|
||||
|
||||
```bash
|
||||
|
||||
## 使用 --rm 参数运行临时容器
|
||||
|
||||
$ docker run --rm ubuntu echo "Hello"
|
||||
|
||||
## 容器退出后自动删除
|
||||
|
||||
## 定期清理(设置保留时间)
|
||||
@@ -185,6 +195,7 @@ $ docker container prune --filter "until=168h" # 保留 7 天内的
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
## cleanup.sh - Docker 资源清理脚本
|
||||
|
||||
echo "清理已停止的容器..."
|
||||
@@ -218,6 +229,7 @@ Error: container is running
|
||||
```bash
|
||||
$ docker stop mycontainer
|
||||
$ docker rm mycontainer
|
||||
|
||||
## 或
|
||||
|
||||
$ docker rm -f mycontainer
|
||||
@@ -234,6 +246,7 @@ $ docker rm -f mycontainer
|
||||
解决:
|
||||
|
||||
```bash
|
||||
|
||||
## 查看空间占用
|
||||
|
||||
$ docker system df
|
||||
|
||||
Reference in New Issue
Block a user