Docker基础(一)

虚拟机和Docker的区别

下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

虚拟机.png
Docker.png

对比传统虚拟机总结

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

Docker 引擎

Docker 引擎是一个包含以下主要组件的客户端服务器应用程序。

  • 一种服务器,它是一种称为守护进程并且长时间运行的程序。
  • REST API用于指定程序可以用来与守护进程通信的接口,并指示它做什么。
  • 一个有命令行界面 (CLI) 工具的客户端。

Docker 引擎组件的流程如下图所示:


引擎.png

Docker 系统架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker 面向对象
容器 对象
镜像
262150629_86976.png
标题 说明
镜像(Images) Docker 镜像是用于创建 Docker 容器的模板。
容器(Container) 容器是独立运行的一个或一组应用。
客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。
主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
仓库(Registry) Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

为什么使用Docker

Docker使您能够将应用程序与基础架构分开,以便您可以快速交付软件。
借助Docker,您可以像管理应用程序一样管理基础架构。
通过利用Docker的方法快速进行运输,测试和部署代码,您可以显着缩短编写代码和在生产环境中运行代码之间的延迟。

例如: 开发人员在本地编写代码,可以使用Docker同事进行共享,实现协同工作。
使用Docker开发完成程序,可以直接对应用程序执行自动和手动测试。
当开发人员发现错误或BUG时,可以直接在开发环境中修复后,并迅速将它们重新部署到测试环境进行测试和验证。

利用Docker开发完成后,交付时,直接交付Docker,也就意味着交付完成。后续如果有提供修补程序或更新,需要推送到生成环境运行起来,也是一样的简单。

Docker主要解决的问题:

  • 保证程序运行环境的一致性;
  • 降低配置开发环境、生产环境的复杂度和成本;
  • 实现程序的快速部署和分发。

结构

  • Docker客户端(Docker Client)

Docker客户端(Docker Client)是用户与Docker进行交互的最主要方式。当在终端输入docker命令时,对应的就会
在服务端产生对应的作用,并把结果返回给客户端。Docker Client除了连接本地服务端,通过更改或指定
DOCKER_HOST连接远程服务端。

  • Docker服务端(Docker Server)

Docker Daemon其实就是Docker 的服务端。它负责监听Docker API请求(如Docker Client)并管理Docker对象
(Docker Objects),如镜像、容器、网络、数据卷等

  • Docker Registries

俗称Docker仓库,专门用于存储镜像的云服务环境.
Docker Hub就是一个公有的存放镜像的地方,类似Github存储代码文件。同样的也可以类似Github那样搭建私有
的仓库。

  • Docker 对象(Docker Objects)

    • 镜像:一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件
      等。
    • 容器:镜像被运行起来后的实例。
    • 网络:外部或者容器间如何互相访问的网络方式,如host模式、bridge模式。
    • 数据卷:容器与宿主机之间、容器与容器之间共享存储方式,类似虚拟机与主机之间的共享文件目录。

快速入门

docker历程:

自2013年出现以来,发展势头很猛,现在可说是风靡全球。

docker的第一版为0.1.0 发布于2013年03月23日

Docker2017年改版前的版本号是1.13.1发布于2017年02月08日

Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月,有点类似于ubuntu的版本发布方式。

企业版自然会提供一些额外的服务,当然肯定也是收费的。 企业版
说明https://blog.docker.com/2017/03/docker-enterprise-edition/ 社区版分为stable和edge两种发布方式。

stable版本是季度发布方式,比如17.03, 17.06, 17.09

edge版本是月份发布方式, 比如17.03, 17.04......

注:

Stable:gives you reliable updates every quarter

(稳定:给你可靠的每季度更新一次)

Edge:gives you new features every month

(优势:每个月给你新特性)

官方要求

为什么用ubuntu学docker?


1.png

Ubuntu安装docker

#安装基本软件 
$ sudo apt-get update 
$ sudo apt-get install apt-transport-https ca-certificates curl software- properties-common lrzsz -y 
#使用官方推荐源{不推荐}# 
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" #使用阿里云的源{推荐} 
$ sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt- key add - 
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker- ce/linux/ubuntu 
$(lsb_release -cs) stable" 
#软件源升级 
$ sudo apt-get update 
#安装docker 
$ sudo apt-get install docker-ce -y 
#注: 
#可以指定版本安装docker: 
$ sudo apt-get install docker-ce=<VERSION> -y 
#查看支持的docker版本 
$ sudo apt-cache madison docker-ce
#测试docker 
docker version 

==网卡区别:==

安装前:只有ens33和lo网卡

安装后:docker启动后,多出来了docker0网卡,网卡地址172.17.0.1

docker加速器

在国内使用docker的官方镜像源,会因为网络的原因,造成无法下载,或者一直处于超时。所以我们使用daocloud的方法进行加速配置。

方法:访问 https://dashboard.daocloud.io 网站,登录 daocloud 账户

2.png

#我们执行这条命令 
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://e5d212cc.m.daocloud.io 
#修改daemon.json文件,增加 , "insecure-registries": [] 
#到大括号后
# cat /etc/docker/daemon.json 
{"registry-mirrors": ["http://e5d212cc.m.daocloud.io"],"insecure-registries": []} 
#注意: 
#docker cloud加速器的默认内容是少了一条配置,所以我们要编辑文件把后面的内容补全 
#重启docker 
systemctl restart docker

docker 其他简介

docker的基本命令格式:

#基本格式 
systemctl [参数] docker 
#参数详解: 
start 开启服务 
stop 关闭 
restart 重启 
status 状态

删除docker命令:

$ sudo apt-get purge docker-ce -y 
$ sudo rm -rf /etc/docker 
$ sudo rm -rf /var/lib/docker/ 123

docker基本目录简介:

/etc/docker/  #docker的认证目录 
/var/lib/docker/ #docker的应用目录

docker常见bug:

背景

因为使用的是sudo安装docker,所以会导致一个问题。以普通用户登录的状况下,在使用docker images时必须添加sudo,那么如何让docker免sudo依然可用呢?

理清问题

当以普通用户身份去使用docker命令时,出现以下错误:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post
http://%2Fvar%2Frun%2Fdocker.sock/v1.35/images/create?fromSrc=-&message=&repo=ubuntu- 16.04&tag=: dial unix /var/run/docker.sock: connect: permission denied

可以看都,最后告知我们时权限的问题。那么在linux文件权限有三个数据左右drwxrwxrwx,其中第一为d代表该文件是一个文件夹前三位、中三位、后三位分别代表这属主权限、属组权限、其他人权限。


3.png

上图是报错文件的权限展示,可以看到其属主为root,权限为rw,可读可写;其属组为docker,权限为rw,可读可写。如果要当前用户可直接读取该文件,那么我们就为docker.sock 添加一个其他用户可读写权限 或者添加1个用户组就可以了

方法1:一劳永逸
#如果还没有 docker group 就添加一个: 
$sudo groupadd docker 
#将用户加入该 group 内。然后退出并重新登录就生效啦。 
$sudo gpasswd -a ${USER} docker 
#重启 docker 服务 
$systemctl restart docker 
#切换当前会话到新 group 或者重启 X 会话 
$newgrp - docker 
#注意:最后一步是必须的,否则因为 groups 命令获取到的是缓存的组信息,刚添加的组信息未能生效
#所以 docker images 执行时同样有错。 
方法2:
#每次启动docker或者重启docker的之后 
$cd /var/run 
$sudo chmod 666 docker.sock 
方法3:每条命令前面加上sudo
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容