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、管理简单可以从启动,硬盘使用,性能,系统支持量来进行比较
总结:
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内核
2、或者使用下列方法升级内核:
1)、安装elrepo yum源:
博客地址: 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通信
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-worlddocker默认使用的是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命令的使用。
相关文章推荐
- docker实战1 (docker-toolbox的安装,docker基础命令详解[运行,容器导入/导出,镜像导入/导出,数据卷,网络],构建100个docker实例的测试环境)
- Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离 Docker的安装 一、Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用
- Docker入门教程 Part 1 基础概念 - 镜像、容器、仓库
- GIS+=地理信息+容器技术(3)——Docker安装和镜像管理
- Docker安装初试&&制作centos6.5基础镜像
- Docker容器学习梳理--基础环境安装
- docker常用命令总结——安装、镜像、容器基本操作
- Docker 基础(二) 安装ubuntu 和 镜像保存路径
- Docker容器fedora镜像内dnf无法安装
- docker安装运行保存镜像容器
- Docker的Ubuntu镜像安装的容器无ifconfig命令和ping命令
- Docker 教程之基本概念(镜像,容器,仓库)详解
- Docker的Ubuntu镜像安装的容器无ifconfig命令和ping命令
- 深入了解docker(docker镜像、容器、仓库的基本概念)
- docker 实战---安装一个基础镜像 (一)
- docker实战之centos6.5上安装、镜像、容器相关操作
- 简述Docker镜像、容器、仓库概念
- Docker的概述-安装-仓库 镜像 容器三者关系(视频)-知识林
- Docker 镜像、容器、仓库的概念及基本操作
- 【个人笔记重点,不作为参考】主题:docker的容器、仓库、镜像三个主要概念