Docker简介

简而言之,Docker 是一个可供开发者通过容器(container)来构建,运行和共享应用(application)的平台。用容器来部署应用被称为集装箱化(containerization)。

  • Docker 就像一个盒子,里面可以装很多物件,如果需要某些物件,可以直接将该盒子拿走,而不需要从该盒子中一件一件的取。
  • Docker中文社区Docker中文文档

Docker 包括三个基本概念:

  • 镜像(Image)
    • Docker的镜像概念类似于虚拟机里的镜像(比如.ISO文件),是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。
    • 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了MySQL或用户需要的其它应用程序。
    • 这里的镜像就如下方虚拟机创建时候使用的镜像类似。这个镜像便于移动,并且这个镜像我们可以交给任何人使用,其他人使用的时候也很方便,只需要将其实例化即可。 在这里插入图片描述
  • 容器(Container)
    • Docker容器是由Docker镜像创建的运行实例,类似VM虚拟机,支持启动,停止,删除等。
    • 每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。
    • 容器就类似与虚拟机中我们创建好的虚拟机系统,之后我们所有的操作都是在容器中进行的,我们的程序也是运行在容器中。 在这里插入图片描述
  • 仓库(Repository)
    • 镜像便于传播,而仓库就是专门用来传播这些镜像的地方,他有点类似与Github,或者你可以把他看成一个存放各种镜像的镜像商店
    • Docker官方的仓库: 他的服务器处于国外,所以下载速度较慢,不过我们可以通过换源解决。
    • daocloud国内仓库: 国内也有一些优秀的商店,他和Docker官方的仓库的区别类似与Github和Gitee的区别。
    • 网易云镜像中心

本博客主要解决在Windows环境下,快速上手使用Docker的问题,主要会介绍在Windows系统下Docker Desktop的安装,Docker 基础命令,比如说下载镜像、实例化镜像、使用容器、关闭容器、删除容器、使用仓库、创建镜像等模块的使用。其他系统应该除了安装外其他操作都可以通用。

Docker安装(Winodws)

开启 Hyper-V

程序与功能中,启用或关闭 Windows 功能

image-20250428162725009
ecb02f08-dae6-486f-a04d-59bb367bc266

下载 Docker Desktop

Get Started with Docker

image-20250428163024009

打开安装包加载一会后一般会弹出两个选项,在较旧的Windows10或之前的系统会出现如下所示的相关提示。我们把第一个选上,第二个根据需求选择即可。

在这里插入图片描述

而较新的Windows则会出现一个使用wsl2的提示(最少是1903以上,推荐为2004或更高版本),如果使用wsl2则docker的性能会发挥更好。如下图,这里推荐使用WSL2,如果之后安装完成后发生报错可能是WSL2版本比较老,需要更新导致的

image-20250428163938231

换源,使用阿里云

注册一个阿里云阿里云账号。进入管理控制台界面。

进入控制台

image-20250428164255993

进入产品与服务

image-20250428164322730

进入镜像加速器中,获取加速器地址

img

打开安装好的docker的主界面:在设置界面找到Docker Engin,将复制好的加速器地址填入即可

image-20250428164537614
1
2
3
4
5
6
7
8
9
10
11
12
{
"registry-mirrors":[
"仓库地址"
],
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": true
}

github上有个项目:docker_mirror,可以自动检测在你的网络环境下哪个源是最快的

启动Docker

windows下启动docker打开桌面的docker图标启动即可。 启动成功后,在Win + R 输入cmd进入windows命令行界面, 输入docker -v,查看docker版本:

image-20250428164845950

首先我们输入docker run hello-world是否会出现下图所示的提示,如果出现报错,环境配置可能出现了问题。

我在配置时候出现了Docker无法拉取镜像并提示网络超时的问题,这里以我为例子解决一下

image-20250428165752120

命令docker images显示说明images镜像中没有helloworld这个文件

image-20250429082113700

这时我们只需要创建一个daemon.json文件,然后进入这个文件中添加如下内容:

1
2
3
{ 
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}

然后保存退出,并重启docker

另一个错误

image-20250429081800880

运行Docker Desktop,要运行了之后再跑Docker的命令才行!

安装完成Docker后,默认每次开机的时候都会自动启动,但我们也可以手动启动,关闭或者重启Docker

1
2
3
4
5
6
# 启动docker
sudo service docker start
# 重启docker
sudo service docker restart
# 停止docker
sudo service docker stop

汉化 Docker Desktop

下载对应版本的中文语言包

访问 GitHub,下载适用于 Docker Desktop 的中文语言包,链接地址为:DockerDesktop-CN

选择对应你的版本

image-20250429084714943

导航至 Docker 的安装目录,路径默认为:

1
C:\Program Files\Docker\Docker\frontend\resources

在该目录下找到 app.asar 文件,建议先备份原文件,然后将复制的中文语言包中的 app.asar 文件粘贴并替换原有文件。

image-20250429084926061

完成替换后,请关闭 Docker Desktop,然后重新启动该程序。此时,Docker Desktop 应该以中文界面显示。

image-20250429085059211

WSL2安装

WSL(Windows Subsystem for Linux)是微软开发的一项技术,允许用户在Windows系统中直接运行完整的Linux环境,无需虚拟机。通过操作系统级虚拟化,WSL将Linux子系统无缝嵌入Windows,提供原生Linux命令行工具、软件包管理器及应用程序支持。它具有轻量化、文件系统集成、良好的交互性及开发效率提升等优点,消除了Windows与Linux之间的隔阂,尤其适合开发者和需在Windows平台上使用Linux工具的用户。

启用 WSL 功能

  • 打开开始菜单,在开始菜单中点击应用与程序
  • 在应用与程序选项里面,鼠标滚到最底下,点击程序与功能
  • 点击选项启用或关闭 Windows 功能
  • 在弹出的窗口中勾选 虚拟机平台(Virtual Machine Platform) 和 适用于 Linux 的 Windows 子系统。
image-20250428171228273

dos命令自动安装

对于 windows10 版本2004(内部版本19041或更高)及更新版本或者 windows11,可以直接用 dos命令安装

管理员打开 cmd 或者 powershell,依次

1
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
image-20250428172741625

启用虚拟机功能

1
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

WSL 2 设置为默认版本

1
wsl --set-default-version 2

更新 wsl 内核

1
wsl --update

列出发行版本并且选择一个安装

1
wsl --list --online
1
wsl --install -d Ubuntu-24.04
image-20250428172805603

之后使用 wsl.exe -d Ubuntu-24.04 启动

image-20250428173029325

下次想要使用 wsl 的话,在 cmd 或者 powershell 内输入 wsl 命令即可:

img

Windows 下的所有文件都被挂载在了 /mnt 下,在Windows 终端中的任意目录下输入 wsl,即可进入 Linux 对应的路径。

错误修复:

无法访问。你可能没有权限使用网络资源。请与这台服务器的管理员联系以查明你是否有访问权限

image-20250429075311855

WSL报告”请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化”

在 启用或关闭windows 功能中,查看是否勾选虚拟机平台

将注册表HKEY_LOCAL_MACHINE

和HKEY_LOCAL_MACHINE

两个键值中ProviderOrder的值从 cbfs6,P9NP,RDPNP,LanmanWorkstation,webclient改为 P9NP,RDPNP,LanmanWorkstation,webclient img

在资源管理器中的 「地址栏」输入\\wsl.localhost 或者 \\wsl.localhost\ 也有概率直接就好了

导出到D盘

注意接下来的操作需要使用 管理员权限的 cmd或pw

首先,查看可用的 WSL 发行版

1
wsl --list --online

查看你的版本

1
wsl -l -v 

关闭ubuntu

1
wsl --shutdown Ubuntu-24.04

导出Ubuntu到指定位置

1
wsl --export Ubuntu-24.04 D:\OtherLanguageSetting\WSL\Ubuntu-24.04\Ubuntu-24.04.tar

取消注册原有的 Ubuntu,注销

1
wsl --unregister Ubuntu-24.04

导入虚拟机到指定位置

1
wsl --import Ubuntu-24.04 D:\OtherLanguageSetting\WSL\Ubuntu-24.04 D:\OtherLanguageSetting\WSL\Ubuntu-24.04\Ubuntu-24.04.tar --version 2

现在在目录下,WSL2 发行版的文件存储在一个 虚拟磁盘映像文件(ext4.vhdx) 中,该文件用于存储整个 Ubuntu-20.04 文件系统,如下图所示:

image-20250429152524713

导入完成后,你可以启动 WSL

1
wsl -d Ubuntu-24.04

添加新用户并设置其管理员权限,需要 root 权限

切换到 root 用户

在 WSL 的 Ubuntu 系统中,使用 su 命令切换到 root 用户:

1
su -

执行该命令后,系统会提示你输入 root 用户的密码。如果你之前没有设置过 root 密码,可以使用以下命令设置:

1
sudo passwd root

按照提示输入当前用户的密码,然后设置新的 root 密码。

添加新用户

1
sudo adduser --allow-bad-names yourname

赋予新用户管理员权限

在 Ubuntu 系统中,管理员权限通常通过将用户添加到 sudo 组来实现。使用以下命令将 ErgouTree 用户添加到 sudo 组:

1
sudo usermod -aG sudo ErgouTree

验证

1
2
3
4
5
# 切换到新用户
su - ErgouTree

# 验证管理员权限
sudo ls /root

Ubuntu下安装 Docker

以我的 VMware 虚拟机上安装的 Ubuntu 20.5 为例子

修改复制粘贴的快捷键

首先,我十分建议大家去做一件事,那就是修改复制粘贴的快捷键

如果你弄好了 VMware Tools 的工具内容,那么你是可以进行跨平台粘贴的,但是由于 Ubuntu 的默认复制粘贴是 shift+ctrl+c/v,相当不适应

首先 ctrl+alt+t打开终端,点击终端的菜单栏的”编辑”,“首选项”

image-20250708110317094

之后进行修改就行了

准备工作

安装前先卸载操作系统默认安装的docker

1
sudo apt-get remove docker docker-engine docker.io containerd runc

安装必要支持

1
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-releaseg
image-20250708110014399

使用 curl 获取 Docker GPG 密钥并通过 gpg 进行处理

官方的

1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

官方的连不上,那就用阿里云的

1
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新源

1
2
sudo apt update
sudo apt-get update

添加 Docker 的软件源列表

1
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新 apt 缓存

1
sudo apt update

开始安装

安装命令

1
sudo apt install docker-ce docker-ce-cli containerd.io
image-20250708111838365

查看 docker 版本

1
sudo docker version
image-20250708111855605

查看Docker运行状态

1
sudo systemctl status docker
image-20250708112046824

安装 Docker 命令补全工具

1
2
3
4
5
6
sudo apt-get install bash-completion

sudo curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh

source /etc/bash_completion.d/docker.sh

允许非Root用户执行 docker 命令

当我们安装好了Docker之后,有两种方式来执行docker 命令

  • 在docker命令前加上sudo, 比如:sudo docker ps
  • sudo -i 切换至root用户,再执行docker 命令

是不是可以让当前用户在不切root,或者不加sudo 的情况下正常使用 docker 命令呢?答案是有的。可通过将该用户添加到 docker 用户组来实现。

创建或检查 docker 用户组

通常在安装 Docker 时,系统会自动创建 docker 用户组。不过,你还是可以通过以下命令来确认该用户组是否存在:

1
cat /etc/group | grep docker
image-20250708112254434

看样子是没有,此时可以使用以下命令创建:

1
sudo groupadd docker

使用 usermod 命令把需要使用 Docker 的用户添加到 docker 用户组中。我的用户名是 ergoutree,记得换成你的

1
sudo usermod -aG docker ergoutree

参数说明:

  • -a:表示 append,也就是将用户追加到指定的用户组,而不会覆盖该用户原本所属的其他用户组。
  • -G:用于指定目标用户组。

刷新用户组权限

1
newgrp docker

注销当前用户,然后重新登录也可以

验证配置

执行以下命令,检查非 Root 用户是否能够正常运行 Docker 命令:

1
docker run hello-world

确认用户是否已经正确添加到 docker 用户组

1
groups ergoutree  # 检查输出中是否包含 docker

重启 Docker 服务

1
sudo systemctl restart docker

确保 docker 用户组对其有读写权限

1
ls -l /var/run/docker.sock  # 应显示类似 srw-rw---- 1 root docker ... 的结果

更新.bashrc文件

我们需要编辑 ~/.bashrc文件,并在文件末尾增加如下一行,如果不在.bashrc文件中增加下面这一行命令

1
2
3
4
#如果没有此行命令,你会发现,当你每次打开新的终端
#你都必须先执行一次 “newgrp docker” 命令
#否则当前用户还是不可以执行docker命令
groupadd -f docker

使用 nano 打开

1
nano ~/.bashrc

文件管理器打开

1
source ~/.bashrc
image-20250708112613483

很明显,直接连连不上,因为 Docker 被墙了,所以我们需要配置镜像

换上阿里的源

我们需要在docker daemon 配置文件中增加国的可用的 docker hub mirror

从阿里云获取的专属镜像加速地址

image-20250708141100937
  • 登录阿里云官网,进入 容器镜像服务 页面。
  • 在左侧导航栏中,点击 “镜像工具” - “镜像加速器”,就能看到专属的镜像加速地址。

找到你的daemon.json 文件,通常在 /etc/docker/daemon.json 这个位置

在daemon.json 中增加

1
2
3
"registry-mirrors": [
"https://docker.m.daocloud.io"
]

通常来讲如果没有其它的配置,那么daemon.json完整的文件内容就是

1
2
3
4
5
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}

重载 Docker 配置并重启 Docker 服务

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

拉取一个镜像来验证是否成功切换到阿里云镜像源

1
docker pull hello-world
1
docker run hello-world

如果发现阿里云的镜像拉不下来,试试这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

查看 docker 系统信息 docker info,如果从输出结果中看到了 registry mirror 刚配置的内容地址,说明配置成功。

AtomHub 可信镜像中心也可以

可信镜像中心官网:https://atomhub.openatom.cn/

通过搜索需要的镜像名称,进行pull拉取,用法示例:

1
docker pull atomhub.openatom.cn/amd64/redis:7.0.13

现在我是拉取成功了,至此 Ubuntu 上安装docker是成功了

image-20250708141955927