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
...(省略部分)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。