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,分别是
ipvlan
macvlan
但是这两种方式在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
所以不要折腾了,等官方支持吧