您的位置:首页 > 运维架构 > Docker

docker安装 镜像 容器 基础概念

2017-05-28 18:26 776 查看
分享一下曾经学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、管理简单可以从启动,硬盘使用,性能,系统支持量来进行比较

特性容器虚拟机
启动秒级分钟级
硬盘使用MBGB
性能接近原生弱于
系统支持量单机支持上千个容器低于容器的数量
总结:
docker的优势:从四点上来分析:多,快,好,省.多:可以在单个主机上部署上千个容器快:快速交付应用程序,启动和创建是秒级的。好:更容易部署和扩展,兼容很多平台,效率更高,更简单的管理,更轻松的迁移。省:采用内核级虚拟化,直接通过操作系统来调取硬件资源。资源利用率高,是一款轻量级虚拟化二、docker的体系结构: Docker使用C/S结构,docker daemon作为server端接受client的请求,并处理(创建,运行,分发容器),它们可以运行在一个机器上,也通过socket或者RESTful API通信




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



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镜像的构建。如下图:



Docker仓库 用来保存镜像,可以理解为代码控制中的代码仓库,docker仓库也有公有和私有的概念,公有的docker仓库名字是docker hub,docker hub提供了庞大的镜像集合供使用,这些镜像可以是自己创建,或者在别人的镜像基础上创建。仓库分为公开仓库(public)和私有仓库(private)两种形式有一个概念需要注意的是仓库注册服务器,仓库注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像根据标签(tag)来进行分类。Docker容器: 容器用来运行应用,一个docker容器包含了所有的某个应用运行所需要的环境。每一个docker容器都是从docker镜像创建的。Docker容器可以运行,开始,停止,移动和删除,每一个docker容器都是独立和安全的应用平台。注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。Docker底层技术:Docker底层的2个核心技术分别是namespaces和control groupsNamespaces用来隔离各个容器:1)pid namespace:用来隔离不同用户的进程2)Net namespace:用来隔离网络,docker默认采用veth的方式将container中的虚拟网卡同host上的一个docker bridge:docker0链接在一起。3)Ipc namespace:container(容器)中的进程交互4)Mnt namespace:类似于chroot,文件系统的隔离5)Uts namespace:域名隔离6)User namespace:用户隔离三、Docker 安装docker官网:https://docs.docker.comDocker值得关注的特性: 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。 资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。 网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。 日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。 变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。 交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,CentOS 系列安装 Docker,Docker 支持 CentOS6 及以后的版本。CentOS6:在RedHat/CentOS环境下安装Docker。官方文档要求Linux kernel至少3.8以上,且docker只能运行在64位的系统中。由于RHEL6和CentOS6的内核版本为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[/code]2)、在yum的elrepo源中有ml和lt两种内核,其中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:



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





查看
docker
版本:
docker  info





以上是使用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





docker默认使用的是unix socket




附:直接输入docker命令来查看所有的Options和Commands,查看某一个command的详细使用方法:dockerCOMMAND--helpDocker 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号” 修改的镜像名 //修改镜像的显示名称注意:如果修改了镜像名称,那镜像名称就是由仓库名+标签组成的,默认的标签是latestdocker 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服务





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



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



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



查看镜像: docker images



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



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




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


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



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


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





到此,镜像就导入成功了,可以通过之前的命令,通过镜像来启动容器了。
附:查看man docker 帮助手册,了解更多的docker命令的使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐