3221 字
16 分钟
如何在 Ubuntu/Windows 上使用 Docker

什么是 Docker?#

Docker 是一个使用 Golang 编写的开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

更多信息详见:runoob

说人话就是一个容器引擎,可以管理不同的容器(且容器之间不会相互影响)

为什么要使用 Docker?#

Docker 可以轻松提供一个容器环境,可以使用这个环境进行程序部署、交叉编译等… 对于不同的系统,Docker 相当于一个轻量级的虚拟机。可以实现构建环境一致而不必使用 Vmware 这种连硬件都模拟的重量级虚拟机。 不仅节约系统资源,而且性能足够。Docker 可以说是一个黑科技,百无一害。

举个例子:现在你弄好了一个 Nginx 服务器,想把它给你的朋友。但是你的朋友操作系统、架构都和你的不同。这个时候就可以让朋友使用 Docker 导入你这里的镜像(或者使用 Dockerfile)

1.如何安装 Docker?#

Docker 在不同操作系统有不同安装方法,这里我们只讨论 Linux (Ubuntu) 与 Windows。

在 Ubuntu 上安装 Docker#

对于 Ubuntu,你可以使用官方提供的安装方法进行安装:

  1. 设置 Docker 的 Apt 存储库
Terminal window
# 添加 Docker 的官方 GPG 密钥
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加仓库到 Apt 源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. 安装 Docker 的软件包
Terminal window
sudo -s # 将自身提权为超级用户
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

如果当前方法不行,可以使用 docker.io 完成一键安装:

Terminal window
apt update
apt install docker.io

在 Windows 上安装 Docker#

对于 Windows,Docker 可以选择使用 WSL2 或者 HyperV (不推荐)进行安装。

由于 Docker 并不推荐 HyperV 安装,我们这里就使用 WSL2 进行安装即可。

  1. 启用 WSL2

WSL2 默认可能没有启用,我们需要先启动它。 打开 PowerShell,输入:

Terminal window
OptionalFeatures

就可以打开 启用或关闭 Windows 功能 弹窗。这里我们往下拉,找到 适用于 Linux 的 Windows 子系统,勾选上确定并重启系统。

重启完成后我们需要更新下 WSL2,这是因为对于某些系统这里安装的是 WSL1,需要更新为 WSL2

再次打开 PowerShell,输入:

Terminal window
wsl --update --web-download

这里的 --web-download 主要是因为 WSL 默认使用 Windows 自带的商店进行下载(这个是真的很慢),所以这里就是让它使用远程更新。

更新完成后重启系统。接下来要安装 Docker。 点击 这里 打开 Docker Desktop 网页,选择你 Windows 当前的架构,进行安装。

这里安装选项有一个是 Use WSL 2 instead of Hyper-V (recommended),将它勾选上。

安装完成后需要登录账号,这里可以选择跳过。保持 Docker 在后台运行。

测试 Docker 是否正常运行#

接下来我们验证下 Docker 是否成功安装。我们可以用 Docker 的 hello-world 程序进行测试:

Terminal window
docker run hello-world

如果没有什么异常输出,那么我们已经成功安装 Docker 了。

Docker 的基本使用#

接下来就是学习使用 Docker 了。Docker 的命令虽然多,但是有很多是不常用的,我们就学习这些常用的命令即可。

在学习之前,我们需要了解下什么是镜像?什么是容器?

镜像,可以被类比为面向对象中的 ,也就是 Class。它提供了一个模板。比如一个 Person 类中规定了我作为人应该有什么特征,有什么行为。

容器,可以被类比为面向对象中实例化的一个类的 实例。我属于这个 ,但是我有我自己特殊的属性。比如实例化的 Person 中我的年龄是 28,另外一个是 29 这样。

这就是镜像与容器的区别。镜像是一个模板,容器是从模板出来的独立个体。

  1. 如何获取镜像? 获取镜像有两种方法:一种是 自己做一个(使用 Dockerfile),另一种是 从别人做好的去拿

对于第一种:自己做一个。#

先创建一个 Dockerfile 文件,我们使用 FROM 来指定基于的镜像。

例如:FROM ubuntu,就是基于 ubuntu 镜像去完成制作。

然后我们可以使用 RUN 来执行命令。例如:RUN sudo apt update

如果要构建镜像,我们可以使用 docker build 完成。

例如:$ docker build -t nginx:v3 .,就是在当前目录构建镜像,新镜像为 nginx:v3

更多命令详见:Docker Dockerfile

对于第二种:从别人做好的去拿。#

可以使用 docker pull 命令完成这件事,我们只需要提供一个需要的镜像即可。

Terminal window
docker pull [可选参数] 镜像名称[:标签|@SHA256 摘要]

常用选项:

  • —all-tags, -a: 下载指定镜像的所有标签。
  • —disable-content-trust: 跳过镜像签名验证。

拉取镜像会很吃网络,尽量挂梯子(当然换源也可以) 拉取完毕后,就可以学习如何创建一个容器了。

  1. 如何创建并启动容器?

我们可以使用 docker run 创建并启动一个新容器。

Terminal window
docker run [可选参数] 镜像 [命令] [命令参数...]

常用参数:

  • -d: 后台运行容器并返回容器 ID。
  • -it: 交互式运行容器,分配一个伪终端。
  • —name: 给容器指定一个名称。
  • -p: 端口映射,格式为 host_port
  • -v: 挂载卷,格式为 host_dir
  • —rm: 容器停止后自动删除容器。
  • —env 或 -e: 设置环境变量。
  • —network: 指定容器的网络模式。
  • —restart: 容器的重启策略(如 no、on-failure、always、unless-stopped)。
  • -u: 指定用户。

一般我们使用 ubuntu 这种系统镜像,可选参数为 -it 就可以。解释一下就是允许标准输入,并启动一个终端环境来操作容器。命令参数在这里一般是 /bin/bash,当然如果要直接运行某个程序那就输入那个程序路径。

对于端口映射。比如使用 Nginx 的时候,可以通过 docker run -p 8080:80 nginx 将主机的 8080 端口映射到容器的 80 端口。

还有挂载卷,这也是个很常用的功能。可以通过它实现文件的直接交互。而不需要 docker cp 复制文件。可以通过 docker run -v /host/data:/container/data ubuntu,就是将主机的 /host/data 挂载到容器的 /container/data 目录。

--network 参数就是使用主机网络配置。例如主机配置了系统代理那么容器也会使用同样配置。

  1. 如何启动/停止容器

容器是可以被主动启动/停止的。有时候我们需要停止容器释放资源,或者重启启动一个已经运行完毕的容器。可以使用 docker startdocker stop 命令完成这件事。

启动一个容器:

Terminal window
docker start [可选参数] 容器 [其他容器...]

常用参数:

  • -a: 附加到容器的标准输入输出流。
  • -i: 附加并保持标准输入打开。

一般要启动一个容器,直接 docker start 容器 就可以了。

停止一个容器:

Terminal window
docker stop [可选参数] 容器 [其他容器...]

常用参数:

  • -t, —time: 停止容器之前等待的秒数,默认是 10 秒。

一般要停止一个容器,直接 docker stop 容器 就可以了。

重新启动一个容器:

Terminal window
docker restart [可选参数] 容器 [其他容器...]

常用参数:

  • -t, —time: 停止容器之前等待的秒数,默认是 10 秒。
  1. 如何对运行中的容器执行一个新的命令?

我们可以使用 docker exec 对运行中的容器执行新命令:

docker exec [可选参数] 容器 命令 [命令参数...]

常用参数:

  • -d, —detach: 在后台运行命令。
  • —detach-keys: 覆盖分离容器的键序列。
  • -e, —env: 设置环境变量。
  • —env-file: 从文件中读取环境变量。
  • -i, —interactive: 保持标准输入打开。
  • —privileged: 给这个命令额外的权限。
  • —user, -u: 以指定用户的身份运行命令。
  • —workdir, -w: 指定命令的工作目录。
  • -t, —tty: 分配一个伪终端。

一般我们使用 ubuntu 这种系统镜像,可选参数为 -it 就可以。解释一下就是允许标准输入,并启动一个终端环境来操作容器。命令参数在这里一般是 /bin/bash,当然如果要直接运行某个程序那就输入那个程序路径。

如果要直接列出容器中某个目录,也可以不进入伪终端。例如:docker exec my_container ls /app。就是列出 my_container/app 目录下的文件和文件夹。

--privileged 参数在某些情况下也会使用。通过 --privileged=true 后,我们可以做很多平时不能做的事情:例如加载内核模块、直接操作硬件设备等。没有特殊需求不建议使用这个参数,因为不安全。

  1. 如何查看存在的镜像?

我们可以使用 docker images 查看已存在的镜像。

Terminal window
docker images [可选参数] [仓库[:标签]]

常用参数:

  • -a, —all: 显示所有镜像(包括中间层镜像)。
  • —digests: 显示镜像的摘要信息。
  • -f, —filter: 过滤输出,基于提供的条件。
  • —format: 使用 Go 模板格式化输出。
  • —no-trunc: 显示完整的镜像 ID。
  • -q, —quiet: 只显示镜像 ID。

一般查看所有镜像,直接 docker images 就可以了。

  1. 如何查看存在的容器?

我们可以使用 docker ps 查看已存在的容器。

Terminal window
docker ps [可选参数]

常用参数:

  • -a, —all: 显示所有容器,包括停止的容器。
  • -q, —quiet: 只显示容器 ID。
  • -l, —latest: 显示最近创建的一个容器,包括所有状态。
  • -n: 显示最近创建的 n 个容器,包括所有状态。
  • —no-trunc: 不截断输出。
  • -s, —size: 显示容器的大小。
  • —filter, -f: 根据条件过滤显示的容器。
  • —format: 格式化输出。

一般我们都是使用 docker ps -a 来查看容器。因为容器在停止后使用 docker ps 是不显示的,因此我们这里使用 -a 列出所有。

  1. 如何删除镜像/容器?

有时候我们想要清理那些不需要的资源,就可以选择删除 镜像/容器 来节省空间。我们可以使用 docker rmi 来删除镜像:

Terminal window
docker rmi [可选参数] 镜像 [其他镜像...]

常用参数:

  • -a, —all-tags: 指定仓库名称时,删除该仓库下的所有镜像。
  • -f, —force: 强制删除镜像,即使该镜像被容器使用。
  • —help: 打印帮助信息并退出。
  • —no-prune: 不删除悬空的父镜像。
  • -q, —quiet: 安静模式,不显示删除镜像的详细信息。

一般直接使用 docker rmi 镜像 就可以了。

我们可以使用 docker rm 来删除容器:

Terminal window
docker rm [可选参数] 容器 [其他容器...]

常用参数:

  • -f, —force: 强制删除正在运行的容器(使用 SIGKILL 信号)。
  • -l, —link: 删除指定的连接,而不是容器本身。
  • -v, —volumes: 删除容器挂载的卷。

一般删除容器之前都是先 docker stop 这个容器才能删除。当然加上 -f 可以强制删除。

  1. 重命名容器

有时候我们需要重命名一个容器,这个三时候就可以使用 docker rename 实现:

Terminal window
docker rename <当前容器名称或ID> <新容器名称>
  1. 在主机和容器间传输文件。

有时候我们需要向容器上传文件,或者从容器里下载文件。这个时候使用 docker cp 即可完成这件事。

Terminal window
# 上传文件到容器
docker cp [可选参数] 原路径 容器:目标路径
# 从容器下载文件
docker cp [可选参数] 容器:原路径 目标路径

docker cp 也是经常使用的命令,需要熟练掌握。

  1. 导入/导出镜像

有时候我们需要将镜像变成一个文件并保存。我们就可以使用 docker save 将镜像保存为一个 .tar 文件。

Terminal window
docker save [可选参数] 镜像 [其他镜像...]

常用参数:

  • -o, —output: 指定输出文件的路径。

一般我们直接使用 docker save -o 文件路径 就可以了。

我们也可以使用 docker load 将这个 .tar 文件加载为一个镜像:

Terminal window
docker load [可选参数]

常用参数:

  • -i, —input: 指定输入文件的路径。
  • -q, —quiet: 安静模式,减少输出信息。

一般我们直接使用 docker load -i 文件路径 就可以了。

如何在 Ubuntu/Windows 上使用 Docker
https://mucute-qwq.github.io/posts/how-to-use-docker/
作者
一剪沐橙
发布于
2025-08-29
许可协议
CC BY-NC-SA 4.0