在工程师小王完成对Docker技术的调研后,公司安排小王编写Docker的安装手册,供公司相关技术人员学习,以便在公司内部推广该技术。
Docker采用客户端/服务器(Client/Server,C/S)架构模式,Docker架构如图1-3所示。Docker Daemon作为服务器端接收客户端的请求,负责构建、运行和分发容器。客户端和服务器端可以运行在同一个Host上,客户端也可以通过Socket或REST API与远程的服务器端通信。
图1-3 Docker架构
Docker Daemon可以守护进程在宿主机后台运行,用户并不直接与其进行交互,而是通过Docker Client间接和其通信。Docker Client以系统命令的形式存在,用户使用Docker命令来与Docker Daemon交互。Docker Daemon接收用户指令并与Docker共同守护进程通信。
Docker的核心组件包括Docker客户端(Client)、Docker服务器(Docker Daemon)、Docker镜像(Image)、Docker仓库和Docker容器(Container)。
Docker客户端通过命令行或者其他工具使用Docker API与Docker的守护进程通信。
Docker Daemon是服务器组件,以Linux后台服务的方式运行。
Docker镜像就是一个只读的模板,镜像可以用于创建Docker容器,每一个镜像由一系列的层组成。例如,CentOS镜像中安装nginx,就成为nginx镜像,此时Docker镜像的层级概念就体现出来了:其底层是一个CentOS操作系统镜像,上面叠加一个nginx层,此时可以将CentOS操作系统镜像称为nginx镜像层的父镜像。常用的生成镜像的方法主要有以下3种。
(1)创建新镜像。
(2)下载并使用他人创建好的现成的镜像。
(3)在现有镜像上创建新的镜像。
用户可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称为Dockerfile,通过执行“docker build <docker-file>”命令可以构建出Docker镜像。这部分内容在后面的项目中会有详细说明。
Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所。有时候,人们会把Docker仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库,每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签来进行区分。
Docker仓库分为公有(Public)仓库和私有(Private)仓库两种形式。目前,最大的公有仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内不少云服务提供商(如时速云、阿里云等)提供了仓库的本地源,可以提供稳定的国内访问。当然,Docker也支持用户在本地网络中创建一个私有仓库。当用户创建了自己的镜像之后,可以使用push命令将其上传到公有或者私有仓库中,这样,当用户需在另一台主机上使用该镜像时,只需从仓库获取镜像。
Docker利用容器来运行应用。容器是从镜像创建的运行实例,它可以被启动、开始、终止、删除。容器是一个隔离环境,多个容器之间不会相互影响,以保证容器中的应用运行在一个相对安全的环境中。
Docker的早期版本是docker-io,版本号是1.*,最新版是1.13。Docker从1.13版本之后采用时间线的方式作为版本号,分为Docker CE(社区版)和Docker EE(企业版)。
Docker CE(社区版)是免费提供给个人开发者和小型团体使用的,Docker EE(企业版)会提供额外的收费服务,如经过官方测试认证的基础设施、容器、插件等。
Docker现在的版本格式为<YY.MM>。Docker CE(社区版)按照Stable和Edge两种方式发布,每个季度更新Stable版本,每个月份更新Edge版本。例如,使用基于月份的发行版本,19.03的第1版就指向17.03.0,如果有漏洞/安全修复需要发布,那么将会指向19.03.1等。
(1)检查安装Docker的基本要求:64位CPU架构的计算机,目前不支持32位CPU架构的计算机;系统的Linux内核版本为3.10及以上;开启CGroups和namespace功能。本任务是将Docker安装在VMware Workstation虚拟机中,因此需保证将虚拟机的网卡设置为桥接模式。
(2)通过uname -r命令查看当前系统的内核版本。
[root@localhost ~]# uname -r //查看Linux内核版本 3.10.0-327.el7.x86_64
(3)关闭防火墙,并查询防火墙是否关闭。
[root@localhost ~]# systemctl stop firewalld //关闭防火墙 [root@localhost ~]# systemctl disable firewalld //设置开机禁用防火墙 [root@localhost ~]# systemctl status firewalld //查看防火墙状态 firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead)
若出现“Active: inactive (dead)”提示,则表示防火墙已关闭。
(4)修改/etc/selinux目录中的config文件,设置SELINUX为disabled后,保存并退出文件。
[root@localhost ~]# setenforce 0 [root@localhost ~]# vi /etc/selinux/config SELINUX=disabled // 将 SELINUX设置为disabled
(5)修改网卡配置信息。
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=static IPADDR=192.168.51.101 // 设置IP地址为192.168.51.101 NETMASK=255.255.255.0 // 设置子网掩码为255.255.255.0 GATEWAY=192.168.51.1 // 设置网关地址为192.168.51.1 DNS1=114.114.114.114 // 设置DNS服务器地址为114.114.114.114 ONBOOT=yes
保存退出,重启网卡。
[root@localhost ~]# systemctl restart network
测试与外网的连通性。
[root@localhost ~]# ping -c 4 www.sina.com.cn ...... --- spool.grid.sinaedge.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 2.722/3.228/3.647/0.337 ms
从“4 packets transmitted, 4 received, 0% packet loss”提示信息可知,与外网是连通的。
(6)配置时间同步,可以选用公网NTPD服务器或者自建NTPD服务,本书使用阿里云的时间服务器。
[root@localhost ~]# yum -y install ntpdate [root@localhost ~]# ntpdate ntp1.aliyun.com
(7)如果安装过旧版本,则需卸载已安装的旧版本;反之,此步骤可以跳过。
[root@localhost ~ ]# yum remove docker docker-common docker-selinux docker-engine 10
(8)安装必需的软件包。
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
(9)设置docker-ce的yum源。
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(10)查看仓库中的所有Docker版本,根据需求选择特定版本进行安装,本书选择安装Docker 18.03.0.ce版本。
[root@localhost ~]# yum makecache fast [root@localhost ~]# yum list docker-ce -showduplicates //查看Docker版本信息 Loading mirror speeds from cached hostfile Loaded plugins: fastestmirror docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable ...... Available Packages [root@localhost ~ ]# yum install -y docker-ce-18.03.0.ce // 安装 Docker 18.03.0.ce
也可以使用如下命令进行安装Docker最新版本。
[root@localhost ~]# yum install -y docker-ce // 安装docker-ce最新版
说明: 本书选择安装Docker 18.03.0.ce版本。
(11)启动Docker,服务并设置Docker服务开机自启动。
[root@localhost ~]# systemctl start docker //启动Docker服务 [root@localhost ~]# systemctl enable docker //设置开机自启动Docker服务
利用ps命令,查看Docker进程是否已启动。
[root@localhost ~]# ps -ef | grep docker root 14422 1 0 12:07 ? 00:00:00 /usr/bin/dockerd root 14427 14422 1 12:07 ? 00:00:01 docker-containerd... root 14681 2496 0 12:09 pts/1 00:00:00 grep --color=auto docker
也可利用docker version命令查看已安装Docker的版本。
[root@localhost ~]# docker version Client: Version: 18.03.0-ce API version: 1.37 Go version: go1.9.4 Git commit: 0520e24 Built: Wed Mar 21 23:09:15 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.03.0-ce API version: 1.37 (minimum version 1.12) Go version: go1.9.4 Git commit: 0520e24 Built: Wed Mar 21 23:13:03 2018 OS/Arch: linux/amd64 Experimental: false
(12)配置镜像加速器。因国内访问Docker Hub 有时会遇到困难,故可以配置镜像加速器。国内很多云服务商提供了加速器服务,如阿里云加速器、DaoCloud 加速器、灵雀云加速器等,在此选择阿里云加速器。
[root@localhost ~]# vi /etc/docker/daemon.json
添加以下内容后,保存并退出,并重启Docker服务。
{ "registry-mirrors": ["https://x3n9jrcg.mirror.aliyuncs.com"] } [root@localhost ~]# systemctl daemon-reload // 重新加载系统配置 [root@localhost ~]# systemctl restart docker // 重启Docker服务
(13)运行nginx镜像来测试是否安装成功。
[root@localhost ~]# docker run -dit -p 80:80 nginx:latest
打开浏览器,在地址栏中输入“http://192.168.51.101”,若显示图1-4所示的容器内容,则表示Docker环境已经安装完成,并能正常运行。
(1)在可联网的主机上制作Docker本地安装包。
①关闭firewalld防火墙,并临时关闭SELINUX。
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0
图1-4 显示的容器内容
②创建离线包存储目录,并设置读写权限。
[root@localhost ~]# mkdir -p /opt/docker [root@localhost ~]# chmod -R 777 /opt/docker
③下载离线包到/opt/docker目录中。
[root@localhost ~ ]# yum install --downloadonly --downloaddir=/opt/docker yum-utils device-mapper-persistent-data lvm2 createrepo
④安装必备的软件包,并进行时间同步。
[root@localhost ~]# yum -y install ntpdate yum-utils createrepo [root@localhost ~]# ntpdate ntp1.aliyun.com
⑤创建Docker的yum源。
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
⑥更新yum源索引,下载离线docker-ce包,版本号为18.03.0。
[root@localhost ~]# yum makecache fast [root@localhost ~ ]# yum install --downloadonly --downloaddir=/opt/docker/ docker-ce-18.03.0.ce
⑦下载密钥文件。
[root@localhost ~]# cd /opt/docker/ [root@localhost docker]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
⑧初始化安装源repodata。
[root@localhost docker]# createrepo -pdo /opt/docker /opt/docker 1[root@localhost docker]# createrepo --update /opt/docker
⑨将制作的安装文件打包。
[root@localhost docker]# tar -zcvf docker-local.tar.gz * [root@localhost docker]# ls docker-local.tar.gz docker-local.tar.gz
docker-local.tar.gz文件为制作好的离线安装源,将该文件导出。
(2)在离线的主机上安装Docker。
①利用uname -r命令查看当前系统的内核版本。
[root@localhost ~]# uname -r //查看Linux内核版本 3.10.0-327.el7.x86_64
②关闭防火墙,并查询防火墙是否关闭。
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld [root@localhost ~]# systemctl status firewalld firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead)
若出现“Active: inactive (dead)”提示,则表示防火墙已关闭。
③修改/etc/selinux目录中的config文件,设置SELINUX为disabled后,保存并退出文件。
[root@localhost ~]# setenforce 0 [root@localhost ~]# vi /etc/selinux/config SELINUX=disabled // 将 SELINUX设置为disabled
④将docker-local.tar.gz文件上传到离线的主机,本书将文件复制到/opt目录,将docker-local.tar.gz文件解压到/opt/docker目录。
[root@localhost ~]# mkdir -p /opt/docker [root@localhost ~]# tar -zxvf /opt/docker-local.tar.gz -C /opt/docker
⑤配置docker-ce的yum源。
[root@localhost ~]# rm -ivf /etc/yum.repos.d/ *.repo // 删除原有的repo文件 [root@localhost docker]# vi /etc/yum.repos.d/docker-ce.repo // 添加如下内容 [docker] name=docker ce baseurl=file:///opt/docker gpgcheck=0 enabled=1 gpgkey=file:///opt/docker/gpg
⑥安装必备的软件包。
[root@localhost docker]# yum -y install deltarpm libxml2-python python-deltarpm createrepo
⑦构建本地安装源。
[root@localhost docker]# createrepo -d /opt/docker/repodata [root@localhost docker]# yum clean all [root@localhost docker]# yum makecache [root@localhost docker]# yum repolist
⑧安装并启动Docker,利用clocker Version命令查看已安装Docker的版本。
[root@localhost docker]# yum -y install docker-ce [root@localhost docker]# systemctl start docker [root@localhost docker]# systemctl enable docker [root@localhost docker]# docker version Client: Version: 18.03.0-ce API version: 1.37 Go version: go1.9.4 Git commit: 0520e24 Built: Wed Mar 21 23:09:15 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.03.0-ce API version: 1.37 (minimum version 1.12) Go version: go1.9.4 Git commit: 0520e24 Built: Wed Mar 21 23:13:03 2018 OS/Arch: linux/amd64 Experimental: false
(1)安装Docker的基本要求:64位操作系统,版本为Windows 7或更高;支持Hardware Virtualization Technology功能,并且要求开启Virtualization功能。
(2)双击运行下载的DockerToolbox.exe文件,弹出“打开文件-安全警告”对话框,如图1-5所示。
图1-5 “打开文件-安全警告”对话框
(3)单击“运行”按钮,打开“Setup-Docker Toolbox”窗口,如图1-6所示。
图1-6 “Setup-Docker Toolbox”窗口
(4)单击“Next”按钮,选择安装路径,这里默认选择C盘,如图1-7所示。
(5)单击“Next”按钮,勾选所需的组件,如图1-8所示。
图1-7 选择安装路径
图1-8 勾选所需的组件
(6)单击“Next”按钮,选择是否需要创建快捷方式,添加环境变量到PATH路径中等,再次单击“Next”按钮。
(7)确认Docker Toolbox的安装选项,如安装路径、所需安装的组件等,如图1-9所示,单击“Install”按钮。
注意: 在Docker Toolbox的安装过程中会出现其他应用的安装过程,如Oracle Corporation等系列软件,选择全部进行安装即可。
安装结束后,在桌面上可看到图1-10所示的Docker应用程序的快捷方式图标。
图1-9 确认Docker Toolbox的安装选项
图1-10 Docker应用程序的快捷方式图标
(8)双击“Docker Quickstart Terminal”图标,打开“Docker Quickstart Terminal”应用,Terminal会自动进行一些设置,当进入图1-11所示的Docker运行界面时,表示Docker安装完成。
图1-11 Docker运行界面