得益于与商业性的优雅结合,Docker背后拥有大量的优秀开发者为其提供技术支持,而这个优势所造就的结果之一,就是Docker拥有丰富且完善的安装体系,可以很轻松的通过多种方式安装和运行Docker。
一、安装前的准备
由于Docker容器实现本身就采用了Linux内核中很多的特性,所以它自然与Linux系统亲密性很高,所以可以很轻松的将Docker Engine安装在Linux系统中。
A、Docker Engine的版本
对于Docker Engine来说,其主要分为两个系列:
- 社区版(CE - Community Edition)
- 企业版(EE - Enterprise Edition)
社区版CE主要提供了Docker中的容器管理等基础功能,主要针对开发者和小型团队进行开发和试验。而企业版EE则在社区版的基础上增加了诸如容器管理、镜像管理、插件、安全等额外服务与功能,为容器的稳定运行提供了支持,适合于中大型项目的线上运行。
社区版和企业版的另一区别就是免费与收费了。对于开发者来说,社区版已经提供了Docker所有核心的功能,足够满足在开发、测试中的需求,所以直接选择使用社区版进行开发即可。
另外一个角度,Docker Engine的迭代版本又会分为稳定版(Stable release)和预览版(Edge release)。不论是稳定版还是预览版,它们都会以发布时的年月来命名版本号,例如如17年03月的版本,版本号就是17.03。
Docker Engine的稳定版固定为每三个月更新一次,而预览版则每月都会更新。在预览版中可以及时掌握到最新的功能特性,不过这对于仅是使用Docker的开发者来说,意义并不是特别重大的,所以还是推荐安装更有保障的稳定版本。
在主要版本之外,Docker官方也以解决Bug为主要目的,不定期发布次要版本。次要版本的版本号由主要版本和发布序号组成,如17.03.2就是对17.03版本的第二次修正。
B、Docker的环境依赖
由于Docker的容器隔离依赖于Linux内核中的相关支持,所以使用Docker首先需要确保安装机器的Linux kernel中包含Docker所需要使用的特性。以目前Docker官方主要维护的版本为例,需要使用基于Linux kernel 3.10以上版本的Linux系统来安装Docker。
在较低版本的Linux系统中也能安装Docker,不过只能是版本较低的Docker,功能存在一些缺失,或者与最新版本有所区别。
二、安装Docker
CentOS 7
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repoyum install -y yum-utils lvm2 device-mapper-persistent-data
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
# 如果网速慢,可以使用清华大学repo仓库安装
cd /etc/yum.repos.d
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
vim docker-ce.repo
# 替换为清华大学源
%s@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@
yum repolist
docker-ce-stable
yum install -y docker-ce
三、使用Docker
在安装Docker完成之后,需要先启动docker daemon使其能够提供Docker服务,这样才能正常使用Docker。
在通过软件包的形式安装Docker Engine时,安装包已经在Linux系统中注册了一个Docker服务,所以不需要直接启动docker daemon对应的dockerd
这个程序,而是直接启动Docker 服务即可。
systemctl start docker
# 开机自启动
systemctl enable docker
A、docker version
docker version能够显示Docker C/S 结构中的服务端(docker daemon)和客户端(docker CLI)相关的版本信息。
docker version
Client:
Version: 18.09.2
API version: 1.39
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 04:13:27 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.2
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 03:47:25 2019
OS/Arch: linux/amd64
Experimental: false
在默认情况下,docker CLI连接的是本机运行的docker daemon,由于docker daemon和docker CLI通过RESTful接口进行了解耦,所以也能修改配置用于操作其他机器上运行的docker daemon 。
B、docker info
docker info可以看到正在运行的Docker Engine实例中运行的容器数量,存储的引擎等等信息。
docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.09.2
Storage Driver: devicemapper
Pool Name: docker-253:0-201391187-pool
Pool Blocksize: 65.54kB
Base Device Size: 10.74GB
Backing Filesystem: xfs
Udev Sync Supported: true
Data file: /dev/loop0
Metadata file: /dev/loop1
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 11.73MB
Data Space Total: 107.4GB
Data Space Available: 18.36GB
Metadata Space Used: 581.6kB
Metadata Space Total: 2.147GB
Metadata Space Available: 2.147GB
Thin Pool Minimum Free Space: 10.74GB
Deferred Removal Enabled: true
Deferred Deletion Enabled: true
Deferred Deleted Device Count: 0
Library Version: 1.02.149-RHEL7 (2018-07-20)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9754871865f7fe2f4e74d43e2fc7ccd237edcbce
runc version: 09c8266bf2fcf9519a651b04ae54c967b9ab86ec
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-862.3.3.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 7.639GiB
Name: localhost.localdomain
ID: 3QUQ:B3TT:IG5X:XYYT:KYOQ:ZJV2:QPGB:5AIS:CNNI:FRXW:WYQR:BHVW
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
C、配置国内镜像源
在很多编程语言中,为了更好的提供依赖包的管理,通常都会有一些组织研发相应的包管理工具,例如Java的Maven,Python的pip,Node.js的NPM等等。而这些管理工具背后,也对应着一个默认的依赖包仓库。
由于众所周知的原因,直接连接这些位于国外服务器上的仓库去获取依赖包速度是非常慢的,通常会采用国内一些组织或开发者贡献的国内镜像仓库。
在Docker中也有一个由官方提供的中央镜像仓库,不过经常莫名其妙的完全无法访问。为了解决这个问题,最佳的方式依旧是在国内找一个镜像仓库的镜像源进行替换。
# 新建文件
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
# 重启docker即可
systemctl restart docker
参考:
http://blog.poetries.top/2018/11/20/docker-base/
Announcing Docker Enterprise Edition - Docker Blog