use

docker使用教程

本篇文章介绍如何使用docker(本教程以debian 12 为例)

Chinese | English

容器管理

  • 容器运行启动(指第一次启动):
# --run--
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

实例:

# --run--
docker run -d --name zfrpc --restart unless-stopped --network=host -v /opt/frp:/root/frp docker.wapyyds.online/zfrpc:latest  /usr/bin/zzfrpc  -c /root/frp/frpc.ini
这条命令是用于启动一个 Docker 容器的命令行。让我们逐步解析这个命令的每个部分:

docker run: 这是启动一个新容器的命令。

-d: 这个选项表示以守护进程(后台)模式运行容器。

--name zfrpc: 为容器指定一个名字,这里是 zfrpc。

--restart unless-stopped: 设置容器的重启策略,除非手动停止,否则容器会自动重启。

--network=host: 使用主机网络模式,这意味着容器将直接使用主机的网络栈,而不是使用 Docker 提供的网络隔离。

-v /opt/frp:/root/frp: 这是一个卷挂载的选项,将主机上的 /opt/frp 目录挂载到容器内的 /root/frp 目录。这允许容器访问主机上的文件。

docker.wapyyds.online/zfrpc:latest: 这是镜像的名称和标签。docker.wapyyds.online 可能是 Docker 镜像仓库的域名,zfrpc 是镜像名,latest 是标签,表示使用最新的版本。

/usr/bin/zzfrpc -c /root/frp/frpc.ini: 这是容器启动时要运行的命令。/usr/bin/zzfrpc 是可执行文件的路径,-c /root/frp/frpc.ini 表示使用 /root/frp/frpc.ini 文件作为配置文件。

综合起来,这条命令的作用是:

启动一个名为 zfrpc 的容器。
这个容器使用的是 docker.wapyyds.online/zfrpc:latest 镜像。
容器会以守护进程模式运行,并且在主机重启时自动启动。
使用主机的网络设置。
将主机的 /opt/frp 目录挂载到容器的 /root/frp 目录。
容器启动后运行 /usr/bin/zzfrpc 程序,并使用 /root/frp/frpc.ini 作为配置文件。
  • 启动容器(假设容器为zfrps):
# --run--
docker start zfrps
  • 查看容器列表:
# --run--
docker ps

正常情况下会显示:

root@wap71165234:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS      PORTS     NAMES
6621b48785de   09cef7155e69   "/usr/bin/zzfrps -c …"   3 weeks ago   Up 6 days             zzfrps
root@wap71165234:~# 
  • 停止容器:
# --run--
docker stop zfrps/6621b48785de 
  • 删除容器:
# --run--
docker rm zfrps/6621b48785de

镜像管理

  • 拉取镜像:
# --run--
docker pull docker.wapyyds.online/zfrps
  • 列出本地镜像:
# --run--
docker images

效果:

root@ser523415724883:~# docker images
REPOSITORY                          TAG       IMAGE ID       CREATED         SIZE
docker.wapyyds.online/zfrpc         latest    6a12c85a8aa6   9 days ago      51.7MB
docker.wapyyds.online/zfrps         latest    75587bc6e67d   9 days ago      39.2MB
docker.wapyyds.online/zfrps         <none>    09cef7155e69   4 weeks ago     28.4MB
docker.wapyyds.online/zzfrpc        latest    6c0e71326844   5 months ago    22.3MB
docker.wapyyds.online/zzxui         latest    91c231bc2448   6 months ago    73MB
ghcr.io/everythingsuckz/fsb         latest    04ac09ccc08b   9 months ago    37.8MB
docker.wapyyds.online/wapyyds/fsb   latest    04ac09ccc08b   9 months ago    37.8MB
jiangjuhong/dujiaoka                latest    aa2c00729664   11 months ago   1.36GB
docker.wapyyds.online/socks5        latest    176441c66e9b   4 years ago     17.1MB
  • 删除镜像:
# --run--
docker image rm  docker.wapyyds.online/zfrps

构建镜像

使用 Dockerfile 构建镜像:

创建 Dockerfile 文件

执行以下命令:

# --run--
docker build -t IMAGE_NAME:TAG

数据管理

  • 挂载卷:
# --run--
docker run -v /host/path:/container/path IMAGE

示例:

# --run--
docker run -v /data:/app/data ubuntu
  • 查看卷:
# --run--
docker volume ls

网络管理

  • 列出网络:
# --run--
docker network ls

正常会显示:

root@ser523415724883:~# docker network ls
NETWORK ID     NAME             DRIVER    SCOPE
9d4dd9a44341   1panel-network   bridge    local
ab5902d29611   bridge           bridge    local
cb29316bfe46   host             host      local
d6a025366669   none             null      local
  • 创建网络:
# --run--
docker network create NETWORK_NAME
  • 运行容器时指定网络:
# --run--
docker run --network NETWORK_NAME IMAGE

常用选项

  • -d:后台运行容器
  • --name:为容器指定名称
  • -p:映射端口,格式为 主机端口:容器端口
    示例:
# --run--
docker run -p 8080:80 nginx

--rm:容器退出后自动删除

进入运行中的容器

  • 使用 exec 命令:
# --run--
docker exec -it CONTAINER_ID bash
  • 使用 attach 命令:
# --run--
docker attach CONTAINER_ID

查看日志

  • 实时查看容器日志:
# --run--
docker logs -f CONTAINER_ID

实例:

# --run--
docker logs -f zzfrps

正常会显示:

root@wap71165234:~# docker logs -f zzfrps
2024-10-24 00:34:25.590 [I] [frps/root.go:105] frps uses config file: /etc/frp/frps.toml
2024-10-24 00:34:25.844 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:2333
2024-10-24 00:34:25.844 [I] [server/service.go:305] http service listen on 0.0.0.0:80
2024-10-24 00:34:25.844 [I] [server/service.go:319] https service listen on 0.0.0.0:443
2024-10-24 00:34:25.844 [I] [frps/root.go:114] frps started successfully
2024-10-24 00:34:25.846 [I] [server/service.go:351] dashboard listen on 0.0.0.0:3333
2024-10-24 00:35:06.261 [I] [server/service.go:576] [4a9b6702260870dd] client login info: ip [171.118.7.137:51650] version [0.36.2] hostname [] os [windows] arch [amd64]
2024-10-24 00:35:06.422 [I] [proxy/tcp.go:82] [4a9b6702260870dd] [admin.test] tcp proxy listen port [8888]
2024-10-24 00:35:06.422 [I] [server/control.go:399] [4a9b6702260870dd] new proxy [admin.test] type [tcp] success
2024-10-24 00:35:08.441 [I] [proxy/proxy.go:115] [4a9b6702260870dd] [admin.test] proxy closing
2024-10-24 00:35:08.441 [W] [proxy/proxy.go:201] [4a9b6702260870dd] [admin.test] listener is closed: accept tcp [::]:8888: use of closed network connection
2024-10-24 00:35:08.441 [I] [server/control.go:357] [4a9b6702260870dd] client exit success

导入与导出

导出容器为文件:

方法一:docker export

Warning

这种方法,可能会导致数据不一致。导出的 tar 文件不包含容器的元数据(如环
导出的 tar 文件不包含容器的元数据(如环境变量、网络配置等)

# --run--
docker export -o container.tar CONTAINER_ID

方法二:docker commit

Tip

这种方法导出包含容器的元数据(如环境变量、网络配置等)容器具有相对完整的状态!

例子:使用 docker commit 创建一个新的镜像,并使用 docker save 将其保存到 /root 目录

步骤1: 提交容器为新的镜像

使用 docker commit 命令将容器的状态保存为一个新的镜像。

# --run--
docker commit [容器ID或容器名称] [新镜像名称]:[标签]

例如,如果你的容器ID是 abc123,你可以这样做:

# --run--
docker commit abc123 mynewimage:latest
  • abc123 是你的容器ID
  • mynewimage 是你为新镜像起的名字
  • latest 是标签,可以根据需要更改
步骤 2: 保存镜像为 tar 文件

使用 docker save 命令将新创建的镜像保存为一个 tar 文件,并将其存放到 /root 目录。

# --run--
docker save -o /root/[文件名.tar] [镜像名称]:[标签]

例如:

# --run--
docker save -o /root/mynewimage.tar mynewimage:latest
  • -o /root/mynewimage.tar 指定了输出文件的路径和名称
  • mynewimage:latest 是你刚才提交的镜像名称和标签

导入为镜像:

使用 docker load 命令,导入本地 /root/mydocker.tar 镜像到 Docker:

使用 docker load 命令将 tar 文件导入到 Docker 中:

# --run--
docker load -i /root/mydocker.tar
  • -i 选项指定输入文件的路径,这里是 /root/mydocker.tar

示例输出:

当你运行 docker load -i /root/mydocker.tar 时,可能会看到类似以下的输出:

Loaded image: mynewimage:latest

这表示 mynewimage:latest 镜像已经被成功加载到 Docker 中。

验证导入:

你可以使用 docker images 命令来验证镜像是否已经导入:

# --run--
docker images

这会列出所有当前在 Docker 中可用的镜像,包括你刚导入的镜像。

清理无用资源

  • 删除停止的容器:
# --run--
docker container prune
  • 删除未使用的镜像:
# --run--
docker image prune

我的个人网站 仔仔引导页, 当然还有我的个人blog ZZのBlog.

赞助:Img