1、Docker简介
Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup,namespace,Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器。Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序,程序之间相互隔离。
1.1、docker体系结构
Containerd:是一个简单的守护进程,使用runC管理器。向Docker Engine提供接口。
Shim:只负责管理一个容器。
runC:是一个轻量级的工具,只用来运行容器。
1.2、内部组件
【Namespaces命令空间】
Namespaces命令空间,Linux内核提供的一种对进程资源隔离的机制,例如:进程、网络、挂载点等资源。
【CGroups控制组】
CGroups控制组,Linux内核提供的一种限制进程资源的机制;例如:CPU/内存等资源;
[root@VM_190_147_centos ywadmin]# ls -l /sys/fs/cgroup
total 0
drwxr-xr-x 2 root root 0 Nov 24 12:15 blkio
lrwxrwxrwx 1 root root 11 Nov 24 12:15 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Nov 24 12:15 cpuacct -> cpu,cpuacct
drwxr-xr-x 2 root root 0 Nov 24 12:15 cpu,cpuacct
drwxr-xr-x 2 root root 0 Nov 24 12:15 cpuset
drwxr-xr-x 4 root root 0 Nov 24 12:15 devices
drwxr-xr-x 2 root root 0 Nov 24 12:15 freezer
drwxr-xr-x 2 root root 0 Nov 24 12:15 hugetlb
drwxr-xr-x 2 root root 0 Nov 24 12:15 memory
lrwxrwxrwx 1 root root 16 Nov 24 12:15 net_cls -> net_cls,net_prio
drwxr-xr-x 2 root root 0 Nov 24 12:15 net_cls,net_prio
lrwxrwxrwx 1 root root 16 Nov 24 12:15 net_prio -> net_cls,net_prio
drwxr-xr-x 2 root root 0 Nov 24 12:15 perf_event
drwxr-xr-x 2 root root 0 Nov 24 12:15 pids
drwxr-xr-x 4 root root 0 Nov 24 12:15 systemd
【UnionFS联合文件】
UnionFS联合文件系统,支持将不同位置的目录挂到同一虚拟文件系统,形成一种分层的模型。
2、yum安装docker
这里选择的是centos7.4的系统,通过yum的方式安装docker;可以参考官网yum安装dockerhttps://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1。
【安装docker依赖】
[root@VM_190_147_centos ywadmin]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@VM_190_147_centos ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
【配置官方源】
[root@VM_190_147_centos ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@VM_190_147_centos ~]# ll /etc/yum.repos.d/
【安装docker】
[root@VM_190_147_centos ~]# yum install docker-ce
【启动docker】
[root@VM_190_147_centos ~]# systemctl start docker
[root@VM_190_147_centos ~]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.09.0 #yum安装是最新版本
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: #插件
Volume: local
Network: bridge host 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: c4446665cb9c30056f4998ed953e6d4ff22c7c39
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-693.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.796GiB
Name: VM_190_147_centos
ID: 5UPI:LZ6S:UAXZ:MEWK:THMP:BKW7:YEBP:P3RF:SDOX:IMHV:BJ4K:ONQA
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/ #源
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
3、非root安装运行docker
【非root用户安装】
[ywadmin@izbp1cuudwu6dx6oewil61z ~]$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
[ywadmin@izbp1cuudwu6dx6oewil61z ~]$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[ywadmin@izbp1cuudwu6dx6oewil61z ~]$ sudo yum install docker-ce
[ywadmin@izbp1cuudwu6dx6oewil61z ~]$ yum list docker-ce --showduplicates | sort -r
[ywadmin@izbp1cuudwu6dx6oewil61z ~]$ sudo systemctl start docker
[ywadmin@izbp1cuudwu6dx6oewil61z ~]$ sudo docker version
【非root用户运行】
创建组docker,把已有用户ywadmin加入到docker组中。
[root@izbp1cuudwu6dx6oewil61z ~]# groupadd docker
groupadd: group 'docker' already exists
[root@izbp1cuudwu6dx6oewil61z ~]# usermod -aG docker ywadmin
#-a参数表示把用户加入到组中,-G表示组docker中添加新名单ywadmin
#设置开机启动
[root@izbp1cuudwu6dx6oewil61z ~]# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
【把用户从docker组中移除】
#发现用户wzy属于组wzy和docker组
[root@aliyun205 ywadmin]# id wzy
uid=6011(wzy) gid=6010(wzy) groups=6010(wzy),994(docker)
#第一个wzy表示组,第二个wzy表示用户;作用就是wzy用户只有一个组wzy。
[root@aliyun205 ywadmin]# usermod -G wzy wzy
#查看用户组
[root@aliyun205 ywadmin]# id wzy
uid=6011(wzy) gid=6010(wzy) groups=6010(wzy)