docker基本操作:【查看镜像、导出/加载(save/load)镜像、修改镜像名称】【导出/加载(export/import)容器】【从容器创建(commit)镜像】【向容器中复制文件】
首先,你可以使用命令查看本地已有的镜像。
一、镜像操作
1. 查看现有镜像
首先,你可以使用 docker images
命令查看本地已有的镜像。
docker images
2. 导出镜像
使用 docker save
命令将镜像导出为一个 tar 文件。例如,将 ubuntu
镜像导出为 ubuntu_image.tar
:
docker save -o ubuntu_image.tar ubuntu:latest
这里,-o
用来指定导出文件的名称,ubuntu
是镜像的名称。
3. 导出多个镜像
如果你需要导出多个镜像,可以在命令中指定多个镜像名。例如:
docker save -o multi_images.tar ubuntu alpine nginx
4. 导出镜像并压缩
如果想直接导出并压缩,可以通过管道将镜像保存到 gzip
文件中。例如:
docker save ubuntu | gzip > ubuntu_image.tar.gz
5. 导出的镜像加载
如果你想将导出的镜像加载到另一台机器上,可以使用 docker load
命令:
docker load -i ubuntu_image.tar
6. 修改镜像名称和标签
使用 docker tag
命令可以修改镜像的标签(tag)或者名称。其语法为:
docker tag <原镜像ID或原镜像名称>:<原标签> <新镜像名称>:<新标签>
例如,如果加载后的镜像名称为 ubuntu
,标签为 latest
,并且你想把它的标签改为 v1.0
,可以使用以下命令:
docker tag ubuntu:latest my_ubuntu:v1.0
如果你不再需要旧的镜像名称或标签,可以使用 docker rmi
命令删除旧的镜像。例如:
docker rmi ubuntu:latest
二、容器操作
1、导出容器
将容器 my_container
导出为 my_container.tar
:
docker export -o my_container.tar my_container
2、通过导出的文件生成新镜像:
docker import my_container.tar new_image:latest
三、区别
在 Docker 中,docker save
和 docker export
是两个用于导出数据的命令,但它们有不同的用途和特点。以下是两者的区别:
1. 用途不同
-
docker save
用于导出 镜像(image),包括该镜像的所有层(layers)和元数据(metadata)。可以将镜像移动到其他机器上,再通过docker load
恢复使用。 -
docker export
用于导出 容器(container) 的文件系统。不会包含镜像的层信息或元数据,导出后得到的只是一个容器的文件系统快照。
2. 导出内容不同
-
docker save
- 包含镜像的所有层(Layers)。
- 包含镜像的元数据,例如标签(tags)和历史信息。
- 是镜像的完整打包,可以通过
docker load
恢复成一个镜像。
-
docker export
- 只包含容器运行时的文件系统快照。
- 不包含镜像的元数据。
- 导出的内容无法直接恢复成镜像,只能解压使用或通过
docker import
重新生成镜像。
3. 使用场景不同
-
docker save
- 用于迁移镜像。
- 通常用来分享镜像或将镜像备份后传输到其他 Docker 主机。
-
docker export
- 用于备份或提取容器的文件系统。
- 可以在容器中运行一些配置后,导出容器的文件系统用于进一步的定制或部署。
4. 配套命令不同
-
docker save
- 导出的文件可以通过
docker load
恢复。
- 导出的文件可以通过
-
docker export
- 导出的文件可以通过
docker import
转换为镜像,或者直接解压使用。
- 导出的文件可以通过
5. 关键区别总结表格
特性 | docker save | docker export |
---|---|---|
作用对象 | 镜像(Image) | 容器(Container) |
包含内容 | 镜像的所有层和元数据 | 容器的文件系统 |
恢复方式 | 使用 docker load | 使用 docker import |
常见用途 | 镜像备份、迁移 | 容器文件系统快照 |
是否包含元数据 | 是 | 否 |
四、从容器生成新的镜像文件
步骤 1:确认容器正在运行
查看正在运行的容器,确保你已经对目标容器做了需要的修改。
docker ps
假设容器的名称是 my_container
。
步骤 2:创建新的镜像
使用 docker commit
命令将容器的当前状态保存为一个新的镜像。
docker commit my_container new_image_name:new_tag
my_container
是容器名称或 ID。new_image_name:new_tag
是你为新镜像指定的名称和标签。例如:
docker commit my_container my_custom_image:latest
步骤 3:验证新的镜像
运行以下命令查看新生成的镜像:
docker images
在输出中,你应该可以看到名称为 my_custom_image
的新镜像。
步骤 4:保存新镜像(可选)
如果需要导出新镜像为文件,可以使用 docker save
命令:
docker save -o my_custom_image.tar my_custom_image:latest
这个文件可以传输到其他机器,并通过 docker load
恢复。
步骤 5:测试新镜像(可选)
为了确保新镜像正常运行,可以基于新镜像启动一个新的容器:
docker run -it my_custom_image:latest
五、向docker容器中复制文件
1. 使用 docker cp
命令
docker cp
命令可以将主机上的文件或目录复制到容器内部,或者从容器内部复制到主机。
命令语法
docker cp <源路径> <容器名称或ID>:<目标路径>
<源路径>
:主机上的文件或目录。<容器名称或ID>
:目标容器的名称或 ID。<目标路径>
:容器内部的目标路径。
示例
将主机上的 example.txt
文件复制到容器的 /app
目录:
docker cp /path/to/example.txt <容器名称或ID>:/app
2. 复制整个目录
如果要复制一个目录到容器内部,可以指定目录路径。
示例
将主机上的 /local/directory
复制到容器的 /container/directory
:
docker cp /local/directory <容器名称或ID>:/container/directory
- 如果容器的目标路径不存在,Docker 会自动创建它。
- 如果目标路径已存在且是目录,文件将被复制到该目录下。
3. 从容器内部复制文件到主机
可以将容器内部的文件或目录复制到主机上。
命令示例
将容器中的 /app/example.txt
复制到主机的 /path/to/
目录:
docker cp <容器名称或ID>:/app/example.txt /path/to/
4. 在容器内使用文件
如果文件已经复制到容器中,可以进入容器并检查文件:
docker exec -it <容器名称或ID> bash
进入容器后,导航到目标目录并检查文件:
cd /app
ls
5. 注意事项
-
容器状态:
docker cp
不要求容器处于运行状态,即使容器停止,也可以将文件复制进去或取出来。
-
权限问题:
- 如果复制到容器内部的文件需要特定权限,可以使用以下命令在容器内部调整权限:
chmod 755 /app/example.txt
6. 其他方法:通过 docker exec
和 curl
/wget
如果文件较大,或者需要在容器内部直接下载文件,可以使用 docker exec
进入容器并下载文件。
进入容器后使用 wget
或 curl
:
docker exec -it <容器名称或ID> bash
wget http://example.com/file.txt -O /app/file.txt
六、docker run参数
基础选项
参数 | 作用 |
---|---|
--name | 为容器指定一个名称,便于管理和识别。 |
--rm | 容器退出后自动删除,适合短期任务的容器。 |
-d | 后台运行容器(即守护模式)。 |
-it | 交互式模式启动容器,并附加一个伪终端(适合运行需要交互的程序)。 |
-a | 指定容器的标准输入输出内容,选项有 stdin 、stdout 、stderr 。 |
--restart | 设置容器的重启策略(如 no 、always 、on-failure 、unless-stopped )。 |
网络相关选项
参数 | 作用 |
---|---|
--network | 指定容器使用的网络模式(如 bridge 、host 、none 或自定义网络)。 |
-p | 将容器端口映射到主机端口,格式为 主机端口:容器端口 。 |
-P | 自动将容器的所有暴露端口映射到主机的随机端口。 |
--ip | 为容器分配指定的 IP 地址(适用于自定义网络)。 |
--dns | 设置容器的 DNS 服务器。 |
--mac-address | 为容器指定 MAC 地址。 |
--hostname | 设置容器的主机名(Hostname)。 |
--add-host | 添加自定义主机到容器的 /etc/hosts 文件,例如 myhost:127.0.0.1 。 |
存储相关选项
参数 | 作用 |
---|---|
-v 或 --volume | 挂载主机目录或数据卷到容器中,格式为 主机目录:容器目录 。 |
--mount | 更高级的挂载选项,支持多种存储后端和权限设置。 |
--tmpfs | 将目录挂载为临时文件系统(仅在容器内存中存在)。 |
--read-only | 以只读模式运行容器。 |
--volume-driver | 指定容器使用的卷驱动程序。 |
资源限制选项
参数 | 作用 |
---|---|
--cpu-shares | 为容器分配相对 CPU 份额(权重值)。 |
--cpus | 限制容器使用的 CPU 数量(如 1.5 表示 1.5 个核心)。 |
--memory | 限制容器的内存使用量(如 512m 或 1g )。 |
--memory-swap | 限制内存和交换空间总和的最大值。 |
--oom-kill-disable | 禁止在内存不足时杀死容器进程。 |
--shm-size | 设置 /dev/shm 的大小(默认 64MB)。 |
--cpuset-cpus | 指定容器运行在哪些 CPU 核心上(如 0,1 表示核心 0 和 1)。 |
环境变量相关选项
参数 | 作用 |
---|---|
-e 或 --env | 设置容器内的环境变量,格式为 KEY=VALUE 。 |
--env-file | 从文件中读取环境变量(每行一个 KEY=VALUE )。 |
--label | 为容器添加标签(可用于管理和筛选容器)。 |
文件系统相关选项
参数 | 作用 |
---|---|
--workdir | 指定容器的工作目录(类似 Linux 的 cd )。 |
--entrypoint | 覆盖镜像的默认 ENTRYPOINT 。 |
设备与权限相关选项
参数 | 作用 |
---|---|
--privileged | 以特权模式运行容器,允许访问主机的所有设备。 |
--device | 将主机设备挂载到容器中,例如 GPU 或 USB。 |
--cap-add | 添加容器的特定能力(Capabilities)。 |
--cap-drop | 删除容器的特定能力(Capabilities)。 |
--security-opt | 配置容器的安全选项。 |
日志相关选项
参数 | 作用 |
---|---|
--log-driver | 设置容器的日志驱动程序(如 json-file 、syslog )。 |
--log-opt | 配置日志驱动的选项,例如日志大小限制等。 |
调试与诊断选项
参数 | 作用 |
---|---|
--detach-keys | 设置退出容器时的键组合(默认是 Ctrl+P Ctrl+Q )。 |
--init | 在容器中使用一个初始化程序(如 tini )来处理子进程。 |
--tty 或 -t | 为容器分配一个伪终端(TTY)。 |
其他选项
参数 | 作用 |
---|---|
--help | 显示 docker run 的帮助信息。 |
--user 或 -u | 以指定的用户或 UID 运行容器。 |
--pid | 设置容器的 PID 隔离模式(如 host )。 |
更多推荐
所有评论(0)