Docker技术全集
2023-11-14 22:10:06 1 举报
AI智能生成
登录查看完整内容
Docker技术全集涵盖了使用Docker进行容器化应用程序开发和管理的全面指南。它包括了从基础知识到高级技巧的所有内容,如Docker架构、镜像和容器的概念、Dockerfile编写、网络和存储配置、容器编排和管理等。此外,该全集还介绍了如何使用Docker来构建和部署微服务架构、持续集成和持续交付(CI/CD)流程,以及如何监控和维护Docker环境。无论您是初学者还是有经验的开发人员,Docker技术全集都能为您提供宝贵的指导和实践经验,帮助您更好地利用Docker来加速应用程序的开发和部署过程。
作者其他创作
大纲/内容
Docker技术全集
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源
01.简介
可以实现打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化
02.作用
Web 应用的自动化打包和发布
自动化测试和持续集成、发布
在服务型环境中部署和调整数据库或其他的后台应用
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境
03.使用场景
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:• 允许开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。• 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。• 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。• 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
快速,一致地交付您的应用程序
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
响应式部署和扩展
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
在同一硬件上运行更多工作负载
Docker 是一个用于开发,交付和运行应用程序的开放平台。能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟
容器:秒级;虚拟机:分钟级
启动
容器:一般MB;虚拟机:一般GB
硬盘使用
容器:接近原生;虚拟机:弱于
性能
容器:单机支持上千个容器;虚拟机:一般几十个
系统支持量
特性对比
是什么?在计算机中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存和存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源,这些资源的新虚拟部分是不受现有资源的架设方式,地域或者物理组态所限制,一般所指的虚拟化资源包括计算能力和资料存储。
目的:解决高性能的物理硬件产能过剩和老旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理资源,对资源充分利用。
种类:软件虚拟化,硬件虚拟化,内存虚拟化,网络虚拟化,桌面虚拟化,服务虚拟化,虚拟机
虚拟化技术
04.特点
文档:1-安装docker.md链接:http://note.youdao.com/noteshare?id=f7b6b3e75849cad72a0e83d0b01c7e23&sub=6D779D063FD549F18EEDF01FD4DF37D1密码:NW68
文档:2-卸载docker.md链接:http://note.youdao.com/noteshare?id=0ed20a891e79a95107d3db863672b679&sub=5F0229ABD695420291305843860F0A74密码:W93J
文档:3-升级docker版本.md链接:http://note.youdao.com/noteshare?id=34ce04c90003b1cd35688c90b4518e67&sub=2A45F21F4DC849B4B3A68B58CA4FBECB密码:IZJR
05.安装
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
镜像(image)用于创建Docker容器的模板
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器(Container)独立运行的一个或一组应用
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
仓库(Registry)用于保存镜像
客户端(client)使用docker API与docker守护进程通信
主机(host)一个物理或者虚拟的机器用于执行Docker守护进程和容器
machine:一个简化docker安装的命令工具,比如virtualBox,Digital ocean
一个镜像就是一层层的layer层文件,盖楼而成,上层文件叠与下层文件上,若上层文件有与下层文件重复的,这覆盖下层文件重复的部分
镜像与容器总结
06.架构
首先是利用 Linux 的 Namespace 命名空间,来隔离进程之间的可见性,不同的服务进程彼此属于不同的 Namespace,互相无法感知对方的存在。
Docker 实现了 Host、Container、None 和 Bridge 四种网络模式,默认使用 Bridge 桥接模式。每一个容器在创建时都会创建一对虚拟网卡,两个虚拟网卡组成了数据的通道,其中一个会放在容器中,另一个会加入到 Docker0 的网桥中。Docker0 网桥通过 iptables 中的配置与宿主机上的网卡相连,所有符合条件的请求都会通过 iptables 转发到 Docker0 并由网桥分发给对应的容器网卡。为了防止容器进程修改宿主机的文件目录,Docker 通过改变进程访问文件目录的根节点,结合 Namespace 来隔离不同容器进程可以访问的文件目录。然后,通过 Namespace,Docker 隔离了进程、网络和文件目录,但是在进程运行中的 CPU 和内存等还是共享状态。Docker 通过 Control Groups 也就是 Cgroups 来对进程使用的资源进行限制,包括 CPU、内存和网络带宽等。
那么,Docker 是如何把镜像运行起来的呢?Docker 的镜像是分层结构,例如一个服务镜像可以由操作系统层、基础环境层、Web 容器层、服务代码层,层层依赖构成。通过 UnionFS 就是联合文件系统把 Image 中的不同分层作为不同的只读目录,而 Container 是在只读的镜像目录上创建的可读可写的目录,通过这种方式来把镜像运行起来的。Docker 提供了 AUFS、Overlay、Devicemapper、ZFS 等多种不同存储驱动实现。
Docker 是通过对不同运行进程进行隔离来实现虚拟化,主要利用三种方式来实现服务的隔离,如上图所示。
数据卷是宿主机中的一个目录或文件;当容器目录和数据卷目录绑定后,对方的修改会立即哦同步;一个容器可以挂载多个数据卷
概念
注意:1、目录必须是绝对路径;2、如果目录不存在,会自动创建;3、可以挂载多个数据卷
$ docker run ... -v 宿主目录(文件):容器内目录(文件)...
$ docker run -it --name=c3 -v ~/data:/root/data centos:7
举例
配置数据卷
多个容器进行数据交换,两个方法:(1)多个容器挂载同一个数据卷;(2)数据卷容器
1、创建启动C3数据卷容器,使用-v参数设置数据卷$ docker run -it --name=c3 -v /volume centos:7 /bin/bash2、创建启动c1、c2容器,使用--volumes-from参数设置数据卷$ docker run -it --name=c1 -volumes-from c3 centos7 /bin/bash$ docker run -it --name=c12 -volumes-from c3 centos7/bin/bash
配置数据卷容器案例
数据卷容器
容器数据的持久化;客户端和容器数据交换;容器间数据卷交换
作用
数据卷概念
07.实现原理
docker pull ubuntu
获取镜像
docker run -it ubuntu /bin/bash
启动容器
docker ps
查看容器
docker ps -a
查看所有容器
docker start id
docker stop id
停止容器
docker restart id
重启容器
docker run -itd --name ubuntu-test ubuntu /bin/bash
运行容器
docker exec -it id /bin/bash
进入容器
docker export id > ubuntu.tar
导出容器(快照)
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
导入容器(快照)
# docker save [本地镜像名] > [保存的路径及文件名,tar.gz 尾缀名]docker save my-redis:3.2 > /root/centos.tar.gz# 或者 docker save -o [导出后的文件名] [指定导出哪个镜像]# docker save -o javamaterial.tar javamaterial:v1
导出容器(镜像)
# docker load < [要导入的备份镜像]docker load < /root/centos.tar.gz
导入容器(镜像)
docker rm -f id
删除容器
docker port id
查看容器端口映射
docker inspect id
查看容器详细信息
docker logs -f id
查看容器日志
容器使用
docker images
列出镜像列表
docker pull ubuntu:13.10
获取一个新的镜像
docker search httpd
查找镜像
docker pull httpd
拖取镜像
docker rmi httpd
删除镜像
docker commit -m=\"has update\" -a=\"runoob\" e218edb10161 runoob/ubuntu:v2
从已经创建的容器中更新镜像,并且提交这个镜像
Dockerfile是一个文本文件,包含了一条条的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像对于开发人员,可以为开发团队提供一个完全一致的开发环境对于测试人员,可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了对于运维人员,在部署的时候可以实现应用的无缝移植
描述
进度调度子系统
进程通信子系统
内存管理子系统
设备管理子系统
bootfs:包含bootloader(引导加载程序)和kernel(内核)
root方式:root文件系统,包含的就是典型Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件
不同的Linux发行版,bootfs基本一样,而rootfs不同,如ubuntu、centos等
文件管理子系统
网络通信子系统
作用控制子系统
操作系统组成部分
Docker镜像是由特殊的文件系统叠加而成;最低端是bootfs,并使用宿主机的bootfs第二层是root文件系统rootfs称为base image;然后再往上可以叠加其它的镜像文件统一文件系统(Union File System)技术能够将不同层整合成一个文件系统,为这层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器
Docker镜像原理
docker build -f ./centos_dockerfile -t xzln_centos:1
(1)定义父镜像:FROM centos:7(2)定义作者信息:MAINTAINER itheima<itheima@163.com>(3)执行安装vim命令:RUN yum install -y vim(4)定义默认的工作目录:WORKDIR/usr(5)定义容器启动执行的命令:CMD /bin/bash
Dockerfile制作案例
微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启动维护的工作量很大要从Dockerfile bulid image或者去dockerhub拉取image要创建多个container要管理这些container(启动停止删除)
是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建、启动和停止
Dockers Compose
服务编排(按照一定的业务规则批量管理容器)
Docker官方的Dockerhub是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望自己的镜像放到公网中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。
Docker私有仓库
Dockerfile
使用 Dockerfile 指令来创建一个新的镜像
创建镜像
docker tag id runoob/centos:dev
设置镜像标签
镜像使用
# 将指定容器的指定目录,复制到宿主机当前目录docker cp id:/x/y/z.ini ./
容器复制
容器连接
https://hub.docker.com 免费注册一个 Docker 账号
自建harbor
注册
docker login
登录
docker logout
退出
docker tag ubuntu:18.04 username/ubuntu:18.04
推送镜像
仓库管理
08.操作命令
Docker出现的原因–应用环境配置费时费力• 版本问题、底层依赖冲突问题一般在公司我们制作一个产品通常需要开发和上线,这就涉及到开发人员和运维人员的工作。而通常一个产品会有两套环境,一套环境是开发人员的开发时所用的环境,另一套则是运维人员根据开发人员的提示所配置的环境,但这两套环境和应用配置难免会有不同或冲突,这就导致有时候在开发人员电脑上可以运行但上线时却无法运行。版本更新导致服务不可用。
docker 为什么出现?
轻巧–相对于笨重的虚拟机• docker容器技术和虚拟机一样都是虚拟技术,但是十分轻巧, docker模拟的不是完整的操作系统• 比如安装centos 系统,只用到centos的最核心
docker具体有什么优点?
Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器。
(1)镜像:打包项目带上环境,即镜像
每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。
(2)容器:镜像创建的运行实例,Docker利用容器来运行应用
Docker Hub:国外的阿里云:配置镜像加速
(3)仓库:存放镜像(文件)的地方,分为共有仓库和私有仓库
docker的三个重要概念
09.必懂知识点
Docker 是一个开源的容器化平台,它可以让开发者将应用程序及其依赖项打包到容器中,以实现在不同环境之间快速部署和运行的目标
Docker 是什么,说说你的理解?
Docker 容器和虚拟机都提供了隔离和封装应用程序的方法,但它们之间存在一些重要的区别。虚拟机是通过虚拟化技术来模拟一个完整的操作系统,而容器只是使用宿主操作系统的内核,并添加必要的文件系统和库来运行应用程序。因此,容器比虚拟机更轻量级,启动更快,占用更少的资源,并且更易于管理
Docker 容器和虚拟机有何区别?
Docker Hub 是一个公共的 Docker 镜像仓库,用户可以在其中分享和下载 Docker 镜像。它还提供了一些其他功能,例如自动构建、访问控制等
Docker Hub 是什么?
Dockerfile 是 Docker 用来构建镜像的脚本。它定义了镜像构建过程中需要执行的步骤,例如安装软件、复制文件等。通过编写 Dockerfile,可以实现自动化的镜像构建和部署
Dockerfile 是什么?
Docker 镜像是一个静态的文件,它包含了应用程序及其依赖项的文件系统、库、配置等。Docker 容器则是运行时对象,它基于镜像启动,并包含了应用程序的运行状态、网络连接等信息。因此,可以认为容器是镜像的实例化
Docker 镜像和容器有何关系?
可以使用 docker ps 命令列出当前正在运行的容器。如果需要查看所有容器(包括已经停止的),可以使用 docker ps -a 命令
如何列出正在运行的 Docker 容器?
可以通过编写 Dockerfile 来定义镜像的构建过程,然后使用 docker build 命令来构建镜像。例如,可以使用以下命令来构建名为 myimage 的镜像 docker build -t myimage .
如何构建一个 Docker 镜像?
可以使用 docker rm 命令来移除容器 docker rm <container-id>
如何从 Docker 中移除一个容器或镜像?
四种状态:运行、暂停、重启和退出
Docker容器有多少种状态?
FROM:指定基本镜像;LABEL:功能是指定镜像标签;RUN:操作指定的命令;CMD:启动容器时运行的命令
Dockerfile中最常见的指令是什么?
一般来说,虽然COPY的ADD和COPY功能相似,但COPY是首选,因为它比ADD更容易理解。COPY只支持将本地文件复制到容器中,而ADD具有一些不明显的功能(如局部TAR提取和远程URL支持)。因此,ADD的最佳用途是自动将本地TAR文件提取到镜像中,如ADD rootfs.tar.xz /
COPY和ADD命令在Dockerfile中有什么区别?
在优化Docker容器性能方面,可以从多个角度入手。例如,通过优化容器的资源管理、调整Docker内核参数、使用基于Docker的容器优化工具等。另外还可以使用Docker多阶段构建、构建高效的Dockerfile等方式提高容器性能
如何优化Docker容器的性能?
为了保证Docker容器的安全性,可以采取多种措施,包括做好基础安全工作、使容器具有最小化的特权、使用Docker安全检测工具、检查容器镜像、实现安全的Docker容器编排等
如何保证Docker容器的安全性?
维护Docker容器需要考虑多个因素,包括容器的生命周期管理、容器的日志和监控、容器网络的管理和安全等。常用的维护方法包括Docker重启策略、容器日志管理、定期清理容器、使用Docker监控工具等
如何维护Docker容器?
Docker Compose是一款用于管理多个Docker容器的工具,可以帮助您定义和管理Docker应用程序的多个组件。Docker Compose支持通过配置文件轻松定义容器、网络和存储卷,并可以使用Docker Compose命令行工具轻松启动、停止和管理应用程序的多个容器
谈谈Docker Compose的作用?
Docker提供了多种网络模式,常用的有以下几种:- 桥接网络模式:Docker容器通过一个虚拟的网桥与宿主机进行通信,同时可以配置静态IP地址。- 主机网络模式:Docker容器与宿主机共享网络,可以直接使用宿主机的网络栈,性能更好。- none网络模式:Docker容器没有网络访问能力,适用于一些特殊场景。
Docker网络配置
Docker容器的生命周期包括以下几个阶段:- 创建容器:通过执行docker run命令或使用Docker API创建容器。- 启动容器:通过执行docker start命令或使用Docker API启动容器。- 停止容器:通过执行docker stop命令或使用Docker API停止容器。- 删除容器:通过执行docker rm命令或使用Docker API删除容器。
Docker容器的生命周期
Docker Compose是一个用于定义和管理多个Docker容器的工具。通过一个YAML文件,可以定义多个容器之间的关系、网络配置、环境变量等。使用Docker Compose可以简化多个容器的部署和管理。
Docker Compose的作用
Docker Swarm是Docker官方提供的容器编排工具,用于管理多个Docker主机上的容器集群。通过Docker Swarm,可以实现容器的自动化部署、伸缩和高可用。
Docker Swarm的作用
10.必备面试题
0 条评论
回复 删除
下一页