Docker是用于开发、装载和运行应用的开放平台。Docker项目的目标是实现轻量的操作系统级虚拟化解决方案,它提供了一种在容器中安全隔离地运行应用程序的方式。可以在宿主机上运行多个容器。

Docker的基础是Linux容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作Docker的容器就像操作一个快速轻量级的虚拟机一样简单。

一:Docker架构

Docker使用客户端-服务器架构。Docker client与Docker daemon进行交互,向其发送命令,由Docker daemon执行构建、运行容器等任务。

Docker client和Docker daemon可以运行在同一台主机上,也可以连接远端的Docker daemon。Docker client和Docker daemon之间通过socker或者RESTful API进行通信。架构如下:

用户通过Docker client与Docker daemon交互。当执行docker XXX命令时,相当于启动了一个client,该client将消息发送给daemon,由daemon执行具体的任务。

Docker中有三个基本概念:镜像(Image)、容器(Container)、仓库(Repository)。理解了这三个概念,就理解了 Docker 的整个生命周期。

1:镜像

Docker镜像是一个只读的模板,是一个静态的概念。例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面安装了Apache或用户需要的其它应用程序。

使用镜像来创建 Docker容器。Docker利用容器来运行应用程序。

2:容器

容器是从镜像创建的运行实例,是一个动态的概念。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

3:仓库

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。用户也可以在本地网络内创建一个私有仓库。

Docker中的镜像是一个只读的模板,每个镜像都是由一系列的层组成。Docker使用统一文件系统(union file systems)来将这些层整合成独立的镜像。统一文件系统使得多个文件系统上的文件和目录,透明的叠加在一起,形成一个完整的文件系统。

Docker如此轻量级的原因就是因为分层的概念。当改变一个Docker镜像时,比如升级一个应用到新的版本,则只是构建了一个新的层,因此无需构建或替换整个镜像,只需要增加新的层就可以了。

容器中包含了操作系统环境、用户文件以及元数据。容器从镜像中创建,镜像是只读的,当运行容器时,Docker向镜像的顶部添加了一个可读写的层,从而可以运行应用程序了。

当执行下面的命令时:

$ docker run -i -t ubuntu /bin/bash

首先可执行程序docker启动一个Docker客户端,选项run用于启动一个新的容器。Docker客户端通知Docker daemon执行以下过程来运行容器:

1:使用ubuntu作为构建容器的镜像;

2:当容器加载后,在容器中执行/bin/bash命令,启动一个BASH  shell。

Docker daemon具体的执行步骤是:

1:检查镜像是否存在。首先检查本地是否具有ubuntu镜像,如果不存在,则从Docker Hub上查找并下载。如果本地已经有ubuntu镜像了,则使用它构建容器;

2:创建新容器;

3:分配一个文件系统,并mount一个可读写的层。容器就在该文件系统上构建,并在镜像上添加了一个可读写的新层。

4:分配一个网络接口。创建网络接口用于与宿主机通信。

5:分配一个IP地址。从池中寻找一个可用的IP地址并分配给网络接口。

6:运行指定的应用程序;

7:捕获应用程序的输出。连接并且记录标准输入、标准输出以及标准错误输出。

二:安装

运行docker,内核需要至少是3.10以上。

1:使用curl安装

$ curl -fsSL https://get.docker.com/ | sh

2:使用yum安装

$ yum update
$ tee /etc/yum.repos.d/docker.repo <<EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF $ yum install docker-engine
$ service docker start

 

验证docker是否安装成功

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
535020c3e8ad: Pull complete
af340544ed62: Pull complete
Digest: sha256:a68868bfe696c00866942e8f5ca39e3e31b79c1e50feaee4ce5e28df2f051d5c
Status: Downloaded newer image for hello-world:latest Hello from Docker.
This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps:
1. The Docker Engine CLI client contacted the Docker Engine daemon.
2. The Docker Engine daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker Engine daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker Engine daemon streamed that output to the Docker Engine CLI client, which sent it
to your terminal. To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com For more examples and ideas, visit:
https://docs.docker.com/userguide/

三:问题

1:运行容器时,下载image失败,需要设置代理:

$ mkdir /etc/systemd/system/docker.service.d
$ tee /etc/systemd/system/docker.service.d/http-proxy.conf << EOF
> [Service]
> Environment="HTTP_PROXY=http://192.168.20.22:1888" "NO_PROXY=localhost,127.0.0.1"
> EOF $ systemctl daemon-reload
$ systemctl restart docker

参考:https://docs.docker.com/engine/admin/systemd/#http-proxy

2:启动docker失败:

Error starting daemon: Error initializing network controller: Error creating default \"bridge\" network: Failed to setup IP tables, cannot acquire Interface address: Interface docker0 has no IPv4 addresses"

原因:可能是之前安装docker未卸载干净

解决:删除docker0网桥:

$ ifconfig docker0 down
$ brctl delbr docker0

https://docs.docker.com/engine/understanding-docker/

https://docs.docker.com/engine/installation/linux/rhel/

00docker安装和简介的更多相关文章

  1. InfluxDB学习之InfluxDB的安装和简介

    最近用到了 InfluxDB,在此记录下学习过程,同时也希望能够帮助到其他学习的同学. 本文主要介绍InfluxDB的功能特点以及influxDB的安装过程.更多InfluxDB详细教程请看:Infl ...

  2. 第二百九十一节,RabbitMQ多设备消息队列-安装与简介

    RabbitMQ多设备消息队列-安装与简介 RabbitMQ简介 解释RabbitMQ,就不得不提到AMQP(Advanced Message Queuing Protocol)协议. AMQP协议是 ...

  3. (转)阿里 RocketMQ 安装与简介

    原文:阿里 RocketMQ 安装与简介 一.简介 官方简介: l  RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: l  能够保证严格的消息顺序 l  提供丰富的消息拉取模式 l ...

  4. 尚硅谷Docker---docker安装及简介

    尚硅谷Docker---docker安装及简介 一.总结 一句话总结: docker就相当于是一个极微型的linux系统,独立 1.使用Docker的步骤? 1).安装Docker 2).去Docke ...

  5. 1.Cobaltstrike 安装与简介

    1.Cobaltstrike 安装与简介 一.简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人内称为CS.自去年起, Cobaltstrike升级到3.0版本, ...

  6. Spark学习(一) -- Spark安装及简介

    标签(空格分隔): Spark 学习中的知识点:函数式编程.泛型编程.面向对象.并行编程. 任何工具的产生都会涉及这几个问题: 现实问题是什么? 理论模型的提出. 工程实现. 思考: 数据规模达到一台 ...

  7. 阿里 RocketMQ 安装与简介

    一.简介 官方简介: l  RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: l  能够保证严格的消息顺序 l  提供丰富的消息拉取模式 l  高效的订阅者水平扩展能力 l  实时的 ...

  8. flume1.5.2安装与简介

    关于flume的简介看参考:http://www.aboutyun.com/thread-7415-1-1.html 其实一张图就简单明了了 简单安装: 1.下载解压 ... 2.配置JDK,flum ...

  9. LR实战之Discuz开源论坛——安装及简介

    想了很久,也许是因为这段时间特别闲,从毕业到现在,我的测试职业生涯也近两年了,发现自己越来越喜欢测试领域,也越来越偏向测试开发了,作为一名专业的测试人员,不得不要学习性能测试,而使用LoadRunne ...

随机推荐

  1. vue项目 安装和配置sass & main.js引入scss文件报错

    通过npm 安装 cnpm install --save-dev sass-loader cnpm install --save-dev node-sass 在build文件夹下的webpack.ba ...

  2. 外网如何访问vmware虚拟机的web服务(转载)

    目的: 主机上安装了VMware,VMware上安装了Linux虚拟机(我安装的是Centos7).我想让虚拟机向外提供Web服务.本文记录如何让我的主机和外网用户可以访问VM虚拟机上的Web. 网络 ...

  3. 用js实现base64编码器

    base-64作为常见的编码函数,在基本认证.摘要认证以及一些HTTP扩展中得到了大量应用.在前端领域,也常常把图片转换为base-64编码在网络中传输.本文将详细介绍base64的原理及用js实现b ...

  4. CodeChef--SEPT14小结

    这套题目只做了几个相对简单的.其他的做起来比较吃力. A 找下规律 /***************************************************************** ...

  5. GIT → 09:TortoiseGit 图形化工具

    GIT → 09:TortoiseGit 图形化工具

  6. Linux下安装docker,更改镜像仓库地址,并部署springboot应用

    今天做不成的事,明天也不会做好. 各位同学大家好,随着docker的快速发展,越来越多的人开始使用,一方面随着容器化这个趋势越来越火,docker成为了其中的佼佼者:二来容器化确实降低了运维的门槛,让 ...

  7. Vue.之.创建项目

    Vue.之.创建项目 第一次使用vue的时候,在已完成node的情况下,还需要在进行安装vue. 指令:cnpm install vue-cli -g      //全局安装 vue-cli 检查vu ...

  8. java习题-集合框架-泛型

    集合框架 一 去除List集合中的重复元素. 思路: 1,先创建一个临时容器.用于存储唯一性的元素.2,遍历原容器,将遍历到的元素到临时容器中去判断,是否存在.3,如果存在,不存储到临时容器,如果不存 ...

  9. GYM 101981E(开关反转性质)

    要点 做法是删去连续的k个0或k个1,连消.消消乐的那种,网上博主用个栈\(O(n)\)就很优秀地操作了这个过程 原因是有性质:比如k=3,101000贪心地翻就能翻成000101,所以连续的k个可以 ...

  10. golang之Sprintf函数