docker的安装和基本使用
docker简介和虚拟化
docker是一种可以把应用程序自动部署到容器的开源引擎,他和虚拟化相比具有轻量和快速部署删除的特点,可以使软件开发偏向于微服务架构方向。从资源成本和管理方式上都比传统的虚拟化有着太多的优势,但是对运行环境的要求较高。
docker的组件包含以下四个:
(1)docker的客户端和服务端;
(2)docker镜像(images);
(3)registry(仓库,比如官方的docker hub)
(4)docker容器(container,算是images实例化的一个“系统”)
docker的技术包括:
(1)一个原生的linux容器;
(2)linux内核命名空间,用于隔离文件系统、进程和网络;
(3)文件系统隔离;
(4)进程隔离:每个容器都运行在自己的root文件系统中;
(5)网络隔离:容器间的虚拟网络接口和ip地址都是分开的;
(6)资源隔离分组:使用cgroups,将cpu和内存之类的资源独立分配给每个docker容器;
(7)写实复制:文件系统都是通过写时复制创建的,意味着文件系统是分层的、快速的,而且占用的磁盘空间小;
(8)日志:可以使用docker log进行查看;
docker与虚拟机之间的架构比较:
比较两图的差异,左图虚拟机的Guest OS层和Hypervisor层在Docker中被Docker Engine层所替代。虚拟机的Guest OS即为虚拟机安装的操作系统,它是一个完整操作系统内核;虚拟机的Hypervisor层可以简单理解为一个硬件虚拟化平台,它在Host OS是以内核态的驱动存在的。
总结一句话:docker速度快、好移植,但是安全性低;虚拟机速度慢、不好移植、但是安全性高。
但是随着以后的发展,docker应该可以克服这些问题。
docker安装
docker的安装环境是在3.1内核以上,而且必须是64位(目前)的操作系统,内核必须支持并开启cgroup和命名空间功能。内核必须支持合适的存储驱动:(Device Mapper、AUFS、vfs、btrfs、ZFS)
redhat/centos下安装
1.查看内核版本信息:
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
2.查看是否支持device mapper:
[root@localhost ~]# ls -l /sys/class/misc/device-mapper/
总用量 0
-r--r--r--. 1 root root 4096 11月 10 14:02 dev
drwxr-xr-x. 2 root root 0 11月 10 14:02 power
lrwxrwxrwx. 1 root root 0 11月 10 14:02 subsystem -> ../../../../class/misc
-rw-r--r--. 1 root root 4096 11月 2 14:00 uevent
[root@localhost ~]# grep device-mapper /proc/devices
253 device-mapper
如果没有的话,安装device-mapper,并且加载device-mapper模块:
[root@localhost ~]# yum install device-mapper -y
[root@localhost ~]# modprobe dm_mod
3.centos7的镜像中支持docker的安装,可以直接使用yum命令:
[root@localhost ~]# yum install docker -y
4.启动并且查看docker服务:
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2016-11-02 19:25:33 CST; 1 weeks 0 days ago
Docs: http://docs.docker.com
Main PID: 9354 (docker-current)
Memory: 2.8M
CGroup: /system.slice/docker.service
└─9354 /usr/bin/docker-current daemon --exec-opt native.cgroupdriver=systemd --selinux-enabled --log-driver=journald
11月 09 16:41:05 localhost.localdomain docker-current[9354]: [35B blob data]
11月 09 16:41:05 localhost.localdomain docker-current[9354]: [63B blob data]
11月 09 16:41:05 localhost.localdomain docker-current[9354]: [50B blob data]
11月 09 16:41:05 localhost.localdomain docker-current[9354]: [44B blob data]
11月 09 16:41:05 localhost.localdomain docker-current[9354]: [46B blob data]
11月 09 16:41:05 localhost.localdomain docker-current[9354]: [112B blob data]
11月 09 16:41:06 localhost.localdomain docker-current[9354]: [44B blob data]
11月 09 16:41:06 localhost.localdomain docker-current[9354]: [44B blob data]
11月 09 17:21:46 localhost.localdomain docker-current[9354]: time="2016-11-09T17:21:46.678318978+08:00" level=info msg="{Action=networks, Username=root, LoginU...=19209}"
11月 10 14:11:24 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
ubuntu下安装
1.查看内核版本信息:
root@vs026:~# uname -a
Linux vs026 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:51:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
2.查看是否支持device mapper:
root@vs026:~# ls -l /sys/class/misc/device-mapper/
total 0
-r--r--r-- 1 root root 4096 Nov 10 16:18 dev
drwxr-xr-x 2 root root 0 Nov 4 14:20 power
lrwxrwxrwx 1 root root 0 Nov 10 16:18 subsystem -> ../../../../class/misc
-rw-r--r-- 1 root root 4096 Nov 10 16:18 uevent
3.使用apt-get安装docker:
apt-get install docker-engine -y
4.启动和查看docker服务:
root@vs026:~# /etc/init.d/docker start
root@vs026:~# /etc/init.d/docker status
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service docker status
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the status(8) utility, e.g. status docker
docker start/running, process 24474
docker的常见操作
1.查看docker的整体信息:
主要列举了如下内容:
(1)容器的个数:整体的、运行中的、关闭着的;
(2)镜像的数量;
(3)docker的版本;
(4)文件驱动方式&#