00docker安装和简介
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安装和简介的更多相关文章
- InfluxDB学习之InfluxDB的安装和简介
最近用到了 InfluxDB,在此记录下学习过程,同时也希望能够帮助到其他学习的同学. 本文主要介绍InfluxDB的功能特点以及influxDB的安装过程.更多InfluxDB详细教程请看:Infl ...
- 第二百九十一节,RabbitMQ多设备消息队列-安装与简介
RabbitMQ多设备消息队列-安装与简介 RabbitMQ简介 解释RabbitMQ,就不得不提到AMQP(Advanced Message Queuing Protocol)协议. AMQP协议是 ...
- (转)阿里 RocketMQ 安装与简介
原文:阿里 RocketMQ 安装与简介 一.简介 官方简介: l RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: l 能够保证严格的消息顺序 l 提供丰富的消息拉取模式 l ...
- 尚硅谷Docker---docker安装及简介
尚硅谷Docker---docker安装及简介 一.总结 一句话总结: docker就相当于是一个极微型的linux系统,独立 1.使用Docker的步骤? 1).安装Docker 2).去Docke ...
- 1.Cobaltstrike 安装与简介
1.Cobaltstrike 安装与简介 一.简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人内称为CS.自去年起, Cobaltstrike升级到3.0版本, ...
- Spark学习(一) -- Spark安装及简介
标签(空格分隔): Spark 学习中的知识点:函数式编程.泛型编程.面向对象.并行编程. 任何工具的产生都会涉及这几个问题: 现实问题是什么? 理论模型的提出. 工程实现. 思考: 数据规模达到一台 ...
- 阿里 RocketMQ 安装与简介
一.简介 官方简介: l RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: l 能够保证严格的消息顺序 l 提供丰富的消息拉取模式 l 高效的订阅者水平扩展能力 l 实时的 ...
- flume1.5.2安装与简介
关于flume的简介看参考:http://www.aboutyun.com/thread-7415-1-1.html 其实一张图就简单明了了 简单安装: 1.下载解压 ... 2.配置JDK,flum ...
- LR实战之Discuz开源论坛——安装及简介
想了很久,也许是因为这段时间特别闲,从毕业到现在,我的测试职业生涯也近两年了,发现自己越来越喜欢测试领域,也越来越偏向测试开发了,作为一名专业的测试人员,不得不要学习性能测试,而使用LoadRunne ...
随机推荐
- LUOGU P1680 奇怪的分组
题目背景 终于解出了dm同学的难题,dm同学同意帮v神联络.可dm同学有个习惯,就是联络同学的时候喜欢分组联络,而且分组的方式也很特别,要求第i组的的人数必须大于他指定的个数ci.在dm同学联络的时候 ...
- webapp-viewport 相关知识整理
我们在开发移动设备的网站时,最常见的的一个动作就是把下面这个东西复制到我们的head标签中: <meta name="viewport" content="widt ...
- 在vue中使用jq或者第三方插件
1.安装jQuery npm i jquery -S 2.修改webpack的配置文件 文件目录及名称:build/webpack.base.conf.js 注释代码为修改部分 'use strict ...
- Clash Credenz 2014 Wild Card Round题解
A题 简单模拟. /************************************************************************* > File Name: ...
- 【C++】从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- day38 09-Spring类的完整生命周期及后处理Bean
可以配置Bean的这个类的初始化和销毁的方法. 如何销毁这个bean?销毁必须得手动地关闭掉容器才行.而且销毁必须是在scope="singleton"下才有效.因为如果你scop ...
- linux设置变量的三种方法
1在/etc/profile文件中添加变量对所有用户生效(永久的) 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久生效”. 例如:编辑/etc/ ...
- 洛谷P1314 [NOIP2011提高组Day2T2] 聪明的质监员
P1314 聪明的质监员 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: ...
- 避免闲置云资源浪费 | 阿里云轻量级分布式应用服务 SAE 邀您公测
您是否遇到过: 资源利用率低,多数服务器CPU平均利用率在10%以下,用户需为大量闲置资源买单. 感知 IaaS 购买和集群运维,人员技能要求高,运维效率低. 想拥抱 Kubernetes.微服务架构 ...
- 官网svn提交到代码库,但是不能同步到web目录
现象:数据库名字存在,但是数据库中表为空:svn提交代码能到svn库中,但不能同步到web目录. 原因:磁盘分区满了,导致内测服务器中数据库先删掉但没能从线上拉取回来,显示数据库中表为空: 磁盘满,导 ...