您的位置:首页 > 运维架构 > Docker

Docker学习-03Docker安装与配置

2022-01-19 15:55 721 查看

0x00 前提条件

Docker并非是一个通用的容器工具,它依赖于已经存在运行的Linux内核环境。

Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。

因此**Docker必须部署在Linux内核的系统**上。如果其他系统想要部署Docker就必须安装一个虚拟Linux环境。

在**Windows上部署Docker的方法都是先安装一个虚拟机,并在安装Linux系统的虚拟机中运行Docker**。

要求Linux系统为64位、内核版本3.8以上。

查看内核命令

uname -a/-r
cat /etc/redhat-release (centos)

0x01 Docker基本组成

镜像——Java的类模版

容器——Java new出来的实例对象,实例的源头就是镜像

仓库——存放镜像的地方

Book b1 = new book()	//这里的Book就相当于镜像,也就是类模版
Book b2 = new book()
Book b3 = new book()	//b1,b2,b3就是对应的容器实例对象

Redis r1 = docker run 镜像,类似鲸鱼背上的集装箱,就是一个容器实例
Redis r2 = docker run 镜像,类似鲸鱼背上的集装箱,就是一个容器实例
Redis r3 = docker run 镜像,类似鲸鱼背上的集装箱,就是一个容器实例
Redis r4 = docker run 镜像,类似鲸鱼背上的集装箱,就是一个容器实例

镜像(image)

Docker镜像就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。它也相当于是一个root文件系统。比如官方镜像centos7就包含了完整的一套centos7最小系统的root文件系统。相当于容器的”源代码“,docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。

容器(container)

从面向对象角度

Docker利用容器(Container)独立运行的一个或一组应用,应用程序或者服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

从镜像容器角度

可以把容器看作是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。镜像就是定义动作的,实例就是干活的。如下图,当我们

docker run redis
时,其实就是相当于在容器里面以最小资源启动了一台Linux虚拟机,在这台虚拟机上在运行
redis

仓库(respository)

仓库是集中存放镜像文件的场所。

类似于

Maven
仓库,存放各种jar包的地方;

github
仓库,存放各种git项目的地方;

Docker
公司提供的官方
registry
被称为
Docker Hub
,存放各种镜像模板的地方.

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。全球最大的公开仓库

Docker Hub
。存放了数量庞大的镜像提供用户下载,国内的工开仓库包括阿里云、网易云等。

这里注意:国内我们**默认选择阿里云作为公开仓库。**也可以自己搭建个私有库。

总结

需要正确的理解仓库/镜像/容器这几个概念:

Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)

Image文件可以看作是容器的模板。Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例。

镜像文件

  • image文件生成的容器实例,本身也是一个文件,称为镜像文件

容器实例

  • 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器

仓库

  • 就是放一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候再从仓库中拉下来就可以了。

0x02 docker平台架构

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器就是一个运行时环境,集装箱。

以mysql为例子来讲

1、当我们装好mysql,后台就会有一个进程,守护进程来保持mysql的运行。

2、我们想要连接mysql,就会用客户端的一些工具,例如

SQLyog Ultimate
小海豚,或者
Navicat
等等来连接上数据库。那么就实现了N多个客户端链接mysql后台守护进程来进行mysql的增删改查。

3、那么docker和mysql其实是一样的,只不过docker是通过镜像制作出了一个个实例,而mysql是按照sql脚本生成的sql语句。我在这里跑的sql脚本,换到别的机子上,也能跑。

0x03 docker平台架构进阶理解

这一部分先有个轮廓,有个底子就好,之后还会反复讲解。

Docker是一个C/S模式的架构,后端是一个松散耦合架构,众多模块各司其职。

Docker运行的基本流程为:

1、用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。

2、Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求。

3、Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。

4、Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动 Graph driver将下载镜像以Graph的形式存储。

5、当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境。

6、当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成

7、Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。

0x04 Centos7-Docker具体安装步骤

官网寻找开发者手册

https://docs.docker.com/

1、确定自己是符合标准的操作系统OS requirements

Linux系统为64位、内核版本3.8以上

uname -a/-r
cat /etc/redhat-release (centos)

2、卸载旧版本Uninstall old versions

Older versions of Docker were called

docker
or
docker-engine
. If these are installed, uninstall them, along with associated dependencies.

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

3、yum安装gcc相关依赖文件

Centos7 能出网

yum -y install gcc
yum -y install gcc-c++

4、安装需要的软件包

三种方法供你选择(You can install Docker Engine in different ways, depending on your needs),我这里就选择使用yum,也就是最多人的

yum -y install yum-utils

5、安装稳定库stable repositry

这里算是一个坑吧,国外的库很不稳定

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

可以换成国内的阿里云的

yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
########分三行或者一行都可以
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6、重置yum索引

yum makecache fast

元数据缓存已建立,下次再安装就快一些了

7、开始安装docker engine

默认最新版docker engine,一路全选yes就行了

sudo yum install docker-ce docker-ce-cli containerd.io

8、启动docker服务

systemctl start docker

9、测试docker

查看版本信息docker version

输出helloworld

第一次输入下面这个命令时,会告诉你本地找不到hello-world这个镜像,回到之前我们学的原理

docker run就是从本地镜像实例化一个容器,但是这个镜像本地不存在,所以我们需要从库中拉取一个镜像才行。

所以这里自动从库中拉取了一个

hello-world

docker run hello-world

10、卸载docker

systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

0x05 镜像加速器

国际上,亚马逊云是首屈一指的,云原生项目。阿里巴巴其实也努力想在中国落地生根关于云原生的项目。

想要所有的淘宝、支付宝账户,都注册一个阿里云账号。能力很强,野心很大,也许未来某一天,我们直接就可以在阿里云上操作虚拟机,根本不需要自己安装。

当然,得看公司给不给你钱安排了。

当我们配置了镜像加速器后,从仓库拉取镜像的速度会快很多,方便我们的操作,让我们的操作纵享丝滑!

1、注册阿里云账号(可用钉钉、支付宝、淘宝账号注册)

2、点击控制台

3、选择容器镜像服务

地点改一下, 然后选择个人版实例。请勿在生产环境中使用。个人肯定会比企业版的要垃圾地多,没交钱嘛

然后设置个密码,就行了

4、获取镜像加速器地址

5、下方内容依次操作即可

第一步直接创建文件

mkdir -p /etc/docker

第二步粘贴即可

sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1232312d.mirror.aliyuncs.com"]	//举例
}
EOF

第三部重新启动

systemctl daemon-reload
systemctl restart docker
docker run hello-world

0x06 hello-world分析介绍要素配合

看到这里其实大有困惑,一个hello-world有什么好说的??千万别着急,一步一个脚印,扎扎实实地学好前面的理论课程!

理论实操小总结,学习三板斧。

docker run,run干了什么?

其实也就是这张图

0x07 底层原理——为什么Docker比VM虚拟机快??

1、docker有着比虚拟机更少的抽象层

由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

说白了,我出门只需要自行车,你给我一辆火车,那肯定慢了。

2、docker利用的是宿主机的内核,而不需要加载操作系统OS内核

当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程时分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: