DockerDesktop

Docker Desktop


导入导出 | 导入导出2 |


Docker,字面意思是“码头工人”,是一种虚拟化技术的名称,也可以理解为一种虚拟化方式,具体应用就是一个虚拟化应用的工具。它可以很方便的实现对开发出来的应用系统进行交付、部署、迁移、维护、扩展。


Docker有三个要素:镜像(image)、容器(container)、仓库(repository)。镜像,可以理解为各种的应用或服务(applications and microservices)。通过Docker可以将这些应用和服务装入“集装箱”,并且可以运载(运载)到任何地方(正如Docker Desktop首页的标语:run anywhere)。因此,其logo,我理解为:一艘满载集装箱(container)鲸鱼形状的“巨轮”。

Docker Desktop is a one-click-install application for your Mac, Linux, or Windows environment that enables you to build and share containerized applications and microservices.


Windows

Docker Desktop在Windows下的安装应该是蛮简单的,与一般的软件安装无异。但是由于Docker毕竟基于Linux为核心,而且建立的镜像容器占用空间很大(默认安装为C盘,不能更改),因此有几个问题需要注意:

1、虚拟化开启问题。

2、更改默认C盘安装位置的问题。

3、更改镜像文件位置的问题。

4、配置镜像加速

Docker Desktop在Windows下安装非常简单,基本就是下载软件后一键安装。但是这里要注意,由于Docker Desktop在Windows下运行是基于Windows的Hyper-V(微软与VMware展开竞争的一款虚拟化产品)服务和WSL2(Windows Subsystem for Linux)内核,有时会遇到部署电脑BIOS未开启虚拟化,或未安装Hyper-V的情况(参考:虚拟化环境)。


更改软件安装位置

本来Docker Desktop安装后系统盘就增加2个多G的空间,也不算多。另外,也可以将镜像迁移到别的盘符,这也可以节省系统盘空间。但是,Docker有一个很大的问题就是,挂载的目录必须也要在C盘!这个就很要命了!因此,才决心尝试更改安装位置。

1、创建目录链接

Docker Decktop(Windows版本)是无法选择安装目录的,默认安装在C盘。所以,可以用mklink命令在D盘创建一个目录链接(管理者身份打开命令行方式),让软件实际上安装到D盘:

mklink /J "C:Program FilesDocker"  "D:Program FilesDocker"

2、安装Docker Desktop

双击从官网下载的安装包,即可。

从以上安装过程的截图来看,软件安装过程除了一开始有“是否要添加桌面快捷方式”的询问选项外,全程没有其它设置选项。

以上安装方法的却可以将Docker“安装”到了D盘的(有资料说不行),并不占C盘空间(我对比过前后硬盘空间),安装文件其实都在D盘。

但是,问题就来了!Docker无法启动,后者说非常慢(总之我没看到启动进去的页面,见下图)!

经过漫长的等待,出现以下错误界面(错误信息):

原来也想按照网上的介绍,先将C盘的Docker安装文件夹里面的文件全部拷贝到D盘对应的文件夹,然后用mklink建立D盘的目录链接。但是不成功,Docker的界面可以打开,但是就一直出现上图效果。

看来,应该是Docker考虑到速度、效率的问题,还是需要放到C盘或者系统盘更佳,而不允许放在其它盘了。

以上操作均在Surface,其配置:

处理器 Intel(R) Core(TM) i7-6650U CPU @ 2.20GHz   2.21 GHz
机带 RAM 16.0 GB
版本 Windows 10 家庭版
版本号 22H2


更改镜像存储位置

1、查看wls状态

进入Powershell或命令行cmd输入命令查看:wsl --list -v

docker-desktop 为“程序”,位置: AppDataLocalDockerwsldistroext4.vhdx
docker-desktop-data 为“镜像”,位置: AppDataLocalDockerwsldataext4.vhdx
2、退出Docker Desktop

发现依然是running状态(见下图)。

3、关闭wsl

wsl --shutdown

4、导出镜像和程序文件

wsl --export docker-desktop-data D:BYPProgrammingDockerVHDXdocker-desktop-data.tar
wsl --export docker-desktop D:BYPProgrammingDockerVHDXdocker-desktop.tar

导出后,对应文件夹就出现上述文件,注意此时才刚刚安装Docker Desktop,里面并没有镜像或容器,但是也有1.39GB。安装完Docker Desktop后,如果启动软件,C盘也会增加上述空间(虽然此时并没有镜像或容器)。

5、注销镜像和程序

wsl --unregister docker-desktop-data
wsl --unregister docker-desktop
注销后如果再查看wsl,就会出现:“适用于 Linux 的 Windows 子系统没有已安装的分发版。”(见下图)

6、导回镜像和程序文件

wsl --import docker-desktop-data D:BYPProgrammingDockerVHDX  D:BYPProgrammingDockerVHDXdocker-desktop-data.tar
wsl --import docker-desktop D:BYPProgrammingDockerVHDX  D:BYPProgrammingDockerVHDXdocker-desktop.tar
注意以上命令为虚拟磁盘文件vhdx所在的新位置。此时,会出现“参数错误”的提示!

其实是缺少了版本号这个参数:--version 2

wsl --import docker-desktop-data D:BYPProgrammingDockerVHDX  D:BYPProgrammingDockerVHDXdocker-desktop-data.tar --version 2
其实导入docker-desktop-data后就可以了,不需要再导入docker-desktop,否则会出现“提供的安装位置已在使用中。

7、启动Docker Desktop

启动Docker Desktop后,镜像和程序文件均为启动状态(Running),见下图:

注意,启动后,C盘的空间由于vhdx虚拟磁盘文件的迁出而得到了释放。以后再导入镜像,增加的空间只是D盘的了。


导入镜像和建立容器

试验1:文件夹路径使用

docker load -i .20230522_wrf_docker_wt4.2_tzf.tar
docker run --name=WRF_byp -it -v D:BYPProgrammingDockerDocker_WRF:/home/wrf/work --entrypoint=/bin/bash zwt/wrf:4.2

注意挂载文件夹路径的斜杠方向。

查看容器详情是没问题的,挂载路径也显示出来:

进入该容器后,发现进入挂载的目录其实是看不到宿主机对应文件夹内容的!

试验2:文件夹路径使用/

再来一次,更改文件夹路径的方向,从更改为/(即与Linux命令的方向一致)

docker run --name=WRF_byp2 -it -v D:/BYP/Programming/Docker/Docker_WRF:/home/wrf/work --entrypoint=/bin/bash zwt/wrf:4.2

将文件夹路径的斜杠方向做了调整。

进入新容器后,依然发现与宿主挂载的文件夹连不上!

试验3:文件夹路径使用/,并改为C盘

docker run --name=WRF_byp3 -it -v C:BypDocker:/home/wrf/work --entrypoint=/bin/bash zwt/wrf:4.2

发现成功链接挂载文件夹(下图绿色文件夹为宿主机文件夹):

由此可见,在Windows的电脑中,挂载文件夹,必须是电脑的系统盘!

试验4:使用mklink转移文件夹到D盘

注意一定要以管理员身份使用命令行方式cmd执行,如果使用Powershell出错!

不过建立容器的时候出错,失败!

也尝试过,先挂载一个C盘文件夹,然后在里面再mklink一个D盘的文件夹,虽然容器内可以见到这个mklink的文件夹,但是是蓝色的,cd进去会报错!


添加镜像加速器

进入阿里云地址。因为已经安装了软件,所以选择Windows中“针对安装了Docker for Windows的用户”部分的操作:

新版的Docker Desktop会与旧版有点不一样:选择界面右上角Setting——Docker Engine,然后将相关语句拷贝进去相应的位置(注意前面要加一个逗号,)。如果语法正确,右下角的“Apply & restart”就会变蓝,点击重新启动即可。





安装好Docker Desktop后,启动该软件,就可以通过图形用户界面或命令行方式使用docker了。例如,可以在Windows文件夹内,按着Shift键,然后右击鼠标进入PowerShell界面。当然也可以用Windows的终端命令行cmd方式操作。只不过Powershell会有“颜色”,无论命令、文件夹有颜色区别,甚至可以同时使用dir、ls查看文件夹内容。

如果未运行Docker Desktop,在命令行输入docker命令就会报错(见上图)。

Docker Desktop正常运行的标志就是看软件界面左下角出现绿色的鲸鱼:


windows挂载文件夹大坑之一:一定要注意文件夹斜杠的方向

docker run --name=Python_byp -it -v C:/Byp/Docker:/home/byp/work --entrypoint=/bin/bash miniconda_byp:v023

因为在windows下的目录地址是:C:BypDocker,与linux环境下的目录地址是相反的。如果写反了,也不会报错,甚至在docker desktop查看容器的Inspect也是“正常”的:

但是实际上虽然进入容器后,也能看到目录,但是不会同步的!

因为执行了python程序,发现虽然在容器内生成了图片,但是在本地“挂载”的目录里面未出现,一开始还以为是电脑的文件夹写入权限问题!后来发现因为系统是家庭版win10,还没有“文件夹——属性——安全”。因此还想方设法打开“配置组策略编辑器”(cmd文件):

然后“运行”gpedit.msc:截图(01|02|03|04)。虽然打开了安全策略,但是因为D盘是surface电脑的microSD卡所在的盘符,里面的文件依然没有“安全”选项。但是系统盘C盘是有的。

下图的挂载才是正确姿势(斜杠躺下的姿势):


导出导入镜像

docker export -o Python_byp_export.tar Python_byp
docker import Python_byp_export.tar python_byp_img:v01
(注意导入import成镜像的名称一定要小写,见下图错误提示)
docker run --name=Python_byp_01 -it -v D:/BYP/Programming/Docker/FY:/home/byp/work --entrypoint=/bin/bash --restart=no python_byp_img:v01

windows挂载文件夹大坑之二:挂载目录需要和docker同盘符:原来以为挂载成功了。

但是实际上挂载文件夹是失败的!这时候突然想起之前看到网上有资料说,挂载的目录需要和docker软件同一个硬盘内!因此重新使用了命令:

docker run --name=Python_byp_02 -it -v C:/Byp/Docker/FY:/home/byp/work --entrypoint=/bin/bash --restart=no python_byp_img:v01

重新创建了一个容器,这是进入挂载的文件夹,才发现挂载成功!



迁移磁盘映射文件

由于Docker Desktop默认的虚拟磁盘映射文件是放在C盘系统盘的,导致系统盘压力很大。不过可以使用wsl的命令将其迁移到其他硬盘。

1、查看Docker的状态和版本

wsl -l -v

查看版本很有必要,因为后续要导入的时候是需要填写版本信息这个参数的。

2、导出数据

wsl --export docker-desktop docker-desktop_20230524.tar
wsl --export docker-desktop-data docker-desktop-data_20230524.tar
3、注销原来的信息
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

需要注销原有信息,不然系统会提示“已存在具有提供的名称的分发”!
4、导入数据
wsl --import docker-desktop ./ docker-desktop_20230524.tar --version 2
wsl --import docker-desktop-data ./ docker-desktop-data_20230524.tar --version 2

也有教程说,只需要导入docker-desktop-data即可(亲测成功)。

注意一定要填写版本信息这个参数,不然会提示“参数错误”!

上述操作之后,将在对应的目录空间内多了一个文件:ext4.vhdx,即说明以前将虚拟磁盘映射文件迁移到该目录了:

只需要导入docker-desktop-data:

此时在启动Docker Desktop系统后,再查看状态,其实已经启动了docker-desktop:

迁移后,之前挂载的目录依然有效:


操作:再次导入迁移的Docker

1、清理数据

进入Troubleshoot,点击红色按钮“Clean / Purge data”,选择全部内容,即可清楚全部iamges、containers。

2、注销分发版

进入准备存放映射文件的文件夹D:BYPProgrammingDockerVHDX,然后按着Shift键右击鼠标打开Powershell。输入注销分发命令:

wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

3、导入备份分发版

wsl --import docker-desktop-data ./ ../Repository/docker-desktop-data_20230524.tar --version 2

导入完成后,文件夹内就出现了映射文件:

再查看分发版状态:

4、启动Docker Desktop

启动系统后,再查看分发状态:


操作:建立Python容器

1、清理数据

进入Troubleshoot,点击红色按钮“Clean / Purge data”,选择全部内容,即可清楚全部iamges、containers。此时,如果之前做过映射文件迁移的,就会重新回到系统盘。

2、导入镜像

docker import ../Repository/Python_byp_export.tar python_byp_img:v01

此时映射文件其实是回到了C盘系统盘的。

3、导出文件

wsl --export docker-desktop-data docker-desktop-data_20230524_02.tar

将镜像文件重新导出成为压缩包。

4、注销原来的信息
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

5、导入数据

进入需要存放映射文件的文件夹,执行一下导入命令:

wsl --import docker-desktop-data ./ ../Repository/docker-desktop-data_20230524_02.tar --version 2

即可将映射文件存入。

6、建立容器

docker run --name=Python_byp_01 -it -v D:/BYP/Programming/Docker:/home/byp/work --entrypoint=/bin/bash --restart=no python_byp_img:v01

本来想挂载D盘的一个文件夹,后来发现挂载失败。感觉挂载的磁盘一定要是系统盘?!

例如使用以下命令挂载C盘系统盘的文件夹就成功:

docker run --name=Python_byp_02 -it -v C:/Byp/Docker:/home/byp/work --entrypoint=/bin/bash --restart=no python_byp_img:v01


更换新电脑,安装Docker网站的坑:1|2|3|4|


Windows 10安装Docker以及配置镜像加速
Docker Desktop更改镜像存储位置




BypInformation