Docke安装步骤
脚丫先生 人气:0了解Docker是如何的与众不同,如此的蒂花之秀后,我们紧接着从Docker的基础循序渐进的讲解。
一、Docker的基本组成
1、Docker服务端和客户端
在对Docker的基本组成讲解之前,我们需要明白的是Docker是一个客户端-服务端(C/S)架构程序。不明白什么是C/S架构对吧,我这里就简单说明下,一般来说,应用程序架构分为两种:
客户端-服务端(C/S) :
Client - Server(C/S) = 客戶端 - 服务器。例如: QQ,迅雷,快播等。夜深人静的时候,你躲在被子里,用自己安装的快播神器看不知名的大片,快播软件就需要和服务器进行通信,服务器源源不断的把各种画面信息返回给快播神器。
这种需要安装软件才能与服务器进行数据通信的方式就是C/S架构。
C/S系统结构
浏览器 - 服务端(B/S) :
Browser - Server(B/S) = 浏览器 - 服务器。例如:所有的网站都是B/S架构,你找你朋友,借一步说话,要了个网址,直接浏览器输入就可以乐呵呵的看不知名的大片。这种不需要安装软件,直接有个网址就能看片的方式就属于B/S架构。
B/S系统结构
总的来说,C/S每一个客户端都必须安装和配置专用的软件。B/S最大的优点就是不用安装任何专门的软件,只要有一个浏览器就可以。
docker引擎是一个c/s结构的应用。Docker客户端只需要向Docker服务端或者守护进程发出请求,服务端或者守护进程完成所有工作返回结果主要组件见下图:
- Server是一个常驻进程
- REST API 实现了client和server间的交互协议
- CLI 实现容器和镜像的管理,为用户提供统一的操作界面
2、Docker的基本组成
从上节,我们可以知道Docker使用的是C/S架构,Client 通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信。
镜像(image):
Docker 镜像就是一个只读的模板,可以通过这个模板来创建容器。一个镜像是可以创建多个容器的,就好像java里的类和对象一样,类是镜像,容器是对象。
容器(container):
Docker 利用容器来运行应用。容器是从镜像创建而来的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
仓库(repository):
仓库就是存放镜像的地方,分为公有仓库(Public)和私有仓库(Private)两种形式,其中官方仓库 Docker Hub是国外的,而国内很多公司,像阿里云,华为云等都有自己的容器服务,Docker默认使用的是国外的仓库,我们在国内访问就很慢,所以我们在学习的时候就需要配置镜像加速。
上面的介绍,我想可能对于刚刚学习Docker的老铁来说,有点生涩难懂,我刚刚学习Docker的时候也是一样。不过没关系,我举个通俗的例子讲解:
我们需要注意的是Docker本身并不是容器,它只是创建容器的工具,是应用容器引擎。
要想搞明白Docker,只需要知道两点即可:
第一点,Build, Ship and Run 译为:构建镜像,运输镜像,运行镜像
Build
(构建镜像):镜像就像是集装箱包括文件以及运行环境等等资源。
Ship
(运输镜像):主机和仓库间运输,这里的仓库就像是超级码头一样。
Run
(运行镜像):运行的镜像就是一个容器,容器就是运行程序的地方。
举个例子:
我爹年纪大了,想回老家盖房子,我们来到老家,找了平时比较热闹的地方,买了块地基准备盖房,于是我和我爹搬水泥,石头,各种材料,费了九牛二虎之力终于盖好房子了。结果,住了一段时间,我爹说这儿太吵了,想换个清静地方。按照传统的办法,我们只能再次搬石头、砍木头、画图纸、盖房子。但是,哆啦A梦从百宝袋里掏出一个魔法棒,可以把我和我爹盖的房子,打包做成“镜像”,放在我的背包里。
等我到了安静的地方,找块空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。所以Docker的第二点就是:Build once ,Run anywhere 译为: 一次搭建,到处能用。
从上面的例子,放在我包里的镜像就是 Docker镜像,而我在安静的空地,用魔法棒复制的一套房子就是一个Docker容器,我的背包,就是Docker仓库。
既然,我和我爹盖的房子可以打包做成镜像,那么别人房子也可以做成镜像,这样一来,我们是不是就可以直接住各种豪宅,岂不美滋滋。这么多房子做成的镜像,那就得需要一个大的包来装,于是乎,这个大包就变成了专业术语里的仓库(repository)。因此,官方提供了一个 Docker Hub给大家进行共享房子镜像,当然你也可以搞私有仓库,独乐乐,不共享自己的房子镜像给别人。
二、Docker的在线安装
Docker官方建议在Ubuntu中安装,因为Docker是基于Unbantu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的,在很多版本的Centos中是不支持更新最新的一些补丁包的。
由于我们学习的环境都使用的Centos,因此这里将Docker安装到Centos上。
注意:
Linux要求内核3.0以上
CentOS 需要是7版本的
既然有官方提示的注意,那么我们如何查看系统内核呢?
1、使用uname命令验证
[root@localhost docker]# uname -r 3.10.0-1127.el7.x86_64
2、卸载已安装的Docker
如果已经安装过Docker,请先卸载,再重新安装,来确保整体的环境是一致的。
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
3、安装yum工具包和存储驱动
yum install -y yum-utils
4、设置镜像的仓库
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo #上述方法默认是从国外的,不推荐 #推荐使用国内的,阿里云docker镜像 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5、安装docker
注意 : docker-ce 社区版 而ee是企业版。这里我们使用社区版即可。
yum install docker-ce docker-ce-cli containerd.io
6、启动docker
systemctl start docker
7、设置开机启动
systemctl enable docker
8、安装后查看Docker版本
[root@localhost docker]# docker version Client: Docker Engine - Community Version: 19.03.13 API version: 1.40 Go version: go1.13.15 Git commit: 4484c46d9d Built: Wed Sep 16 17:03:45 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.13 API version: 1.40 (minimum version 1.12) Go version: go1.13.15 Git commit: 4484c46d9d Built: Wed Sep 16 17:02:21 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.3.7 GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
9、配置阿里云镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决这个问题。
登录阿里云
搜索 “ 容器镜像服务 ”
获取加速器地址
通过修改 daemon 配置文件 /etc/docker/daemon.json
来使用加速器
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["http://pak31uuv.mirror.aliyuncs.com"] } EOF # 重启 Docker systemctl daemon-reload systemctl restart docker
注意:
阿里云的本人自己账号的镜像地址(需要自己注册有一个属于你自己的): https://xxxx.mirror.aliyuncs.com
10、验证配置是否成功
docker info # 输出如下 Client: Debug Mode: false Server: Containers: 15 Running: 12 Paused: 0 Stopped: 3 Images: 24 Server Version: 19.03.6 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: systemd 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: runc Default Runtime: runc Init Binary: docker-init containerd version: runc version: init version: Security Options: apparmor seccomp Profile: default Kernel Version: 4.15.0-96-generic Operating System: Ubuntu 18.04.4 LTS OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 7.767GiB Name: docker-services ID: YZSB:WJFB:RS4K:V22L:IVGK:GZVZ:UQL4:MCCR:MQ4X:6HRE:T5RM:53M5 Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Registry Mirrors: https://k7da99jp.mirror.aliyuncs.com/ https://dockerhub.azk8s.cn/ https://registry.docker-cn.com/ Live Restore Enabled: false WARNING: No swap limit support
三、Docker内网环境的离线安装
由于在很多情况下需要安装docker的虚拟机或服务器无法访问互联网,因此需要离线安装docker。
准备工作
一台可以访问互联网的虚拟机或服务器,操作系统不限,改机器可以访问拟安装docker的机器
STEP 1 : 以下操作在可以访问互联网的机器进行
下载安装包
访问https://download.docker.com/linux/static/stable/ 选择合适的版本并下载,
笔者用的是 :
https://download.docker.com/linux/static/stable/x86_64/docker-18.09.6.tgz
STEP 2: 将下载的安装包上传到拟安装的机器
STEP 3: 以下操作在拟安装的机器上进行
1、解压缩安装包
tar -zxvf docker-18.09.6.tgz
2、复制解压缩后的文件到指定文件夹
cp docker/* /usr/bin/
3、注册编辑docker服务
vim /etc/systemd/system/docker.service
4、复制下列内容到该文档中
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target
5、添加权限后启动
chmod +x /etc/systemd/system/docker.service
6、重新加载配置文件
systemctl daemon-reload
7、启动Docker
systemctl start docker
8、设置开机自启
systemctl enable docker.service
9、验证是否安装成功
systemctl status docker docker -v
四、运行第一个容器
我们以 Nginx 为例,体验 Docker 是如何运行容器的
# 下载镜像 docker pull nginx # 运行容器 docker run --name nginx-container -p 80:80 -d nginx
浏览器输入虚拟机地址即可访问 Nginx
加载全部内容