docker命令总结
文章目录
- 一、命令
- 1.1 将容器提交为新的镜像 (`docker commit`)
- 1.2 将镜像保存为 tar 文件 (`docker save`)
- 1.3 从 tar 文件加载镜像 (`docker load`)
- 1.4 查看镜像列表
- 1.5 查看容器列表
- 1.6 运行容器
- 1.7 停止/重启容器(可选操作)
- 1.8 拉取 Nginx 镜像
- 二、问题
- 2.1 systemd 无法使用
- 2.2 nfs的使用
- 2.3 windows下Docker Desktop的ipvlan、macvlan使用
docker 命令的总结,会
持续更新
一、命令
1.1 将容器提交为新的镜像 (docker commit)
-
命令格式
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]。CONTAINER : 要提交的容器名称或 ID。
[REPOSITORY[:TAG]] : 为新创建的镜像指定仓库名和标签 -
示例
docker commit my_container my_new_image:snapshot
1.2 将镜像保存为 tar 文件 (docker save)
-
命令格式
docker save [OPTIONS] IMAGE [IMAGE...] > output.tar # 或 docker save [OPTIONS] -o output.tar IMAGE [IMAGE...]IMAGE: 可以是镜像的名称:标签、镜像 ID 或 digest(使用 docker images 查看)可以同时保存多个镜像到一个 tar 文件
output.tar: 保存的 tar 文件名(路径)。 -
示例
docker save my_new_image:snapshot > my_image_backup.tar # 或 docker save -o my_image_backup.tar my_new_image:snapshot
1.3 从 tar 文件加载镜像 (docker load)
-
命令格式
docker load [OPTIONS]通常从标准输入读取 tar 文件内容。使用 < 操作符或 -i 选项指定文件。
-
示例
docker load < my_image_backup.tar # 或 docker load -i my_image_backup.tar
1.4 查看镜像列表
docker images [选项]
# 或等价命令(推荐新手记忆):
docker image ls [选项]
常用选项:
-a/--all:显示所有镜像(包括中间层镜像,默认仅显示顶层)。-q/--quiet:仅显示镜像 ID(Quiet 模式)。--filter/-f:过滤镜像(例如docker images -f "dangling=true"显示无标签的悬空镜像)。
1.5 查看容器列表
# 查看运行中的容器
docker ps [选项]
# 等价命令:
docker container ps [选项]# 查看所有容器(包括已停止的)
docker ps -a [选项]
# 等价命令:
docker container ps -a [选项]
常用选项:
-a/--all:显示所有容器(包括停止、退出的)。-q/--quiet:仅显示容器 ID。-n <数字>/--last <数字>:显示最近创建的 N 个容器(例如-n 3显示最近 3 个)。-f "状态条件":过滤容器(例如docker ps -f "status=exited"显示已退出的容器)。
1.6 运行容器
docker run [选项] 镜像名 [命令] [参数]
# 等价命令:
docker container run [选项] 镜像名 [命令] [参数]
核心选项(最常用):
-
-d/--detach:后台运行容器( detached 模式,默认前台运行)。 -
-p <主机端口>:<容器端口>:端口映射(例如-p 8080:80将主机 8080 端口映射到容器 80 端口)。 -
-v <主机路径>:<容器路径>:文件/目录挂载(例如-v /data:/app/data将主机/data目录挂载到容器的/app/data)。 -
--name <容器名>:为容器指定自定义名称(默认随机生成)。 -
-e <环境变量>:设置容器内环境变量(例如-e MYSQL_ROOT_PASSWORD=123456)。示例
docker run -d \--name my-nginx \ # 自定义容器名-p 8080:80 \ # 主机 8080 端口 → 容器 80 端口(Nginx 默认端口)-v /home/user/nginx/html:/usr/share/nginx/html \ # 挂载主机目录到容器(可选)nginx:latest # 镜像名+版本
1.7 停止/重启容器(可选操作)
docker stop my-nginx # 停止容器
docker start my-nginx # 重启容器
1.8 拉取 Nginx 镜像
docker pull nginx:latest # 拉取最新版 Nginx 镜像
二、问题
2.1 systemd 无法使用
System has not been booted with systemd as init system (PID 1). Can’t operate.
- 需要镜像里面有
systemd的安装包 没安装不能使用
docker run -it --privileged --entrypoint /lib/systemd/systemd --name test 100askimx6ullubuntu:18.04
主要是要有这个命令 --privileged --entrypoint /lib/systemd/systemd
--privileged:使用特权模式
--entrypoint /lib/systemd/systemd:初始化 systemd作为主进程
-
如果使用了 vsocde的.devcontainer 需要加上
“overrideCommand”: false, // 禁用 VS Code 默认覆盖 entrypoint(核心修复)
2.2 nfs的使用
如果在 windows 上面安装的docker 不要想在docker 容器里面nfs的服务器了,因为nfs服务器需要
2049、111这两个端口,111端口是RPC的转发端口,一般是有两种方式解决端口问题
-
把windows 的
111端口映射出来,会和windows自带的端口产生 冲突 , -
修改
rpc的端口,系统的很多服务都有使用RPC,会导致系统崩溃 -
把
windwos其他端口(2060)映射到容器的111端口,在客户端也就是挂载的时候,mount这个命令找不到指定
rpc端口的指令 -
那么只有一个方法,也就是让docker的容器独立IP出来,这样网络环境就像一个物理机一样
在docker当中,有两种方式可以实现容器独立IP,分别是
ipvlanmacvlan但是这两种方式在windows下面的Docker Desktop 都不适用
想了解情况看下下面
2.3 windows下Docker Desktop的ipvlan、macvlan使用
官方论坛说了 ipvlan和macvlan是适用于linux内核的,并不适用windows
相关论坛主题:Docker Windows - Cannot create ipvlan on other then eth0 - wsl2 interface mirroring active - Docker Engine / General - Docker Community Forums
Macvlan, transparent, and host netowork types? - Docker Desktop - Docker Community Forums

所以不要折腾了,等官方支持吧
