Docker在Windows平台的部署及使用

一、Docker Desktop在Windows平台上的部署方式

(一)前置要求

在Windows上使用Docker Desktop依赖WSL 2作为后端运行环境。因此,在安装Docker Desktop之前,您需要先安装WSL 2并配置至少一个Linux发行版(如Ubuntu)。如果您尚未完成此步骤,请参考相关教程完成WSL 2的安装,并确保能够在WSL终端中正常运行Linux命令后,再继续进行Docker Desktop的安装配置。

系统要求如下:

  • WSL 2后端:WSL版本1.1.3.0或更高版本。Windows 11 64位:Home或Pro 22H2版或更高版本,或Enterprise或Education 22H2版或更高版本。Windows 10 64位:最低要求为Home或Pro 22H2(构建19045)或更高版本,或Enterprise或Education 22H2(构建19045)或更高版本。
  • Hyper - V后端和Windows容器:开启Hyper - V和容器Windows功能。Windows 10或Windows 11上成功运行客户端Hyper - V需要满足以下硬件先决条件:具有二级地址转换 (SLAT) 功能的64位处理器,4GB系统内存,在BIOS/UEFI设置中开启BIOS/UEFI级别的硬件虚拟化支持。

(二)安装步骤

  1. 下载Docker Desktop:访问Docker官网:https://www.docker.com/,点击页面上的“Download for Windows - AMD64”按钮,以下载适用于Windows系统的Docker Desktop安装文件。
  2. 安装Docker Desktop:双击下载的安装文件,开始安装Docker Desktop。按照安装向导的指示完成安装。在安装过程中,将提示安装WSL 2,建议勾选此选项以获得更好的性能。
  3. 配置Docker Desktop:安装完成后,启动Docker Desktop。首次打开时,将出现Docker订阅协议,点击 Accept(接受)以继续。随后,系统将提示用户登录,您可以选择使用GitHub账户或Google账户登录,若无上述账户,可选择跳过登录步骤。接下来,将出现调查问卷,您可以根据个人喜好选择填写,或直接跳过此步骤。最后,Docker Desktop将正常启动。

(三)汉化(可选)

若想使Docker Desktop显示中文界面,可按照以下步骤进行汉化:

  1. 下载对应版本的中文语言包:访问GitHub,下载适用于Docker Desktop的中文语言包,链接地址为:DockerDesktop - CN。将下载的文件解压至 C:\Program Files\Docker 目录下(即Docker的安装根目录)。
  2. 检查Docker Desktop版本:启动Docker Desktop,版本号将在右下角显示。
  3. 备份并替换app.asar文件:打开Docker Desktop中文语言包,选择与您Docker版本相符的 app.asar 文件并复制。导航至Docker的安装目录,路径默认为:C:\Program Files\Docker\Docker\frontend\resources,在该目录下找到 app.asar 文件,建议先备份原文件,然后将复制的中文语言包中的 app.asar 文件粘贴并替换原有文件。
  4. 重新启动Docker Desktop:完成替换后,请关闭Docker Desktop,然后重新启动该程序。此时,Docker Desktop应该以中文界面显示。

(四)报错处理(WSL更新失败)

打开Docker Desktop后若出现警告,表明Docker Desktop在WSL更新时失败,系统无法找到WSL。这通常是由于Windows版本较低,导致WSL兼容性问题,建议升级Windows以解决该问题。具体解决方案如下:

  1. 检查Windows版本:在PowerShell或运行(Win + R)输入:winver。WSL 2需要至少满足22H2或更高版本。
  2. 手动升级Windows:访问Windows 11安装助手官网 ,点击 立即下载。根据系统提示,依次完成下载、安装和重启,直至升级完成,请勿中断操作。
  3. 手动更新WSL:Windows更新完毕后,以管理员身份运行 PowerShell 执行:wsl --update。如果一切正常,然后运行 wsl --version,若能正常显示版本信息,说明WSL已成功更新。
  4. 重新启动Docker Desktop:重新启动Docker Desktop后可以看到不再弹出报错。

二、常用的Docker概念

(一)镜像(Image)

Docker的镜像概念类似于虚拟机里的镜像(比如.ISO文件),是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。例如,一个镜像可以包含一个完整的Ubuntu操作系统环境,里面仅安装了MySQL或用户需要的其它应用程序。

镜像不包含任何动态数据,其内容在构建之后也不会被改变。Docker设计时,充分利用Union FS的技术,将其设计为分层存储的架构。镜像实际是由多层文件系统联合组成,构建时会一层层构建,前一层是后一层的基础,每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。分层存储的特征还使得镜像的复用、定制变的更为容易,甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

(二)容器(Container)

Docker容器是由Docker镜像创建的运行实例,类似VM虚拟机,支持启动,停止,删除等。每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。可以把容器看做是一个轻量级的Linux运行环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。按照Docker最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

(三)仓库(Repository)

镜像便于传播,而仓库就是专门用来传播这些镜像的地方,有点类似于Github,或者可以把它看成一个存放各种镜像的镜像商店。一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

Docker Registry分为公开服务和私有服务。Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务,一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。最常使用的Registry公开服务是官方的Docker Hub ,这也是默认的Registry,并拥有大量的高质量镜像。

三、常用的Docker命令

(一)容器生命周期管理命令

  1. docker run:创建并启动一个新的容器。例如 docker run -d ubuntu-d 表示在后台运行容器。
  2. docker start/stop/restart:分别用于启动、停止和重启容器。如 docker start container_name 启动指定名称的容器。
  3. docker kill:立即终止一个或多个正在运行的容器。例如 docker kill container_id
  4. docker rm:用于删除一个或多个已经停止的容器。如 docker rm container_id 删除指定ID的容器。
  5. docker pause/unpause:暂停和恢复容器中的所有进程。
  6. docker create:创建一个新的容器,但不会启动它。
  7. docker exec:在运行中的容器内执行一个新的命令。例如 docker exec -it container_name bash-it 表示以交互模式进入容器。
  8. docker rename:重命名容器。

(二)容器操作命令

  1. docker ps:列出Docker容器。docker ps 列出正在运行的容器,docker ps -a 列出所有容器(包括已停止的容器)。
  2. docker inspect:获取Docker对象(容器、镜像、卷、网络等)的详细信息。
  3. docker top:显示指定容器中的正在运行的进程。
  4. docker attach:允许用户附加到正在运行的容器并与其交互。
  5. docker events:获取Docker守护进程生成的事件。
  6. docker logs:获取和查看容器的日志输出。如 docker logs container_name 查看指定容器的日志。
  7. docker wait:允许用户等待容器停止并获取其退出代码。
  8. docker export:将容器的文件系统导出为tar归档文件。
  9. docker port:显示容器的端口映射信息。
  10. docker stats:实时显示Docker容器的资源使用情况。
  11. docker update:更新Docker容器的资源限制,包括内存、CPU等。

(三)容器的root文件系统(rootfs)命令

  1. docker commit:允许用户将容器的当前状态保存为新的Docker镜像。
  2. docker cp:用于在容器和宿主机之间复制文件或目录。
  3. docker diff:显示Docker容器文件系统的变更。

(四)镜像仓库命令

  1. docker login/logout:管理Docker客户端与Docker注册表的身份验证。
  2. docker pull:从Docker注册表(例如Docker Hub)中拉取(下载)镜像到本地。如 docker pull ubuntu 下载Ubuntu镜像。
  3. docker push:将本地构建的Docker镜像推送(上传)到Docker注册表(如Docker Hub或私有注册表)。
  4. docker search:用于在Docker Hub或其他注册表中搜索镜像。例如 docker search mysql 搜索MySQL相关镜像。

(五)本地镜像管理命令

  1. docker images:列出本地的Docker镜像。
  2. docker rmi:删除不再需要的镜像。如 docker rmi image_id 删除指定ID的镜像。
  3. docker tag:创建本地镜像的别名(tag)。
  4. docker build:从Dockerfile构建Docker镜像。例如 docker build -t my - image .-t 为镜像指定标签。
  5. docker history:查看指定镜像的历史层信息。
  6. docker save:将一个或多个Docker镜像保存到一个tar归档文件中。
  7. docker load:从由 docker save 命令生成的tar文件中加载Docker镜像。
  8. docker import:从一个tar文件或URL导入容器快照,从而创建一个新的Docker镜像。

(六)其他命令

  1. docker info:显示Docker的系统级信息,包括当前的镜像和容器数量。
  2. docker version:显示Docker客户端和服务端的版本信息。

四、Docker Compose及相关命令

(一)Docker Compose简介

Docker Compose是一个用于定义和运行多个Docker容器的工具,通过一个YAML文件来配置应用程序的服务、网络和卷等信息,并且可以一键启动、停止和管理整个应用程序。它简化了多容器应用的部署和管理,适用于开发、测试、生产等各种环境。

(二)常用命令

  1. 启动和停止服务
    • docker-compose up:前台启动项目中的所有服务;docker-compose up -d 后台启动所有服务并在后台运行。
    • docker-compose stop:停止所有服务;docker-compose stop service_name 停止指定服务的容器。
    • docker-compose restart:重启工程中所有服务的容器;docker-compose restart service_name 重启指定服务的容器。
    • docker-compose start:启动工程中所有服务的容器;docker-compose start service_name 启动指定服务的容器。
  2. 构建和重构服务
    • docker-compose build:构建服务的镜像。
    • docker-compose up –build:如果服务镜像不存在,则构建镜像并启动服务。
    • docker-compose up –force-recreate:重构服务。
  3. 查看服务信息
    • docker-compose ps:查看项目中所有服务的信息。
    • docker-compose logs:查看容器的日志;docker-compose logs -f 跟踪日志输出;docker-compose logs --no-color 关闭颜色显示;docker-compose logs service_name 查看指定服务的日志。
    • docker-compose exec service_name command:在服务镜像的容器中执行命令。
  4. 删除所有容器
    • docker-compose down:删除服务容器(容器)。默认不会删除数据卷,如果想同时删除与容器关联的数据卷,可以加上 -v 参数;要删除为服务构建的镜像,可以使用 --rmi all(删除所有与服务关联的镜像)或 --rmi local(仅删除本地构建的镜像)。
  5. 在指定容器上执行命令
    • docker-compose run service_name command:在指定服务容器上执行一个命令。例如 docker-compose run nginx echo "helloworld"
  6. 进入指定容器
    • docker-compose exec service_name bash:进入工程中指定服务的容器;当一个服务拥有多个容器时,可通过 --index 参数进入到该服务下的任何容器,如 docker-compose exec --index=1 nginx bash
  7. 暂停和恢复服务容器
    • docker-compose pause:暂停工程中所有服务的容器;docker-compose pause service_name 暂停指定服务的容器。
    • docker-compose unpause:恢复工程中所有服务的容器;docker-compose unpause service_name 恢复指定服务的容器。
  8. 扩容缩容
    • docker-compose scale service_name=num:例如 docker-compose scale taskmanager=5 。也可以使用 docker-compose up --scale web=5 -d

通过以上介绍,您可以在Windows平台上使用Docker Desktop部署容器,并掌握常用的Docker概念、命令以及Docker Compose的使用方法,从而更高效地进行容器化应用的开发和管理。