搭建 Docker 运行环境
  猿来如此 2023年06月25日 185 0

既然 Docker 是一款实用软件,我们就不得不先从它的安装说起,只有让 Docker 运行在我们的计算机上,才能更方便我们对 Docker 相关知识和使用方式的学习。得益于与商业性的优雅结合,Docker 背后拥有大量的优秀开发者为其提供技术支持,而这个优势所造就的结果之一,就是 Docker 拥有丰富且完善的安装体系,我们可以很轻松的通过多种方式安装和运行 Docker。

安装前的准备

由于 Docker 容器实现本身就采用了 Linux 内核中很多的特性,所以它自然与 Linux 系统亲密性很高,所以我们可以很轻松的将 Docker Engine 安装在 Linux 系统中。

Docker Engine 的版本

在安装 Docker 之前,我们先来了解一下 Docker 的版本定义,这有利于我们在之后的开发中选择和使用合适的 Docker 版本。

对于 Docker Engine 来说,其主要分为两个系列:

  • 社区版 ( CE, Community Edition )
  • 企业版 ( EE, Enterprise Edition )

社区版 ( Docker Engine CE ) 主要提供了 Docker 中的容器管理等基础功能,主要针对开发者和小型团队进行开发和试验。而企业版 ( Docker Engine EE ) 则在社区版的基础上增加了诸如容器管理、镜像管理、插件、安全等额外服务与功能,为容器的稳定运行提供了支持,适合于中大型项目的线上运行。

社区版和企业版的另一区别就是免费与收费了。对于我们开发者来说,社区版已经提供了 Docker 所有核心的功能,足够满足我们在开发、测试中的需求,所以我们直接选择使用社区版进行开发即可。在这本小册中,所有的内容也是围绕着社区版的 Docker Engine 展开的。

从另外一个角度,Docker Engine 的迭代版本又会分为稳定版 ( Stable release ) 和预览版 ( Edge release )。不论是稳定版还是预览版,它们都会以发布时的年月来命名版本号,例如如 17 年 3 月的版本,版本号就是 17.03。

Docker Engine 的稳定版固定为每三个月更新一次,而预览版则每月都会更新。在预览版中可以及时掌握到最新的功能特性,不过这对于我们仅是使用 Docker 的开发者来说,意义并不是特别重大的,所以我还是更推荐安装更有保障的稳定版本。

在主要版本之外,Docker 官方也以解决 Bug 为主要目的,不定期发布次要版本。次要版本的版本号由主要版本和发布序号组成,如:17.03.2 就是对 17.03 版本的第二次修正。

Docker 的环境依赖

由于 Docker 的容器隔离依赖于 Linux 内核中的相关支持,所以使用 Docker 首先需要确保安装机器的 Linux kernel 中包含 Docker 所需要使用的特性。以目前 Docker 官方主要维护的版本为例,我们需要使用基于 Linux kernel 3.10 以上版本的 Linux 系统来安装 Docker。

也许 Linux kernel 的版本还不够直观,下面的表格就直接展示了 Docker 对主流几款 Linux 系统版本的要求。

操作系统 支持的系统版本
CentOS CentOS 7 ,8 ,9
Debian Debian Wheezy 7.7 (LTS) ,Debian Jessie 8 (LTS) , Debian Stretch 9 ,Debian Stretch 10
Fedora Fedora 26 ,Fedora 27
Ubuntu Ubuntu Trusty 14.04 (LTS) ,Ubuntu Xenial 16.04 (LTS) ,Ubuntu Artful 17.10

在较低版本的 Linux 系统中也能安装 Docker,不过只能是版本较低的 Docker,其功能存在一些缺失,或者与最新版本有所区别。我们主要以较新版本的 Docker 功能和操作作为介绍,所以如果条件允许,建议将系统升级到支持最新版本 Docker 的系统版本。

在 Linux 系统中安装 Docker

因为 Docker 本身就基于 Linux 的核心能力,同时目前主流的 Linux 系统中所拥有的软件包管理程序,已经可以很轻松的帮助我们处理各种依赖问题,所以在 Linux 中安装 Docker 并非什么难事。

Docker 已经为我们准备了好了各系统的安装包,毕竟安装 Docker 并不是我们所要掌握的重点,所以这里我就直接给出安装的命令了。

CentOS

$ sudo yum install yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce
$ sudo systemctl enable docker
$ sudo systemctl start docker

Debian

$ sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
$ sudo systemctl enable docker
$ sudo systemctl start docker

Fedora

$ sudo dnf -y install dnf-plugins-core
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
$ sudo dnf install docker-ce
$ sudo systemctl enable docker
$ sudo systemctl start docker

Ubuntu

$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
$ sudo systemctl enable docker
$ sudo systemctl start docker

上手使用

安装Docker完成,需要先启动 docker daemon 使其能够为我们提供Docker服务,这样我们才能正常使用 Docker。

在我们通过软件包的形式安装 Docker Engine 时,安装包已经为我们在 Linux 系统中注册了一个 Docker 服务,所以我们不需要直接启动 docker daemon 对应的 dockerd 这个程序,而是直接启动 Docker 服务即可。启动的 Docker 服务的命令其实我已经包含在了前面谈到的安装命令中,也就是:

$ sudo systemctl start docker

当然,为了实现 Docker 服务开机自启动,我们还可以运行这个命令:

$ sudo systemctl enable docker

docker version

在 Docker 服务启动之后,我们先来尝试一个最简单的查看 Docker 版本的命令:docker version

$ docker version Client: Docker Engine - Community Version: 24.0.0 API version: 1.43 Go version: go1.20.4 Git commit: 98fdcd7 Built: Mon May 15 18:49:38 2023 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 24.0.0 API version: 1.43 (minimum version 1.12) Go version: go1.20.4 Git commit: 1331b8c Built: Mon May 15 18:48:02 2023 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.21 GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8 runc: Version: 1.1.7 GitCommit: v1.1.7-0-g860f061 docker-init: Version: 0.19.0 GitCommit: de40ad0

这个命令能够显示 Docker C/S 结构中的服务端 ( docker daemon ) 和客户端 ( docker CLI ) 相关的版本信息。在默认情况下,docker CLI 连接的是本机运行的 docker daemon ,由于 docker daemon 和 docker CLI 通过 RESTful 接口进行了解耦,所以我们也能修改配置用于操作其他机器上运行的 docker daemon 。

docker info

如果想要了解 Docker Engine 更多相关的信息,我们还可以通过 docker info 这个命令。

$ docker info Client: Docker Engine - Community Version: 24.0.0 Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.10.4 Path: /usr/libexec/docker/cli-plugins/docker-buildx compose: Docker Compose (Docker Inc.) Version: v2.17.3 Path: /usr/libexec/docker/cli-plugins/docker-compose scan: Docker Scan (Docker Inc.) Version: v0.23.0 Path: /usr/libexec/docker/cli-plugins/docker-scan Server: Containers: * Running: * Paused: 0 Stopped: 0 Images: * Server Version: 24.0.0 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Using metacopy: false Native Overlay Diff: true userxattr: false Logging Driver: json-file Cgroup Driver: systemd Cgroup Version: 2 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: io.containerd.runc.v2 runc Default Runtime: runc Init Binary: docker-init containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8 runc version: v1.1.7-0-g860f061 init version: de40ad0 Security Options: seccomp Profile: builtin cgroupns Kernel Version: 5.14.0-312.el9.x86_64 Operating System: CentOS Stream 9 OSType: linux Architecture: x86_64 CPUs: * Total Memory:*GiB Name: * ID: * Docker Root Dir: /var/lib/docker Debug Mode: false Experimental: false Insecure Registries: 127.0.0.1:5000 127.0.0.0/8 ##镜像地址 Registry Mirrors: ##官方镜像 https://registry.docker-cn.com/ ##阿里镜像 https://jkfdsf2u.mirror.aliyuncs.com/ Live Restore Enabled: false WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled

docker info 这条命令的结果中,我们可以看到正在运行的 Docker Engine 实例中运行的容器数量,存储的引擎等等信息。

配置国内镜像源

在很多编程语言中,为了更好的向大家提供依赖包的管理,通常都会有一些组织研发相应的包管理工具,例如 Java 的 Maven,PHP 的 Composer,Node.js 的 NPM 等等。而这些管理工具背后,也对应着一个默认的依赖包仓库。

由于众所周知的原因,我们直接连接这些位于国外服务器上的仓库去获取依赖包速度是非常慢的,这时候我们通常会采用国内一些组织或开发者贡献的国内镜像仓库 ( 注意,这里的“镜像”是指复制于国外源的意思,而不是 Docker 里的镜像 )。

在 Docker 中也有一个由官方提供的中央镜像仓库,不过,它与之前我们所说的国外依赖包仓库一样,除了慢的可怜以外,还经常莫名其妙的完全无法访问。

为了解决这个问题,我们最佳的方式依旧是在国内找一个镜像仓库的镜像源进行替换。很感谢 DaoCloud、阿里云等企业的支持,在国内我们可以找到许多镜像源。这里我们给出一个由 Docker 官方提供的国内镜像源:
https://registry.docker-cn.com

在 Linux 环境下,我们可以通过修改 /etc/docker/daemon.json ( 如果文件不存在,你可以直接创建它 ) 这个 Docker 服务的配置文件达到效果。

{ "registry-mirrors": [ "https://registry.docker-cn.com" ] }

重新启动 docker daemon,生效配置

$ sudo systemctl restart docker

验证镜像源是否生效,使用docker info 查看上面【docker info注释】配置镜像地址有没有配置镜像地址,若存在就是已经生效。

以上的安装和配置就完成了。

最后一次编辑于 2023年06月27日 0

暂无评论