docker使用教程
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.
赞助: