1.什么是Docker

https://docs.docker.com/get-started/docker-overview/

Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 使你能够将应用程序与基础设施分离开来,从而可以快速交付软件。使用 Docker,你可以用管理应用程序的方式来管理基础设施。借助 Docker 的代码交付、测试和部署方法,你可以大幅缩短编写代码与在生产环境中运行代码之间的延迟。

1.1Docker平台

Docker 支持将应用程序打包并运行在一种名为容器的松散隔离环境中。这种隔离性与安全性让你能在同一台主机上同时运行多个容器。容器轻量且包含运行应用所需的全部内容,因此无需依赖主机上已安装的组件。你可以在工作中共享容器,并且能确保与你共享的所有人都获得功能完全一致的容器。

Docker 提供工具和平台来管理容器的生命周期:

  • 使用容器开发你的应用程序及其支持组件。、
  • 容器成为分发和测试你的应用程序的单元。
  • 准备就绪后,将你的应用程序作为容器或编排服务部署到生产环境中。无论你的生产环境是本地数据中心、云服务提供商还是两者混合,部署方式都完全相同。

1.2可以将 Docker 用于什么

Docker 简化了开发生命周期,让开发者能在本地容器构成的标准化环境中工作,这些容器为应用程序和服务提供支持。容器非常适用于持续集成和持续交付(CI/CD)工作流。

1.3Docker架构

Docker 采用客户端-服务器架构。Docker 客户端与 Docker 守护进程交互,后者负责构建、运行和分发你的 Docker 容器等核心繁重工作。Docker 客户端和守护进程可在同一系统上运行,也可将 Docker 客户端连接到远程 Docker 守护进程。二者通过 REST API 借助 UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它可用于处理由一组容器组成的应用程序。
架构图

1.4容器与虚拟机

虚拟机就是一个完整的操作系统,拥有自己的内核、硬件驱动程序以及各类程序和应用。仅为隔离单个应用而启动一台虚拟机,会产生大量额外开销。

容器本质上就是一个包含运行所需全部文件的隔离进程。运行多个容器时,它们会共享同一个内核,这样就能在更少的基础设施上运行更多应用程序。

2.前置条件

参考Install Docker Desktop on Windows https://docs.docker.com/desktop/setup/install/windows-install/

  • CPU 必须支持并在 BIOS/UEFI 中开启 硬件虚拟化(Intel VT‑x / AMD‑V)
  • Windows 10(64 位)家庭版 / 专业版 / 企业版 / 教育版,22H2 (build 19045)
  • Windows 11(64 位)家庭版 / 专业版 / 企业版 / 教育版,23H2 (build 22631)
  • ≥8GB内存

2.1检查虚拟化开启状态

查看虚拟化开启状态:任务管理器 → 性能 → CPU → 右下角
在这里插入图片描述
在这里插入图片描述
如果没有开启,请读者根据自己的电脑型号开启。

2.2相关概念

  • Image(镜像):只读的、不可修改的「模板」,包含运行一个程序所需的所有东西(代码、依赖、配置)。
  • Container(容器):基于镜像创建的「可运行实例」,是独立的、可读写的、隔离的运行环境。
  • Registry(仓库):仓库是存储和分发镜像的远程平台,最常用的公有仓库是 Docker Hub(https://hub.docker.com),国内大概率访问不了

3.WSL

3.1 WSL简介

WSL 全称是 Windows Subsystem for Linux(适用于 Linux 的 Windows 子系统)。它是微软开发的一项功能,允许在 不安装虚拟机(如 VMware的情况下,直接在 Windows 上运行原生的 Linux 环境(包括大多数命令行工具、实用工具和应用程序)。

WSL目前主要有两个版本,WSL 1和WSL 2。Docker Desktop 在 Windows 上必须依赖 WSL 2 才能高效运行。

  • WSL 1
    通过翻译层将 Linux 系统调用转换为 Windows 内核能理解的调用,兼容性较差,不推荐。
  • WSL 2
    基于轻量级的 虚拟化技术,在 Windows 内部运行一个真正的 Linux 内核,几乎 100% 兼容。

以前,想用 Linux 只能装双系统 / 虚拟机,现在Windows 本身就是一套完整开发工作站。
WSL2 让 Windows 同时拥有:Windows 的易用性 + Linux 的开发能力

3.2 WSL安装

• 如何使用 WSL 在 Windows 上安装 Linux https://learn.microsoft.com/zh-cn/windows/wsl/install
• 旧版 WSL 的手动安装步骤 https://learn.microsoft.com/zh-cn/windows/wsl/install-manual

在PowerShell(管理员)执行命令:

# 列出有效的分发列表
wsl -l -o

在这里插入图片描述

#默认安装Ubuntu
wsl --install

在这里插入图片描述

4.Docker Desktop for Windows

一款原生 Windows 应用程序,可将所有 Docker 工具部署到你的 Windows 电脑上。

4.1安装

下载地址 https://docs.docker.com/desktop/setup/install/windows-install/
在这里插入图片描述

在这里插入图片描述

4.2软件简介

在这里插入图片描述

4.2.1 Containers

容器视图会列出所有正在运行和已停止的容器以及应用程序。它提供了一个简洁的界面,用于管理容器的生命周期、与正在运行的应用程序交互以及查看 Docker 对象——包括 Docker Compose 应用程序。
在这里插入图片描述
在这里插入图片描述
使用搜索字段按名称查找特定容器。从容器试图中,你可以:

  • 启动、停止、暂停、恢复或重启容器
  • 查看镜像包
  • 删除容器
  • 实用Docker调试

从容器视图中,你可以随时间监控容器的 CPU 和内存使用情况。这有助于你判断容器是否存在异常,或者是否需要分配额外资源。你可以查看容器随时间使用的CPU、内存、网络和磁盘空间情况。
更多信息请参考Docker手册:https://docs.docker.com/desktop/use-desktop/container/

4.2.2Images

镜像视图会显示你的 Docker 镜像列表,支持将镜像作为容器运行、从 Docker Hub 拉取镜像的最新版本以及查看镜像详情。此外,镜像视图提供清理选项,可删除磁盘上无用的镜像以释放空间。
在这里插入图片描述
镜像视图让你无需使用命令行界面(CLI)就能管理 Docker 镜像。默认情况下,该视图会显示本地磁盘上所有 Docker 镜像的列表。

镜像视图允许你执行核心操作,例如将镜像作为容器运行、从 Docker Hub 拉取镜像的最新版本、将镜像推送到 Docker Hub 以及查看镜像信息。

更多信息请参考Docker手册:https://docs.docker.com/desktop/use-desktop/images/

4.2.3Volumes

卷视图可让你创建、查看、删除、克隆、清空、导出和导入Docker 卷。你还可以浏览卷中的文件和文件夹,并查看哪些容器正在使用它们。
在这里插入图片描述
你可以按照以下步骤创建一个空卷。或者,如果你启动容器时指定一个卷且该卷尚不存在,Docker 会为你创建该卷。
主要操作包括:

  • 创建卷:选择Create按钮,在新建卷对话框中,指定卷名称,然后选择创建。
  • 查看卷
  • 克隆卷
  • 删除卷
  • 清空卷
  • 导出卷
  • 导入卷

更多信息请参考Docker手册:https://docs.docker.com/desktop/use-desktop/volumes/

4.2.4Builders

构建 视图提供了一个交互式界面,可在 Docker Desktop 中直接查看构建历史、监控活跃构建以及管理构建器。

更多信息请参考Docker手册:https://docs.docker.com/desktop/use-desktop/volumes/

4.2.5Kubernetes

Docker Desktop 包含一个独立的 Kubernetes 服务器和客户端,以及 Docker 命令行界面集成功能,可直接在你的计算机上进行本地 Kubernetes 开发和测试。

更多信息请参考Docker手册:https://docs.docker.com/desktop/use-desktop/kubernetes/

4.3修改镜像源

由于访问外网受限,修改镜像源为国内地址。

  • 选择右上角的Settings图标
  • 选择Docker Engine
  • 将下列文本复制到文本框,选择 Apply,笔者当前用的是 https://docker.1ms.run
{
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://docker.1ms.run"
  ]
}

建议读者在配置前检查 https://docker.1ms.run 是否可以正常访问,如果不行可问AI最新可用的镜像源。

4.4拉取镜像

在PowerShell执行命令,拉取镜像的命令为:

docker pull <镜像名:版本>

如果不输入版本,默认拉取 latest( 最新版)。建议手动指定版本,因为不能保证镜像源有你需要的最新版。

4.4.1拉取Redis

拉取8.6.1版本的Redis,执行命令:

docker pull redis:8.6.1

在这里插入图片描述

4.4.2拉取PG数据库

拉取最新版PG数据库,执行命令:

docker pull postgres

在这里插入图片描述

4.5启动PG数据库

选择postgres镜像的Run按钮,输入相关参数:

在这里插入图片描述

  • Container name:为正在创建的容器指定一个自定义的名称,不指定Docker会自动生成一个随机名称。名称应是唯一的,建议手动指定。
  • Host Ports:宿主机端口,将容器内部的服务端口映射到宿主机的网络接口上,使得外部网络(包括宿主机的浏览器或其他设备)可以访问容器内的服务。如果宿主机端口已被占用,容器启动会失败。
  • Host Path:宿主机上的绝对路径,用于和容器内的路径绑定(挂载)。容器内的数据默认存储在容器内部,容器删除后数据丢失;将容器内的关键目录挂载到主机路径,数据会同步到主机,容器删除后数据仍在。
  • Container path:容器内部的绝对路径(文件夹 / 文件),是容器内程序实际读写数据的位置。默认就好。
  • Environment variables:启动的镜像不同参数会不一样,在本示例中指定了用户名和密码。

启动后可以在container中看到:
在这里插入图片描述

4.6启动Redis

选择redis镜像的Run按钮,输入相关参数:
在这里插入图片描述
在这里插入图片描述

4.7Docker常用命令

以下命令通过AI辅助生成。

4.7.1拉取镜像

# 拉取指定镜像(默认最新版本)
docker pull [镜像名]:[标签]

# 示例:拉取redis 8.6.1镜像
docker pull redis:8.6.1
# 示例:拉取最新版本的postgres镜像
docker pull postgres:latest
# 示例:不指定标签,默认拉取latest版本
docker pull postgres

标签(Tag)用于区分镜像版本。

4.7.2管理镜像

# 1. 查看本地所有镜像
docker images
# 或
docker image ls

# 2. 查看镜像详细信息(包括ID、创建时间等)
docker inspect [镜像ID/镜像名]

# 3. 删除指定镜像(-f 强制删除,即使有容器依赖)
docker rmi [镜像ID/镜像名:标签]

# 示例:强制删除镜像(慎用)
docker rmi -f nginx:latest

# 4. 批量删除未使用的镜像
docker image prune -a

# 5. 导出镜像为本地文件(备份用)
docker save -o [本地文件路径] [镜像名:标签]
# 示例:导出nginx镜像为nginx.tar
docker save -o ./nginx.tar nginx:latest

# 6. 从本地文件导入镜像
docker load -i [本地文件路径]
# 示例:导入nginx.tar文件
docker load -i ./nginx.tar

4.7.3管理容器

# 1. 查看正在运行的容器
docker ps

# 2. 查看所有容器(包括已停止的)
docker ps -a

# 3. 进入运行中的容器(交互式终端)
docker exec -it [容器名/容器ID] /bin/bash
# 示例:进入my-nginx容器
docker exec -it my-nginx /bin/bash

# 4. 停止容器
docker stop [容器名/容器ID]
# 示例:停止my-nginx容器
docker stop my-nginx

# 5. 重启容器
docker restart [容器名/容器ID]
# 示例:重启my-nginx容器
docker restart my-nginx

# 6. 强制停止容器(类似kill进程)
docker kill [容器名/容器ID]

# 7. 删除容器(需先停止,-f 强制删除运行中的容器)
docker rm [容器名/容器ID]
# 示例:删除my-nginx容器
docker rm my-nginx
# 示例:强制删除运行中的容器
docker rm -f my-nginx

# 8. 批量删除所有已停止的容器
docker container prune

# 9. 查看容器日志(后台运行容器的输出)
docker logs [容器名/容器ID]
# 示例:实时查看Nginx容器日志
docker logs -f my-nginx
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐