3
docker学习笔记

LXC操作系统层虚拟化

LXC,其名称来自Linux软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。透过统一的名字空间和共享API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。

在Linux内核中,提供了cgroups功能,来达成资源的区隔化。它同时也提供了名称空间区隔化的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户id,以及挂载的文件系统。但是cgroups并不一定需要启动任何虚拟机。

LXC利用cgroups与名称空间的功能,提供应用软件一个独立的操作系统环境。LXC不需要Hypervisor这个软件层,软件容器(Container)本身极为轻量化,提升了创建虚拟机的速度。软件Docker就是用来管理LXC的环境。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。

Docker的生命周期

Docker中有三个基本概念:镜像,容器和仓库。理解了这个三个概念就大致了解了Docker的生命周期。
Docker架构:
图片描述

  • Client:docker是一个c/s架构的程序,无论是客户端还是服务端,都是由一个docker程序提供的。docker子程序中,dockerdaemon是守护进程,可以监听在套接字之上。这个套接字只允许client允许在本机上。
  • Docker_HOST:运行容器的主机,也就是宿主机,其中有Docker镜像和Docker容器。
  • Registry:镜像仓库,存储镜像的仓库。Docker默认的镜像仓库是https://hub.docker.com/

Docker安装

系统环境
Docker CE支持64 位CentOS7,并且要求内核版本不低于3.10。CentOS7满足最低的内核要求,但由于内核版本较低,部分功能无法使用,并且部分功能可能不太稳定。

[root@game-test1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@game-test1 ~]# cat /proc/version 
Linux version 3.10.0-693.11.6.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.520150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Thu Jan 4 01:06:37 UTC 2018

卸载旧版本
旧版本的Docker称为docker或者docker-engine,使用下面命令卸载旧版本:

yum remove docker docker-common docker-selinux docker-engine

使用yum安装
由于网络原因,建议使用国内源下载,执行下面命令添加yum源:

 yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

如果提示没有yum-config-manager这个命令,则需要yum安装下该命令所在的包。

yum install -y yum-utils

安装最新版本的Docker CE:

yum-config-manager --enable docker-ce-edge

更新软件源缓存,并安装docker-ce

yum makecache fast
yum install -y docker-ce

启动Docker CE

systemctl enable docker #设置开机自启
systemctl start docker

建立Docker用户组
默认情况下,docker命令会使用Unix socket与Docker引擎进行通讯。而只有root用户和docker组的用户才可以访问Docker引擎的Unix socket。出于安全考虑,一般Linux系统上不会直接使用root用户、因此,将需要使用docker的用户加入docker用户组。
建立用户组

groupadd docker

创建docker用户,加入到docker组

useradd -g docker docker -s /sbin/nologin

测试docker是否安装正确
若出现以上输出信息说明docker安装成功,至此docker安装完毕。

[root@jackyun ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete 
...(省略部分)

syushin
948 声望316 粉丝