设为首页 收藏本站
查看: 2066|回复: 0

[经验分享] docker安装 镜像 容器 基础概念

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2018-5-28 06:08:43 | 显示全部楼层 |阅读模式
  分享一下曾经学docker的笔记  ---李常明
  博客地址:  http://keep88.blog.51cto.com
一、docker简介:
  1、docker是什么?
docker的英文本意是“搬运工”,一般称docker为一种应用容器,就是将所有的应用打包封装到容器中,只需创建容器并运行容器即可。启动和创建是秒级的。
  2、为什么要使用容器
    容器就相当于一个虚拟机,不过比虚拟机的功能更加强大,可以从容器的优势上来看:
(1)、具有更好的移植性,可以在多平台运行
(2)、具有更好的隔离性,各个容器之间的数据和内存空间相互隔离,可以保证一定的安全性。
     Hyper-v  kvm  和xen 等虚拟机管理程序都“基于虚拟化硬件仿真机制”这意味着它们对系统要求很高,然而容器使用共享的操作系统,简单来说就是:vmware虚拟机通过使用hypervisor来调用硬件的资源,docker容器直接通过操作系统来调用硬件资源,容器是驻留在一个linux实例上,docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题。
  3、docker的优势
  (1)、快速交付应用程序
  开发者使用一个标准的image来构建开发容器,开发完成之后,系统管理员就可以使用这个容器来部署代码。
  Docker可以快速创建容器,快速迭代应用程序
  Docker容器是一款轻量级虚拟机,启动时间是次秒级的。 节约开发,测试,部署的时间
  (2)、更容易部署和扩展
    Docker容器可以在几乎所有的环境中运行,兼容很多平台
  (3)、效率更高
  不需要hypervisor,属于内核级的虚拟化
  (4)、更简单的管理
   通常只需要小小的改变就可以替代以往巨型和大量的更新工作。
Vm和docker之间的区别
1、启动速度快
2、资源利用率高
3、性能开销小,vm需要额外的cpu和内存来完成os的功能,占据了额外的资源
4、运行数量多
5、内核级的虚拟化
6、跨平台使用,迁移性能强
7、管理简单
  可以从启动,硬盘使用,性能,系统支持量来进行比较
  
特性
容器
虚拟机
启动
秒级
分钟级
硬盘使用
MB
GB
性能
接近原生
弱于
系统支持量
单机支持上千个容器
低于容器的数量



  总结:
docker的优势:从四点上来分析:多,快,好,省.
多:可以在单个主机上部署上千个容器
快:快速交付应用程序,启动和创建是秒级的。
好:更容易部署和扩展,兼容很多平台,效率更高,更简单的管理,更轻松的迁移。
省:采用内核级虚拟化,直接通过操作系统来调取硬件资源。资源利用率高,是一款轻量级虚拟化

二、docker的体系结构:
  Docker使用C/S结构,docker daemon作为server端接受client的请求,并处理(创建,运行,分发容器),它们可以运行在一个机器上,也通过socket或者RESTful API通信
  

DSC0000.png

Docker daemon 是服务端,一般在宿主机后台运行
  Docker client 以系统命令的形式存在,用户用docker命令来跟docker daemon 交互。
DSC0001.png

Docker daemon(服务端:守护进程)
   Docker守护进程运行在一台主机上,用户并不直接和守护进程进行交互,而是通过docker客户端间接和其进行通信。
   Docker client  (docker客户端)
     实际上是docker的二进制程序,实现用户与docker交互,它接受指令并且与背后的docker守护进程通信。

Docker的内部构建:
     Docker images:docker镜像
Docker repository:  docker仓库
Docker containers:docker 容器
Docker镜像:是docker容器运行时的只读模板,镜像可以用来创建容器,每一个镜像由一系列的层组成,docker使用UnionFS(联合文件系统)将这些层联合到单独的镜像中。UnionFS允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。
例如:centos镜像中安装nginx,就成了nginx镜像,它的层级是:底层是centos操作系统镜像,上面叠加一个nginx层,就完成了一个nginx镜像的构建。
  如下图:
DSC0002.png

Docker仓库
   用来保存镜像,可以理解为代码控制中的代码仓库,docker仓库也有公有和私有的概念,公有的docker仓库名字是docker hubdocker hub提供了庞大的镜像集合供使用,这些镜像可以是自己创建,或者在别人的镜像基础上创建。
仓库分为公开仓库(public)和私有仓库(private)两种形式
有一个概念需要注意的是仓库注册服务器,仓库注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像根据标签(tag)来进行分类。
Docker容器:
  容器用来运行应用,一个docker容器包含了所有的某个应用运行所需要的环境。每一个docker容器都是从docker镜像创建的。Docker容器可以运行,开始,停止,移动和删除,每一个docker容器都是独立和安全的应用平台。
注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

Docker底层技术:
Docker底层的2个核心技术分别是namespacescontrol groups
Namespaces用来隔离各个容器:
1)pid namespace:用来隔离不同用户的进程
2)Net namespace:用来隔离网络,docker默认采用veth的方式将container中的虚拟网卡同host上的一个docker bridgedocker0链接在一起。
3)Ipc namespace:container(容器)中的进程交互
4)Mnt namespace:类似于chroot,文件系统的隔离
5)Uts namespace:域名隔离
6)User namespace:用户隔离
三、Docker 安装
docker官网:https://docs.docker.com
Docker值得关注的特性:
  文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
  资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup
  网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。
  日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
  变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
  交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,

CentOS 系列安装 DockerDocker 支持 CentOS6 及以后的版本。
CentOS6:
在RedHat/CentOS环境下安装Docker。官方文档要求Linux kernel至少3.8以上,且docker只能运行在64位的系统中。由于RHEL6CentOS6的内核版本为2.6,因此必须要先升级内核。

升级内核(记住一定要升级,要不然会出现很多莫名奇怪的问题,建议用yum安装)
  再次我使用第2种方法升级内核;
    1、yum安装带aufs模块的3.10内核
#cd /etc/yum.repos.d
#wget
#yum install kernel-ml-aufs kernel-ml-aufs-devel
  如果yum安装失败,使用此yum源:
[bnied-kernel-ml-aufs]
name=Copr repo for kernel-ml-aufs owned by bnied
baseurl=https://copr-be.cloud.fedoraproject.org/results/bnied/kernel-ml-aufs/epel-6-$basearch/
type=rpm-md
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/bnied/kernel-ml-aufs/pubkey.gpg
repo_gpgcheck=0
enabled=1
enabled_metadata=1  
2、或者使用下列方法升级内核:
1)、安装elrepo yum源:
#rpm  --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
2)、在yumelrepo源中有mllt两种内核,其中ml(mainline)为最新版本的内核,lt为长期支持的内核
  安装ml内核:
yum --enablerepo elrepo-kernel -y install kernel-ml
  

  安装lt内核:
yum --enablerepo elrepo-kernel -y install kernel-lt
  


  
2、修改grub的主配置文件/etc/grub.conf,设置default=0,表示第一个title下的内容为默认启动的kernel(一般新安装的内核在第一个位置),重启系统,这时候你的内核
成功升级了。
  

   查看内核是否支持aufs:
[root@localhost ~]# grep aufs /proc/filesystems
nodev    aufs  
对于 CentOS6,可以使用EPEL库安装 Docker,命令如下
#yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
#yum install docker-io
  

启动docker服务
#service docker start
CentOS7:
Prerequisites(先决条件)
Docker requires a 64-bit installation regardless of your CentOS version. Also, your kernel must be 3.10 at minimum, which CentOS 7 runs.
To check your current kernel version, open a terminal and use uname -r to display your kernel version:
DSC0003.png
  
Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装docker,只需要运行下面的 yum 命令:
[root@localhost~]#yum install docker
启动 Docker 服务:
安装完成后,使用下面的命令来启动docker服务,并将其设置为开机启动:
[root@localhost~]#service docker start
[root@localhost~]#chkconfig docker on
(此处采用了旧式的sysv语法,如采用CentOS 7中支持的新式systemd语法,如下:
[root@localhost~]#systemctl start docker.service
[root@localhost~]#systemctl enable docker.service
查看docker版本  
#docker version
  

DSC0004.png

查看
docker
版本:
docker  info  

DSC0005.png

以上是使用centos7软件源提供的docker安装程序
附:也可以按照官方文档安装
Log into your machine as a user with sudo or root privileges.
Make sure your existing yum packages are up-to-date.
3.Add the yum repo
$ sudo tee /etc/yum.repos.d/docker.repo<<-'EOF'
[dockerrepo]
name=DockerRepositorybaseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
  

注:如果我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令了。tee命令读取标准输入,把这些内容同时输出到标准输出和(多个)文件中
4.Install the Docker package
$ sudo yum install docker-engine
5.Start the Docker daemon.
$ sudo service dockerstart
6.Verify docker is installed correctly by running a test image in a container.
验证docker安装正确
$ sudo docker run hello-world
  

DSC0006.png

docker默认使用的是unix socket
DSC0007.png

附:直接输入docker命令来查看所有的OptionsCommands,查看某一个command的详细使用方法:dockerCOMMAND--help

Docker image 管理          1.14
通过此前笔记已经了解了docker的内部构建
由docker image (镜像) docker repository(仓库)docker container(容器)组成,

docker命令:
docker images      //显示当前主机下的所有镜像
docker search “关键词”  //可以通过在docker hub公共仓库上查找所搜索的镜像包
docker  pull  docker.io/centos   //下载镜像(dockers hub上下载)
可以下载,也可以上传镜像,将镜像上传到docker hub上,不过得登陆docker hub的官网(https://hub.docker.com),注册用户,才能上传,称为自己的私有仓库,可以随时通过私有仓库下载传上去的镜像。
docker  push  docker.io/centos  //上传镜像
上传前,需要登陆docker hub:   docker  login --输入用户名,密码---登陆成功后,即可执行上传命令。
docker tag  “镜像ID号” 修改的镜像名  //修改镜像的显示名称
注意:如果修改了镜像名称,那镜像名称就是由仓库名+标签组成的,默认的标签是latest
docker inspect 或者 docker  --no-trunc //获得完整的镜像ID
docker  rmi   镜像名  //删除镜像

自定义创建镜像
方法一:使用docker commint
、首先使用基础镜像启动容器
docker  run  -i  -t   docker.io/centos
注释:基础镜像可以到docker hub上下载
docker.io/centos: 是基础镜像,简易版的linux操作系统
1、在容器中部署所需要的应用,最后exit
  1)、使用基础镜像启动容器
2)、使用yum安装telnet服务
  yum  -y  install telnet   // 测试:安装telnet服务  

DSC0008.png

2、将修改完的容器使用docker commint 创建镜像(需要记住容器的id号)
  # docker commit   容器ID号  镜像名
DSC0009.png

使用第一种方法就创建完成了。
此方法的缺陷在于:当用户使用镜像启动容器后,不能得知容器曾经做过什么操作,安装了哪些应用,特使用第二种方法,
方法二:通过dockerfile来创建镜像
1、新建存放dockerfile文件的目录
mkdir  -pv  /docker/telnet
  vim  /docker/telnet/dockerfile   //编辑内容
DSC00010.png

注释:FROM:指定基础镜像的源
RUN: 指在linux系统中执行的命令
MAINTAINER: 指定维护者的用户消息 (可省略)
、使用docker build命令创建镜像,
docker  build  -t=”centos:telnet”  /docker/telnet/
注释:  -t:指定镜像名称   /docker/telnet:指定dockerfile文件的存放路径
  注意:一个镜像不能超过127层。
DSC00011.png

  查看镜像: docker  images
DSC00012.png

2、通过新建的镜像就可以启动容器了
  docker  run  -i  -t  centos:telnet2
DSC00013.png

  可以测试,是否安装telnet服务,是否存在用户lisi
DSC00014.png

  

第二种方法,也创建完成了,可以通过dockerfile文件查看,容器中的所有配置,所以更适合用户间的交互。
导入和导出镜像
  如果在A主机上部署了镜像,那么想在B主机上也使用这个镜像来启动容器,这时候就可以使用导入和导出镜像来完成操作,也可以将镜像传到docker pub上,不过需要占用带宽,所以速度慢些,在此解释如何导入和导出
  将镜像导出:
   导出是将镜像归档为tar文件:
docker  save  -o  centos_foundation.tar  docker.io/centos
  

注释:centos_foundation.tar:指定的归档文件名称
docker.io/centos:指定需要导出的镜像
DSC00015.png

如果在B主机上使用此镜像,就可以直接将此镜像拷贝到B主机上,执行以下命令,导入成镜像
  将镜像导入:
         docker  load  -i   centos_foundation.tar
  

或者:
     
Docker  load  <  centos_foundation.tar  //
使用重定向将其导入到镜像库
  

DSC00016.png

到此,镜像就导入成功了,可以通过之前的命令,通过镜像来启动容器了。
附:查看man  docker  帮助手册,了解更多的docker命令的使用。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481900-1-1.html 上篇帖子: docker swarm集群 下篇帖子: Docker的概念及剖析原理和特点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表