Docker技术总结
2023-03-20 17:09:44 63 举报
AI智能生成
docker技术总结
作者其他创作
大纲/内容
06.docker基本操作
容器操作
docker info|version 信息|版本
docker run/create 镜像名 :创建一个新的容器并运行一个命令
docker start/stop/restart容器名:启动/停止/重启一个容器
docker kill 容器名 :直接杀掉容器,不给进程响应时间
docker rm 容器名 :删除已经停止的容器
docker pause /unpause 容器名:暂停/恢复容器中的进程
docker ps:查看容器列表(默认查看正在运行的容器,-a查看所有容器)
docker inspect 容器名 : 查看容器配置元数据
docker exec -it 容器名 /bin/bash 进入容器环境中交互操作
docker logs -since="2019-02-01" -f --tail=10 容器名 :查看日志
docker cp path1 容器名 :path容器与主机主键的数据拷贝
docker export -o test.tar 容器名:文件系统作为一个tar归档文件
docker import test.tar 镜像名:版本号:导入归档文件,成为一个镜像
加速器配置
vi /etc/docker/daemon.json:
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
镜像操作
docker images:列出本地镜像列表
docker rmi [镜像命名:版本]:删除镜像
docker tag [镜像名:版本] [仓库] /[镜像名:版本] :标记本地镜像,将其归入某一仓库
docker build -t [镜像命名:版本] [path] :Dockerfile创建镜像
docker history [镜像命名:版本] :查看指定镜像的创建历史
docker save -o xxx.tar [镜像名:版本] 将镜像保存成tar归档文件
docker load -input xx.tar 从归档文件加载镜像
07.docker架构
镜像(image)用于创建Docker容器的模板
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
容器(Container)独立运行的一个或一组应用
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
仓库(Registry)用于保存镜像
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
客户端(client)使用docker API与docker守护进程通信
主机(host)一个物理或者虚拟的机器用于执行Docker守护进程和容器
machine:一个简化docker安装的命令工具,比如virtualBox,Digital ocean
分支主题
镜像与容器总结
一个镜像就是一层层的layer层文件,盖楼而成,上层文件叠与下层文件上,若上层文件有与下层文件重复的,这覆盖下层文件重复的部分
08.Docker实现原理
Docker 是通过对不同运行进程进行隔离来实现虚拟化,<br>主要利用三种方式来实现服务的隔离,如上图所示。
首先是利用 Linux 的 Namespace 命名空间,来隔离进程之间的可见性,不同的服务进程彼此属于不同的 Namespace,互相无法感知对方的存在。
Docker 实现了 Host、Container、None 和 Bridge 四种网络模式,默认使用 Bridge 桥接模式。每一个容器在创建时都会创建一对虚拟网卡,两个虚拟网卡组成了数据的通道,其中一个会放在容器中,另一个会加入到 Docker0 的网桥中。Docker0 网桥通过 iptables 中的配置与宿主机上的网卡相连,所有符合条件的请求都会通过 iptables 转发到 Docker0 并由网桥分发给对应的容器网卡。为了防止容器进程修改宿主机的文件目录,Docker 通过改变进程访问文件目录的根节点,结合 Namespace 来隔离不同容器进程可以访问的文件目录。<br><br>然后,通过 Namespace,Docker 隔离了进程、网络和文件目录,但是在进程运行中的 CPU 和内存等还是共享状态。Docker 通过 Control Groups 也就是 Cgroups 来对进程使用的资源进行限制,包括 CPU、内存和网络带宽等。
那么,Docker 是如何把镜像运行起来的呢?Docker 的镜像是分层结构,例如一个服务镜像可以由操作系统层、基础环境层、Web 容器层、服务代码层,层层依赖构成。通过 UnionFS 就是联合文件系统把 Image 中的不同分层作为不同的只读目录,而 Container 是在只读的镜像目录上创建的可读可写的目录,通过这种方式来把镜像运行起来的。Docker 提供了 AUFS、Overlay、Devicemapper、ZFS 等多种不同存储驱动实现。
数据卷概念
概念
数据卷是宿主机中的一个目录或文件;当容器目录和数据卷目录绑定后,对方的修改会立即哦同步;一个容器可以挂载多个数据卷
配置数据卷
$ docker run ... -v 宿主目录(文件):容器内目录(文件)...
注意:1、目录必须是绝对路径;2、如果目录不存在,会自动创建;3、可以挂载多个数据卷
举例
$ docker run -it --name=c3 -v ~/data:/root/data centos:7
数据卷容器
多个容器进行数据交换,两个方法:(1)多个容器挂载同一个数据卷;(2)数据卷容器
配置数据卷容器案例
1、创建启动C3数据卷容器,使用-v参数设置数据卷<br>$ docker run -it --name=c3 -v /volume centos:7 /bin/bash<br><br>2、创建启动c1、c2容器,使用--volumes-from参数设置数据卷<br>$ docker run -it --name=c1 -volumes-from c3 centos7 /bin/bash<br>$ docker run -it --name=c12 -volumes-from c3 centos7/bin/bash
作用
容器数据的持久化;客户端和容器数据交换;容器间数据卷交换
09.Dockerfile
描述
Dockerfile是一个文本文件,包含了一条条的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像<br>对于开发人员,可以为开发团队提供一个完全一致的开发环境<br>对于测试人员,可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了<br>对于运维人员,在部署的时候可以实现应用的无缝移植
Docker镜像原理
操作系统组成部分
进度调度子系统
进程通信子系统
内存管理子系统
设备管理子系统
文件管理子系统
bootfs:包含bootloader(引导加载程序)和kernel(内核)
root方式:root文件系统,包含的就是典型Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件
不同的Linux发行版,bootfs基本一样,而rootfs不同,如ubuntu、centos等
网络通信子系统
作用控制子系统
Docker镜像是由特殊的文件系统叠加而成;最低端是bootfs,并使用宿主机的bootfs<br><br>第二层是root文件系统rootfs称为base image;然后再往上可以叠加其它的镜像文件<br><br>统一文件系统(Union File System)技术能够将不同层整合成一个文件系统,为这层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统<br><br>一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像<br><br>当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器
Dockerfile制作案例
(1)定义父镜像:FROM centos:7<br>(2)定义作者信息:MAINTAINER itheima<itheima@163.com><br>(3)执行安装vim命令:RUN yum install -y vim<br>(4)定义默认的工作目录:WORKDIR/usr<br>(5)定义容器启动执行的命令:CMD /bin/bash
docker build -f ./centos_dockerfile -t xzln_centos:1
服务编排(按照一定的业务规则批量管理容器)
微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启动维护的工作量很大<br>要从Dockerfile bulid image或者去dockerhub拉取image<br>要创建多个container<br>要管理这些container(启动停止删除)
Dockers Compose
是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建、启动和停止
Docker私有仓库
Docker官方的Dockerhub是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望自己的镜像放到公网中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。
01.简介
是什么?docker是一个开源项目,基于Google公司推出的go语言实现,遵从Apache2.0协议。
背景:云计算兴起后,服务器硬件扩展非常便利,软件服务部署成为了瓶颈,docker趁势而兴。
目标:实现轻量级的操作系统虚拟化解决方案,docker的基础是linux容器技术
02.虚拟化技术
是什么?在计算机中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存和存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源,这些资源的新虚拟部分是不受现有资源的架设方式,地域或者物理组态所限制,一般所指的虚拟化资源包括计算能力和资料存储。
目的:解决高性能的物理硬件产能过剩和老旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理资源,对资源充分利用。
种类:软件虚拟化,硬件虚拟化,内存虚拟化,网络虚拟化,桌面虚拟化,服务虚拟化,虚拟机
03.为什么用?
1、容器的启动可以在秒级实现,比传统的虚拟机方式要开得多
2、对系统资源的利用率更高,一台主机上可以同时运行数千个DOCKER容器
3、docker的出现,让开发、测试、上线的环境部署,成为一条龙。
4、更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
5、更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
6、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
7、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
04.特性对比
启动
容器:秒级;虚拟机:分钟级
硬盘使用
容器:一般MB;虚拟机:一般GB
性能
容器:接近原生;虚拟机:弱于
系统支持量
容器:单机支持上千个容器;虚拟机:一般几十个
05.docker安装部署
1、使用yum源安装:yum install docker
2、查看版本 docker version
分支主题
3、启动service docker start
分支主题
4、配置随机启动
子主题
5、hello-world部署测试
分支主题
0 条评论
下一页