Docker是一个开源项目,它是基于linux容器(LXC)等技术,旨在实现轻量级的操作系统虚拟化的一个解决方案。用户操作Docker的容器就像操作虚拟机一样,但是它比虚拟机更轻量更快速。
VMWare VS Docker
这里VMWare只是传统虚拟化方式的一个典型代表–虚拟机。传统方式是在硬件层面实现的,就像我们有时在新建虚拟机时出现这样的错误信息:
Error:
The virtual machine could not be started because the hypervisor is not running.
而解决这个问题的方法就是进入BIOS里面打开Hypervisor。这里的Hypervisor是所有传统虚拟化技术的核心。它运行于物理服务器和操作系统之间的中间的的软件层,允许多个操作系统和应用共享一套基础物理硬件。
相较于在硬件层面上实现的传统虚拟化技术,Docker是在操作系统层面上实现虚拟化的,它直接复用本地主机的操作系统。下面的两张图片能很好的诠释二者区别。
作为一种新兴的虚拟化方式,Docker的突出的优势有如下三点:
- 秒级启动
- 对系统资源利用率很高,一台主机可以同时运行数千个Docker容器
- 容器除了运行其中的应用外,基本不消耗额外的系统资源。原因在于Docker容器中只安装配置对应的应用,它可以用最小最基本的内核镜像,用最精简的软件依赖。
总结见下表:
| 特性 | Docker | VMWare |
| :—-: | :—-: | :—–: |
| 启动 | 秒级 | 分钟级 |
| 硬盘使用 | MB级 | GB级 |
| 性能 |接近原生 | 弱于原生 |
|系统支持量|单机支持上千个|一般十几个|
Docker安装
Docker是基于LXC等技术的,所以linux系统对其的支持是不言而喻的。这里Docker运行的环境是Ubuntu系统。
升级内核 Docker需要的Ubuntu的内核版本要大于3.13。对于Ubuntu 14.04这个版本是不需要升级内核以及安装依赖软件,而之前的版本是需要升级内核的。升级脚本如下:
1sudo apt-get update 2sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring 3sudo reboot
``
通过源安装Docker
1# 安装apt-transport-https支持 2sudo apt-get install apt-transport-https 3# 获取锁钥 4sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 5# 添加Docker源 6sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" 7# 更新软件源仓库 8sudo apt-get update 9# 安装Docker 10sudo apt-get install lxc-docker -y --force-yes
``
Docker配置
Docker的配置文件是 /etc/default/docker,里面可以设置Docker的启动路径,参数配置,代理以及临时目录设置。
使用代理
1cat << EOF >> /etc/default/docker 2export http_proxy="http://127.0.0.1:8080" 3export https_proxy="http://127.0.0.1:8080" 4EOF
``
改变docker进程监听的IP和端口
1cat << EOF >> /etc/default/docker 2DOCKER_OPTS="-H unix:///var/run/docker.sock -H 0.0.0.0:4243 --insecure-regis try 127.0.0.1:5000" 3EOF
`` 附:Docker一键安装配置 install_docker.sh
Docker使用
镜像操作
1# 获取注册服务器registry.hub.docker.com上的ubuntu镜像 2sudo docker pull ubuntu:14.04 3# 列出本地镜像 4sudo docker images 5# 启动docker容器 6sudo docker run -it ubuntu:14.04 /bin/bash 7# 提交已有镜像,获得新镜像id 8sudo docker commit -m "commit information" -a "user information" original_docker_id repository:tag 9# 从当前目录下的Dockerfile中生成镜像 10sudo docker build -t="repository:tag" . 11# 修改镜像标签 12sudo docker tag image_id repostory:new_tag 13# 从本地文件系统(容器快照)导入 14sudo cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04 15# 保存镜像 16sudo docker save -o ubuntu_14.04.tar ubuntu:14.04 17# 载入镜像 18sudo docker load < ubuntu_14.04.tar 19# 上传镜像 20sudo docker push repostory:tag 21# 清理所有未打过标签的本地镜像 22sudo docker rmi $(docker images --quiet --filter "dangling=true")
`` 附:
- Dockerfile
- 本地文件系统导入镜像的下载: openvz的模板下载
容器操作
1# 容器启动 2## -t 让Docker分配一个终端Terminal并绑定容器的标准输入 3## -i 让容器的标准输入保持打开(交互模式) 4## -d 以守护态运行 5sudo docker run -it ubuntu:14.04 /bin/bash 6# 显示容器状态 7sudo docker ps 8# 获取容器的输出信息 9sudo docker logs container_id 10# 容器快照的导出 11sudo docker export container_id 12# 清理所有处于终止状态的容器 13sudo docker rm $(docker ps -a -q)
``
仓库操作
1# 查找官方仓库的镜像 2sudo docker search ubuntu 3# 创建私有仓库(官方registry镜像) 4sudo docker run -d -p 5000:5000 registry 5# 上传镜像到私有仓库 6sudo docker push localhost:5000/image_id:tag
``