学习 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维护的版本
    1. 检查APT对HTTPS的支持,查看/usr/lib/apt/methods/https文件是否存在。如果不存在,运行安装命令。

        $ apt-get update
        $ apt-get install -y apt-transport-https
      
    2. 添加Docker的APT仓库
        $ echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list
      
    3. 添加仓库的key
        $ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
      
    4. 安装
        $ 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。

  1. 添加名字为docker的用户组

     $ sudo groupadd docker
    
  2. 将当前用户添加到当前用户组中
      $ sudo gpasswd -a ${user} dokcer
    
  3. 重新启动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/1gdElVZt

时间: 2024-10-13 19:53:38

学习 Docker - 入门的相关文章

Docket学习--Docker入门

什么是Docker? Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal.OpenStack 集群和其他的基础应用平台. Docker通常用于如下场景: web应用的自动化打包和发布: 自动化测试和持续集成.发布: 在服务型环境中部署和调整数据库或其他的后台应用: 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的P

docker 入门教程(5)——总结与学习资料

总结 registry:docker镜像仓库,集中存储和管理镜像,类似maven仓库. image:docker镜像,定义容器运行的文件和参数,可以看作是面向对象编程的类. container:docker容器,镜像的运行实例,可以看作是面向对象编程的实例.一个镜像可以启动多个容器. Dockerfile:定制镜像的文件,定义了镜像每一层的修改,相当于一个描叙每次docker commit 内容的脚本,启动脚本将构建每一层的镜像. docker-compose:编排容器的服务,定义和运行多个容器

Docker入门学习1 ——概述

摘要:本文为Docker基本介绍.了解Docker的概念与组成,可以在命令的学习中更好地构建起体系,也可以与之前的知识融会贯通. 知识点:Docker用途 组成 原理,Docker容器简介 一.Docker入门介绍 Docker是什么? 简单来说,docker是一种比虚拟机更方便的虚拟化环境.有多方便?举个例子,以前想在Windows环境运行LAMP服务器,需要下载安装VMWare一类的虚拟机管理工具,再安装linux虚拟机,再安装LAMP环境:现在只要在docker中通过定制的镜像创建需要的容

docker入门概览

docker入门概览 标签 : docker docker入门概览 写在前面 概述 什么是Docker 什么是Docker Engine Docker的用处 安装 Ubuntu Mac OS X 演示 架构和原理 结语 参考资料 本文对docker进行大致介绍,包括概述,安装,简单使用,架构,基本原理等方面 写在前面 本文是自己学习docker的一个记录和整理,啃英文文档挺吃力的,懒得翻译,所以写这篇类似"索引"的文章,希望能帮助和我一样的新手快速入门 本文主要参考官方文档(Docke

Docker入门教程(一)介绍

http://dockone.io/article/101 Docker入门教程(一)介绍 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第一篇,介绍了Docker的基础概念以及Docker的安装. Docker是一个新的容器化的技术,它轻巧,且易移植,号称“build once, configure once and run anywhere(译者注:这个就不翻译了,翻译出来味道就没了)”.本文是Flux7的Docker系列教程的第一部分.请和这

Docker入门教程(二)命令

Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker系列教程的第一篇文章中,我们了解了Docker的基础知识,知道了它是如何工作以及如何安装的.在这篇文章中,我们将学习15个Docker命令,并通过实践来学习它是如何工作的. 首先,让我们通过下面的命令来检查Docker的安装是否正确: docker info  如果没有找到这条命令,则表示Docke

Docker入门教程(七)Docker API

Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和Docker Hub API. 纵观我们的Docker系列教程,我们已经讨论了很多重要的Docker组件与命令.在本文中,我们将继续深入学习Docker:剖析Docker APIs. Docker提供了很多的API以便用户使用.这些API包含四个方面: Docker Registry API Doc

Docker入门实践小结

Docker是近来大热的技术,似乎没有用过Docker都要落伍了,于是我也在一个个人的项目中用上了Docker,也算有了一些实践经验,与大家分享交流一下. 首先是安装和配置本地的Docker环境,因为Docker是Linux容器引擎,所以宿主机必须是Linux,Windows和Mac系统使用Docker必须先安装Boot2Docker运行一个包含Docker依赖的最小化Linux虚拟机作为宿主机,当然也可以用虚拟机运行一个完整Linux桌面系统然后再在里面安装Docker,个人更推荐后面一种方法

Docker 入门实践

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张戈 导语 本文从新手视角记录了一个实际的Dokcer应用场景从创建.上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法.通过Docker快速拉起一个定制服务,极大的简化了部署,加快了业务部署节奏,并降低了运维成本. ------ 人生苦短,快用Docker. 一.实践背景 初次接触Docker,按照我的学习习惯,先设计了这样一个场景case:假设有一个小型网站,想使用Nginx反向代理方案,能够在国内外快速搭建多个