学习 Docker - 入门
Docker简介
一种虚拟容器技术。
- 一种虚拟化分方案;
- 操作系统级别的虚拟化;
- 只能运行相同或相似内核的操作系统;
- 依赖与linux内核特性:Namespace和Cgroups(Control Group)
虚拟机技术和容器技术最大的区别就是对资源的占用。
Docker目标
- 提供简单轻量的建模方式
- 职责的逻辑分离
- 快速高效的开发生命周期
- 鼓励使用面向服务的架构
Docker使用场景
- 使用Docker容器开发、测试、部署服务
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台即服务(PaaS)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能、超大规模的宿主机部署
Docker的基本组成
- Docker Client 客户端
- Docker Daemon 守护进程
- Docker Image 镜像
- Docker Container 容器
- Docker Registry 仓库
Docker Client 客户端
- C/S架构
- 本地/远程调用
Docker客户端向服务器端发出请求,也就是守护进程。守护进程处理完所有工作将结果返回给客户端。Docker客户端对服务器端的访问既可以在本地也可以在远程。
Docker Image 镜像
- 容器的基石
- 层叠的只读文件系统
Docker镜像是容器的基石,保存了启动容器的条件,容器基于镜像启动和运行。 Docker镜像是一个层叠的只读文件系统,他的最底端是一个引导文件系统及bootfs。 Docker用户几乎永远都不会和引导文件系统有交互,实际上当一个容器启动后,bootfs会被移到内存中,引导文件将被卸载。
Docker镜像的第二层是rootfs(root文件系统),位于引导文件系统之上,可以有多种操作系统。 在传统的linux系统中root文件系统最先会以只读的方式加载,当引导和启动完成后他才会被切换成读写模式。 但是在Docker里,root文件系统永远只能是只读,并且Docker会用联合加载系统在rootfs之上加载更多的只读文件系统。 联合加载只得是一次加载多个文件系统。但是在外面开来只有一个文件系统。联合加载会将各层文件系统加载到一起, 这样最终的文件系统会包含所有的文件及目录。Docker将这样的文件系统称为镜像。 一个镜像可以放到另一个镜像顶部,位于下面的镜像称为父镜像。以此类推,直到镜像栈的最底部。最底部的镜像称为基础镜像。 也就是bootfs文件系统。
Docker Container 容器
- 容器通过镜像来启动
- 启动和执行阶段
- 写时复制(copy on write)
一个容器中可以运行用户的一个或多个进程。当一个容器启动时,Docker会在镜像的最顶层增加一个读写文件系统,我们在Docker中运行的程序就是在这个层运行并执行的。第一次启动Docker时,读写层是空的,当文件发生变化后都会应用到这一层。比如修改一个文件,先将该文件从只读层复制到读写层,然后隐藏只读层,这就是Docker的写时复制。
当创建一个容器时,Docker会创建一个镜像栈,在栈的最顶层增加读写层,这个读写层和下面的镜像层以及一些配置数据就构成了一个容器。 容器的这个特点及镜像分层,可以让我们快速的构建镜像,并运行包含我们自己的应用程序和服务的容器。
Docker Registry 仓库
- 共有
- Docker Hub
- 私有
Docker用仓库来保存用户构建的镜像。
从上图可以看出,Docker客户端调用守护进程从而操作Docker的容器,而容器是通过镜像来创建的,而镜像又保存在仓库中。
Docker容器的相关技术
Docker依赖的Linux内核特性
- Namespaces 命名空间
- Control groups(cgroups)控制组
Namespaces 命名空间
- PID(Process ID) 进程隔离
- NET(Network) 管理网络接口
- IPC(Inter Process Communication) 管理跨进程通信的访问
- MNT(Mount) 管理挂载点
- UTS(Unix Timeshring System) 隔离内核和版本标识
编程语言中命名空间实现封装,即代码隔离。 操作系统中命名空间实现系统资源的隔离,进程、网络、文件系统...
各种隔离的资源时如何管理起来的,这就用到了Cgroups。
Control groups(cgroups)控制组
- 资源限制
- 优先级设定
- 资源计量
- 资源控制
Docker容器的能力
- 文件系统隔离:每个容器都有自己的root文件系统
- 进程隔离:每个容器都运行在自己的进程环境中
- 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
- 资源隔离和分组:使用Cgroups将CPU和内存等资源独立分配给每个Docker容器
在 Ubuntu 中安装 Docker
安装前的检查
内核版本
$ uname -a
检查Device Mapper
$ ls -l /sys/class/misc/device-mapper
Ubuntu中安装Docker的方式
安装Ubuntu维护的版本
$ sudo apt-get install -y docker.io
$ source /etc/bash_completion.d/docker.io
安装Docker维护的版本
检查APT对HTTPS的支持,查看/usr/lib/apt/methods/https文件是否存在。如果不存在,运行安装命令。
$ apt-get update
$ apt-get install -y apt-transport-https
添加Docker的APT仓库
$ echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list
添加仓库的key
$ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
安装
$ apt-get update
$ apt-get install -y lxc-docker
安装Docker维护的版本(简易步骤,使用Docker提供的sh脚本)
$ sudo apt-get install -y curl
$ curl -sSL https://get.docker.io/ubuntu/ | sudo sh
启动docker若出现下面错误:
FATA[0000] Error loading docker apparmor profile: fork/exec /sbin/apparmor_parser: no such file or directory ()
请安装apparmor软件即可
$ sudo apt-get install apparmor
使用非root用户运行Docker
一般安装完Docker运行时需要加sudo来操作,其实可以增加用户归属的用户组来实现不用root权限运行Docker。
添加名字为docker的用户组
$ sudo groupadd docker
将当前用户添加到当前用户组中
$ sudo gpasswd -a ${user} dokcer
重新启动docker服务
$ sudo service docker restart
针对当前用户不会立马生效,需要注销后重新登录以获取用户组权限。
在 Windows 中安装 Docker
使用虚拟机实现,守护进程在虚拟机中。
略
在 OS X 中安装 Docker
在OS X 上Docker的运行环境
在OS X上安装Docker前我们先看一下Docker的运行要求.
- Linux容器技术
- 操作系统级别的虚拟化
- 依赖于linux内核的Namespaces和Cgroups
Boot2Docker
OS X的内核是Unix,而且一般root用户苹果是不给用户的。所以要运行Docker在OS X上和在Windows上一样,需要借助虚拟机来实现。
- 轻量级的Linux发行版,为Docker定制
- Virtualbox VM
- Docker客户端
- 管理工具
安装前的检查
- 系统要求:OS X 10.6 "Snow Leopard"以上版本
安装步骤
访问github上的Boot2Docker
https://github.com/boot2docker/boot2docker
- 下载Boot2Docker-1.7.0.pkg
- 安装Boot2Docker-1.7.0.pkg
Boot2Docker的启动过程
- 打开命令行窗口
- 创建 $HOME/.boot2docker/目录
- 创建VirtualBox ISO
- 启动虚拟机并运行Docker守护进程
Boot2Docker的启动命令
- $ mkdir -p ~/.boot2docker
- $ if [ ! -f ~/.boot2docker/boot2docker.iso ]; then cp /usr/local/share/boot2docker/boot2docker.iso ~/.boot2docker/ ; fi
- $ /usr/local/bin/boot2docker init
- $ /usr/local/bin/boot2docker up
- $ /usr/local/bin/boot2docker shellinit
- $ docker version
验证Boot2Docker及Docker安装成功
运行命令 $ docker run ubuntu echo hello world 如果打印如下日志,说明安装成功
bash-3.2$ docker run ubuntu echo hello world
Unable to find image 'ubuntu:latest' locally
latest: Pulling from ubuntu
428b411c28f0: Pull complete
435050075b3f: Pull complete
9fd3c8c9af32: Pull complete
6d4946999d4f: Already exists
ubuntu:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:45e42b43f2ff4850dcf52960ee89c21cda79ec657302d36faaaa07d880215dd9
Status: Downloaded newer image for ubuntu:latest
hello world
bash-3.2$
参考:
mac安装docker指南: http://docs.docker.com/installation/mac/#command-line-docker-with-boot2docker
极客学院视频: http://www.jikexueyuan.com/path/docker/
doker入门指南: http://my.oschina.net/dlpinghailinfeng/blog/384803
pdf文件下载地址: http://pan.baidu.com/s/1c1corG8
学习 Docker - 入门的更多相关文章
- Docket学习--Docker入门
什么是Docker? Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机). ...
- Docker入门学习
Python爬虫 最近断断续续的写了几篇Python的学习心得,由于有开发经验的同学来说上手还是比较容易,而且Python提供了强大的第三方库,做一个小的示例程序还是比较简单,这不我之前就是针对Pyt ...
- Docker学习记录--入门了解+安装
Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...
- docker入门与部署微服务--学习笔记
最近公司进一步去windows,走向 linux+云化. 原来的一大坨windows虚拟机服务器都要转向linux, 既然走向linux的话,那么docker肯定是要涉足的. 故学习了docker入门 ...
- Docker 学习 1 入门
Docker 学习 1 入门 dockert 安装. Mac Ubuntu 查看docker 版本 docker version 拉取image. docker pull e.g docker pul ...
- docker 入门教程(5)——总结与学习资料
总结 registry:docker镜像仓库,集中存储和管理镜像,类似maven仓库. image:docker镜像,定义容器运行的文件和参数,可以看作是面向对象编程的类. container:doc ...
- 学习Mysql过程中拓展的其他技术栈:Docker入门介绍
一.Docker的介绍和安装 1. Docker是什么 百度百科的介绍: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linu ...
- 第三章 Docker 入门
第三章 docker 入门 3.1 确保docker已经就绪 首先查看docker程序是否存在,功能是否正常 [#3#cloudsoar@cloudsoar-virtual-machine ~]$su ...
- Docker入门教程(九)10个镜像相关的API
Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...
随机推荐
- 【转】NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装
一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经 ...
- 利用T4模板生成ASP.NET Core控制器的构造函数和参数
前言 在ASP.NET Core中引入了DI,并且通过构造函数注入参数,控制器中会大量使用DI注入各种的配置参数,如果配置注入的参数比较多,而且各个控制器需要的配置参数都基本一样的话,那么不断重复的复 ...
- 重写onStart()函数
Android开发中有时会遇到这种情况,在数据列表的Activity中点击添加按钮,弹出另一个Activity添加数据,这样返回数据列表的Activity时就需要刷新数据列表(因为添加了一条数据).这 ...
- Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法
题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色 ...
- Linux命令详解之—less命令
Linux下还有一个与more命令非常类似的命令--less命令,相比于more命令,less命令更加灵活强大一些,今天就给大家介绍下Linux下的less命令. 更多Linux命令详情请看:Linu ...
- javascript(定时函数)
一setTimeout函数和setInterval函数的语法以及应用 1.setTimeout函数 定义和用法:setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式. 语法:setTi ...
- CMS
一.任务简介: 开发简单的CMS.在数据库中创建新闻数据库表news,包含(题目.作者.日期.正文等字段):创建HTML模板文件:读取数据库所有数据的信息,并使用新闻信息 替换模板文件中的占位符,从而 ...
- Nuget很慢,我们该怎么办
在VS中给项目添加程序已经采用NuGet 十分方便 不过很多时候速度很慢,一直显示“正在检索信息” 其实直接使用程序包管理控制台,速度就会好很多 如果命令不太会写,安装包名不是确认,可以先登录 htt ...
- WinForm 窗体应用程序 (初步)之二
现在,我们来了解一些基本控件.控件是放置在工具箱里的,你可以在界面的左侧或者通过菜单栏的视图选项找到它. (1)Label 控件 这是一个用于放置文字的控件,因为你不能在窗体上直接输入文字. (2)T ...
- Bootstrap源码分析之dropdown
源码分析: Dropdowns.scss:下拉框模块 Javascripts/bootstrap/dropdown.js:实现下拉框响应 实现功能及原理: 下拉选项卡,默认不能实现显示选中项的功能 原 ...