Docker介绍
Docker是一种管理容器的软件工具
主要分为三部分:
- image镜像
是一种特殊的文件系统,但是不包含动态数据,构建好以后不会被改变
- container容器
镜像的实质是文件系统,容器的实质是进程,容器的进程和宿主机的进程不一样,它的进程是运行在独立的命名空间,因此容器可以有自己的root文件系统,自己的网络配置,自己的进程空间等,容器的进程运行在一个独立的空间,做和宿主机隔离的
容器存储的生存周期和容器一样,容器消亡时,容器存储层也会消失,按照Docker最佳实践的要求,容器不应该向仓储层放数据,容器层需要保持无状态
所有文件的写入操作,都应该使用数据卷或者绑定宿主机目录,这样跳过存储层,直接对宿主机进行存储
- repostory仓库
如果镜像构建完成后,就可以很容易进行使用,但是其他服务器想要使用这个镜像,我们就需要集中存储,集中分发镜像的服务,Docker Registry就是这样的一个服务
一个Docker Register可以包含多个仓库,每个仓库包含多个标签,每个标签对应一个镜像
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应软件的各个版本
仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下周,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务
Register
- 用户认证
- 镜像的索引
- image存储
Linux容器技术vs 虚拟化
全虚拟化技术:
比如说 vmware
- 主机硬件
- 系统
- 一种虚拟化管理软件hypervisor
- 虚拟机
这种虚拟化通过软件,模拟出硬件在这个模拟硬件上安装新的系统,模拟虚拟化,也叫全虚拟化
优点:隔离性非常强,可以模拟出所以的硬件,什么都是独立的
缺点:消耗资源大
虚拟化技术最大的缺点在于,批量分发,批量操作的时候,很大程度的浪费资源和时间
Linux容器技术:
不要用安装操作系统,容器不是模拟的技术,在原有操作系统的基础上把系统资源做到隔离
资源隔离,通过一个命名空间的方式
Namespaces命名空间
- PID进程隔离
- NET管理网络接口
- IPC管理跨进通讯的访问
- MNT 管理挂载点
- UTS 隔离内核和版本表示
CCgroups控制每个namespaces中的资源分配
安装Docker
Docker分为CE和EE两个大版本。CE即社区版(免费,支持周期7个月),EE即企业版,强调安全,付费使用,支持周期24个月)
Centos 安装Docker CE
准备工作
Docker CE 支持64位版本Centos7,并且要求系统内核版本不低于3.10
首先卸载旧的Docker版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
配置Docke的yum源
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ee.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
验证Docker是否安装成功
docker version可以看到一个客户端一个服务端
[root@hwf docker]# docker version Client: Docker Engine - Community Version: 19.03.8 API version: 1.40 Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:27:04 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.8 API version: 1.40 (minimum version 1.12) Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:25:42 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
配置镜像加速
添加内核参数
tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
重新加载sysctl.conf文件
sysctl -p
进入网址:https://cr.console.aliyun.com/cn-hangzhou/mirrors
此处需要一个阿里云的账号,没有的话可以使用支付宝登录
登录进去会跳转到容器镜像服务,需要密码
可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://fooyh53n.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
Docker体系结构
Docker结构组成
1 用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。
2 Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。
3 Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。
4 Job 的运行过程中,当需要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像管理驱动 Graphdriver 将下载镜像以 Graph 的形式存储。
5 当需要为 Docker 创建网络环境时,通过网络管理驱动 Networkdriver 创建并配置 Docker容器网络环境。
6 当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Execdriver 来完成。
7 Libcontainer 是一项独立的容器管理包,Networkdriver 以及 Execdriver 都是通过 Libcontainer 来实现具体对容器进行的操作。

评论