mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 16:37:34 +00:00
Update Grafana to v13, add version notes
This commit is contained in:
+18
-16
@@ -29,6 +29,8 @@ Hello world
|
||||
```
|
||||
这与直接执行 `/bin/echo 'Hello world'` 几乎没有区别,但实际上已经启动了一个完整的 Ubuntu 容器来执行这条命令。
|
||||
|
||||
> **版本说明**:示例使用 `ubuntu:24.04`,这是最新 LTS 版本。如需其他版本,可替换为 `ubuntu:22.04`、`ubuntu:20.04` 等。
|
||||
|
||||
#### 交互式容器
|
||||
|
||||
启动一个可以交互的 bash 终端:
|
||||
@@ -82,25 +84,25 @@ flowchart TD
|
||||
|
||||
| 选项 | 说明 | 示例 |
|
||||
|------|------|------|
|
||||
| `-d` | 后台运行 (detach)| `docker run -d nginx` |
|
||||
| `-it` | 交互式终端 | `docker run -it ubuntu bash` |
|
||||
| `--name` | 指定容器名称 | `docker run --name myapp nginx` |
|
||||
| `--rm` | 退出后自动删除容器 | `docker run --rm ubuntu echo hi` |
|
||||
| `-d` | 后台运行 (detach)| `docker run -d nginx:latest` |
|
||||
| `-it` | 交互式终端 | `docker run -it ubuntu:24.04 bash` |
|
||||
| `--name` | 指定容器名称 | `docker run --name myapp nginx:latest` |
|
||||
| `--rm` | 退出后自动删除容器 | `docker run --rm ubuntu:24.04 echo hi` |
|
||||
|
||||
#### 端口映射
|
||||
|
||||
```bash
|
||||
## 将容器的 80 端口映射到宿主机的 8080 端口
|
||||
|
||||
$ docker run -d -p 8080:80 nginx
|
||||
$ docker run -d -p 8080:80 nginx:latest
|
||||
|
||||
## 随机映射端口
|
||||
|
||||
$ docker run -d -P nginx
|
||||
$ docker run -d -P nginx:latest
|
||||
|
||||
## 只绑定到 localhost
|
||||
|
||||
$ docker run -d -p 127.0.0.1:8080:80 nginx
|
||||
$ docker run -d -p 127.0.0.1:8080:80 nginx:latest
|
||||
```
|
||||
|
||||
#### 数据卷挂载
|
||||
@@ -108,15 +110,15 @@ $ docker run -d -p 127.0.0.1:8080:80 nginx
|
||||
```bash
|
||||
## 挂载命名卷
|
||||
|
||||
$ docker run -v mydata:/data nginx
|
||||
$ docker run -v mydata:/data nginx:latest
|
||||
|
||||
## 挂载宿主机目录
|
||||
|
||||
$ docker run -v /host/path:/container/path nginx
|
||||
$ docker run -v /host/path:/container/path nginx:latest
|
||||
|
||||
## 只读挂载
|
||||
|
||||
$ docker run -v /host/path:/container/path:ro nginx
|
||||
$ docker run -v /host/path:/container/path:ro nginx:latest
|
||||
```
|
||||
|
||||
#### 环境变量
|
||||
@@ -136,11 +138,11 @@ $ docker run --env-file .env myapp
|
||||
```bash
|
||||
## 限制内存
|
||||
|
||||
$ docker run -m 512m nginx
|
||||
$ docker run -m 512m nginx:latest
|
||||
|
||||
## 限制 CPU
|
||||
|
||||
$ docker run --cpus=1.5 nginx
|
||||
$ docker run --cpus=1.5 nginx:latest
|
||||
```
|
||||
|
||||
### 5.1.5 启动已终止容器
|
||||
@@ -186,11 +188,11 @@ root@ba267838cc1b:/# ps
|
||||
```bash
|
||||
## 这个容器会立即退出(echo 执行完就结束了)
|
||||
|
||||
$ docker run ubuntu echo "hello"
|
||||
$ docker run ubuntu:24.04 echo "hello"
|
||||
|
||||
## 解决:使用能持续运行的命令
|
||||
|
||||
$ docker run -d nginx # nginx 是持续运行的服务
|
||||
$ docker run -d nginx:latest # nginx 是持续运行的服务
|
||||
```
|
||||
详细解释见[后台运行](5.2_daemon.md)。
|
||||
|
||||
@@ -201,11 +203,11 @@ $ docker run -d nginx # nginx 是持续运行的服务
|
||||
```bash
|
||||
## 错误:没有 -p 参数,外部无法访问
|
||||
|
||||
$ docker run -d nginx
|
||||
$ docker run -d nginx:latest
|
||||
|
||||
## 正确:映射端口
|
||||
|
||||
$ docker run -d -p 80:80 nginx
|
||||
$ docker run -d -p 80:80 nginx:latest
|
||||
```
|
||||
|
||||
#### Q:容器内修改的文件丢失
|
||||
|
||||
@@ -122,17 +122,19 @@ $ docker container ls -a
|
||||
```bash
|
||||
## Web 服务器
|
||||
|
||||
$ docker run -d -p 80:80 nginx
|
||||
$ docker run -d -p 80:80 nginx:latest
|
||||
|
||||
## 数据库
|
||||
|
||||
$ docker run -d -p 3306:3306 mysql:8
|
||||
$ docker run -d -p 3306:3306 mysql:8.0
|
||||
|
||||
## 缓存服务
|
||||
|
||||
$ docker run -d -p 6379:6379 redis
|
||||
$ docker run -d -p 6379:6379 redis:latest
|
||||
```
|
||||
|
||||
> **版本说明**:示例使用常见的标签如 `latest` 或稳定大版本号如 `mysql:8.0`。具体版本可根据需求调整,生产环境建议明确指定版本号(如 `mysql:8.0.35`)而非使用 `latest`。
|
||||
|
||||
#### 2. 调试时先用前台模式
|
||||
|
||||
当容器启动有问题时,**去掉 `-d` 参数** 可以直接看到输出和错误:
|
||||
@@ -140,7 +142,7 @@ $ docker run -d -p 6379:6379 redis
|
||||
```bash
|
||||
## 有问题的容器,先前台运行看看发生了什么
|
||||
|
||||
$ docker run myimage:latest
|
||||
$ docker run myimage:v1.0.0
|
||||
```
|
||||
|
||||
#### 3. 使用 --rm 自动清理
|
||||
@@ -161,7 +163,7 @@ Hello, World!
|
||||
```bash
|
||||
## 后台启动
|
||||
|
||||
$ docker run -d --name myapp myimage:latest
|
||||
$ docker run -d --name myapp myimage:v1.0.0
|
||||
|
||||
## 查看最近 100 行日志
|
||||
|
||||
@@ -194,7 +196,7 @@ $ docker logs -t myapp
|
||||
|
||||
3. **以交互模式调试**:
|
||||
```bash
|
||||
$ docker run -it myimage:latest /bin/sh
|
||||
$ docker run -it myimage:v1.0.0 /bin/sh
|
||||
# 进入容器手动执行命令,查找问题
|
||||
|
||||
```
|
||||
|
||||
@@ -204,7 +204,7 @@ $ docker stop $(docker ps -q) && docker container prune -f
|
||||
```dockerfile
|
||||
## Dockerfile 示例
|
||||
|
||||
FROM node:22
|
||||
FROM node:22-alpine
|
||||
...
|
||||
|
||||
## 使用 exec 形式确保信号能传递给 node 进程
|
||||
@@ -212,6 +212,8 @@ FROM node:22
|
||||
CMD ["node", "server.js"]
|
||||
```
|
||||
|
||||
> **版本说明**:示例使用 `node:22-alpine`,这是一个精简的 Node.js 22 版本镜像。可根据需求替换为其他版本(如 `node:20-alpine`、`node:latest`)。
|
||||
|
||||
#### Q:容器无法停止
|
||||
|
||||
```bash
|
||||
|
||||
@@ -13,6 +13,8 @@ $ docker export 7691a814370e > ubuntu.tar
|
||||
```
|
||||
这样将导出容器快照到本地文件。
|
||||
|
||||
> **版本说明**:导出的容器快照不包含镜像版本历史,导入时可以自定义标签和版本号。
|
||||
|
||||
### 5.5.2 导入容器快照
|
||||
|
||||
可以使用 `docker import` 从容器快照文件中再导入为镜像,例如
|
||||
|
||||
@@ -6,6 +6,16 @@
|
||||
|
||||
本章将具体介绍如何来管理一个容器,包括创建、启动和停止等。
|
||||
|
||||
## 版本号说明
|
||||
|
||||
本章示例涉及多个 Docker 镜像,遵循以下版本号最佳实践:
|
||||
|
||||
- **官方镜像**(如 `ubuntu`、`nginx`、`mysql`):使用具体大版本号(如 `ubuntu:24.04`、`mysql:8.0`)而非 `latest`,确保示例的可重复性
|
||||
- **镜像标签约定**:
|
||||
- `latest` 或 `v1.0.0` 等:带标签的自定义镜像,示例中指定具体版本
|
||||
- `24.04`、`8.0`:官方镜像的稳定版本分支
|
||||
- 生产环境建议:指定精确版本号(如 `nginx:1.24.0`、`mysql:8.0.35`)而非仅大版本号
|
||||
|
||||
* [启动容器](5.1_run.md)
|
||||
* [守护态运行](5.2_daemon.md)
|
||||
* [终止容器](5.3_stop.md)
|
||||
|
||||
Reference in New Issue
Block a user