简介:
Docker是一个软件容器平台。容器可以在共享的操作系统上运行隔离的应用环境。与VM不同,容器不捆绑完整的操作系统,而是共享宿主机的系统内核和资源,只需提供应用软件工作时所需的库和配置。这使得docker可以做到高效,轻便,自包含的系统,并且应用将始终运行相同,无论它在哪里部署。
开发人员使可以用Docker来消除相互之间代码协作时的“works on my machine”问题。运营商可以使用Docker在隔离的容器中并行运行和管理应用程序,以获得更好的计算密度。企业可以使用Docker构建灵活的软件传输管道,可以更快,更安全地发布新功能。
Docker底层基于Linux内核 2.4.19 版本开始包含的NameSpace机制,NameSpace是一种内核级别环境隔离机制。Docker底层使用libcontainer进行容器管理,使用pivot_root切换进程的根目录。
在Docker之前还有一种基于NameSpace的虚拟化工具LXC,LXC通过Cgroups进行资源管理,使用chroot进行根目录的切换。其实早期Docker是在lxc上面封装了一层并加入了aufs(Union File System)功能,在Docker 0.9.0 版本才引入了libcontainer 替代LXC进行底层容器管理。
容器虚拟化和主机虚拟化对比
docker 的基本工作流程
Docker应用场景:
web应用的自动化打包和发布;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
安装
实验主机系统平台:CentOS 7.4
docker从2017年开始提供两个版本,收费的商业版本Docker EE和免费的社区版本Docker CE(moby)。
可以访问下面的链接获取docker相关版本的安装说明:
https://store.docker.com/search?offering=community&q=&type=edition
Docker官方的安装脚本
curl -fsSL get.docker.com -o get-docker.sh
bash get-docker.sh
也可以使用Linux系统的包管理器进行安装,本文使用centos 提供的docker版本,在extras仓库中提供了docker 1.12.6的安装包。这个版本较老是在docker商业化之前的版本。
[root@localhost ~]# yum -y install docker #安装docker,需要确保extras仓库已开启。
[root@localhost ~]# docker -v #查看当前的docker版本。
Docker version 1.12.6, build c4618fb/1.12.6
[root@localhost ~]# systemctl start docker #启动
docker文件
/etc/docker/daemon.json
/etc/sysconfig/docker-network 启动配置文件
/etc/sysconfig/docker-storage 启动配置文件
/etc/sysconfig/docker-storage-setup 启动配置文件
/usr/bin/docker-containerd-current
/usr/bin/docker-containerd-shim-current
/usr/bin/docker-ctr-current
/usr/bin/docker-storage-setup
/usr/bin/dockerd-current #docker主程序
/usr/lib/systemd/system/docker-cleanup.service
/usr/lib/systemd/system/docker-cleanup.timer
/usr/lib/systemd/system/docker-storage-setup.service
/usr/lib/systemd/system/docker.service
/usr/lib/udev/rules.d/80-docker.rules
/usr/libexec/docker/docker-proxy-current
/usr/libexec/docker/docker-runc-current
下载镜像
docker的官方镜像站:Docker Hub
在主机上下载镜像,如果下载时不写标签名默认下载latest版本
[root@localhost ~]# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
d9aaf4d82f24: Pull complete
Digest: sha256:eba772bac22c86d7d6e72421b4700c3f894ab6e35475a34014ff8de74c10872e