Docker 入门

内容纲要

查看「Docker & Kubernetes 专题」获取更多相关内容


前言

简介

什么是容器

容器是一个通用性的技术,不指代某一个特定的软件产品。容器利用了 Linux 内核的几个特性:

  • cgroup - 对进程的 CPU、内存等资源的优先级和配额限制;
  • namespace - 对系统全局资源和进程局部资源的隔离;
  • chroot - 对文件系统的访问限制;

容器和虚拟机有什么区别

容器和虚拟机是非常相似的资源虚拟化技术。虚拟化是一个过程,在这个过程中,RAM、CPU、磁盘或网络等系统单一资源可以「虚拟化」并表示为多个资源,虚拟机是在物理基础设施和操作系统之上运行的应用程序。

相比之下,容器是直接运行在操作系统上的,因此容器可以更快速和高效地启动和运行应用程序。虚拟机提供更广泛的硬件支持和更高的灵活性,而容器具有更低的开销和更好的可移植性。

什么是 Docker

Docker 是容器技术的一种实现,虽然现在谈到容器大家都会想到 Docker 但它不是容器的一切。

Docker 是一个用于开发、运输和运行应用程序的开放平台。 Docker 能够将应用程序与基础架构分开,以便可以快速交付软件。使用 Docker 可以像管理应用程序一样管理基础设施。通过利用 Docker 的方法来快速传输、测试和部署代码,可以显着减少编写代码和在生产环境中运行代码之间的延迟。

准备

首先请前往 Get Started with Docker,注册 Docker Hub 帐户及安装 Docker。

注册 Docker Hub 帐户

Docker Hub 世界上最大的 Docker 容器映像存储库,使用 Docker Hub 可以探索世界上最大的容器映像存储库、在公共或私有存储库中共享和存储图像,或成为经过验证的映像发布者。

安装 Docker

Docker 是基于 Linux 容器技术实现的,对于 macOS 和 Windows 用户来说需要安装 Docker Desktop,它会使用一个小型虚拟机来运行需要的 Linux 环境,包括 Linux 桌面上如果你选择使用 Docker Desktop 也会使用一个小型虚拟机,如果你是 Linux 桌面用户并对此介意可以直接使用 Docker Engine。

对于 Linux 服务器系统的用户,可以通过 Docker 官方的安装脚本进行安装:

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

非特权用户使用脚本时脚本会使用 sudo,也就是说需要确保你的非特权用户配置好了 sudo,如果你不了解 sudo 可以查看 了解 Linux root 帐户及使用 sudo

以 Debian 为例,脚本会先安装必要实用程序如 apt-transport-httpsca-certificatescurl,然后添加 APT 的 Docker 官方软件源,然后使用 APT 安装 docker-cedocker-ce-clicontainerd.iodocker-compose-plugindocker-scan-plugin

这样做的好处是日后 Docker 需要升级时使用包管理器工具 APT 就可以升级,其他发行版如 CentOS 也是类似的操作:添加官方软件源然后使用包管理器进行安装,方便日后的维护如升级。

在安装完成后还会提示如果想要以非特权用户运行 Docker 可以使用命令:

/usr/bin/dockerd-rootless-setuptool.sh install
# 或将当前用户加入到 docker 群组
sudo usermod -aG docker ${USER}

Docker 安装检查

在安装好 Docker Desktop 后,可以打开「终端」:

docker version
Client:
 Cloud integration: v1.0.29
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.7
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:01:18 2022
 OS/Arch:           darwin/amd64
 Context:           default
 Experimental:      true

Server: Docker Desktop 4.15.0 (93002)
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.7
  Git commit:       3056208
  Built:            Tue Oct 25 18:00:19 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        770bd0108c32f3fb5c73ae1264f7e503fe7b2661
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

看到 ClientServer: Docker Engine - Community 的具体信息就表示 Docker 安装成功并运行了,通过该信息也可以知道 Docker 是一个 C/S 架构的软件。

如果是 Linux Server 通过脚本安装的 Docker 只看到 Client: Docker Engine - Community 的信息则表示 Server 端没有启动,可以通过命令:

# 启动 Docker
sudo systemctl start docker

# 设置开机自动运行 (可选)
sudo systemctl enable docker

启动后再次运行 docker version 就可以看到 Server: Docker Engine - Community 了。

除了 docker version 还可以使用 docker info 命令,它会显示当前 Docker 系统相关如 CPU、内存、容器数量、镜像数量、容器运行时、存储文件系统等信息

设置

安装完成后可以打开 Docker Desktop 进行一些设置,例如 Resources 中对于内存大小的时候进行一个设置

Docker Desktop Resources 设置