收藏 分销(赏)

4天实战 轻松玩转docker.pdf

上传人:Stan****Shan 文档编号:1241291 上传时间:2024-04-19 格式:PDF 页数:70 大小:6.36MB
下载 相关 举报
4天实战 轻松玩转docker.pdf_第1页
第1页 / 共70页
4天实战 轻松玩转docker.pdf_第2页
第2页 / 共70页
4天实战 轻松玩转docker.pdf_第3页
第3页 / 共70页
4天实战 轻松玩转docker.pdf_第4页
第4页 / 共70页
4天实战 轻松玩转docker.pdf_第5页
第5页 / 共70页
点击查看更多>>
资源描述

1、卷首语1、docker 原理及在运维工作的地位和作用运维工作进化论,docker、微服务、k8s 的联系,devops 和 docker 的关系,docker 的前世今生。2、容器,镜像和仓库容器和虚拟化,优势和劣势,底层核心;容器除了 docker 还有什么其他选择?docker 的安装及三大核心:容器、镜像、仓库。3、docker 的实际运用docker 的常用命令及注意事项,镜像的原理,dockerfile 的作用和应用,docker 的永久存储和网络通信。4、docker 实际工作案例实现搭建一台私有仓库,镜像仓库的上传和拉取,管理仓库,微服务的概念,用 docker 实现一个实际案例

2、。目录docker 原理及在运维工作的地位和作用5一、运维工作进化论:测试环境和生产环境5二、运维生产环境的发展9三、云原生技术栈的概念及技术13四、总结问答16容器、镜像和仓库18一、Docker 底层技术概述18二、Docker 版本及安装20三、Docker 的常用命令22docker 的实际运用30一、docker 基础命令(下)31二、dockerfile32三、dockerfile 是否可以被替代?39四、docker 的前世今生43docker 实际工作案例实现50一、数据持久化51二、harbor 仓库55三、微服务615docker 原理及在运维工作的地位和作用docker

3、原理及在运维工作的地位和作用演讲人:马哥教育摘要:本文整理自 4 天 Docker 实战”负责人马哥教育,在“1024 创造营-的分享。本篇内容主要分为四个部分:一、运维工作进化论:测试环境和生产环境二、运维生产环境的发展三、云原生技术栈的概念及技术四、总结问答视频链接:https:/ 原理及在运维工作的地位和作用docker 原理及在运维工作的地位和作用3、原生产环境1)多点集群单体应用。多点集群服务一个单体应用。2)公有云。一种按使用量付费的模型,用户可以随时随地、便捷地、按需地从可配置的计算资源共享池中获取所需的计算资源(网络、服务器、存储、应用程序等服务)。这些资源可以快速供给和释放,

4、用户只需投入较少的管理工作。公有云:云计算运营商拥有超大规模基础设施,对外提供云服务。3)git 更新docker 原理及在运维工作的地位和作用docker 原理及在运维工作的地位和作用随着运维人员的版本更新频率增加,运维团队熬夜加班,各部门协调不稳定,导致工作人员压力更大,形成了恶性循环。为了解决上述问题,开发人员做了功能开关。在独立的分支上开发新功能,全部开发测试完成之后,合并到主干。从而减少运维人员的工作压力。与此同时,运维人员通过脚本自动化和Jenkins 程序,建立了持续集成和持续交付项目。通过蓝绿发布的方式发布应用,减少发布过程中,服务停止的时间,从而进一步减少工作时间。二、运维生

5、产环境的发展1、生产环境1)多点负载均衡单体应用。docker 原理及在运维工作的地位和作用docker 原理及在运维工作的地位和作用2、新型生产环境生产环境主要分为:多点负载均衡单体应用,docker 和 devops。Docker 于 2013 年初开源,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 UnionFS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。容器就是一个技术类型,而 docker 是当下最主流的一种实现容器的方案。其他方案包括:LXC,Mesos,RKT 等等。docker 或者容器和传统虚拟化最大的区别,就是虚拟化的封装

6、是系统级的封装,docker 或者其他容器是进程级的封装。3、微服务就是将前端拆成各个模块,然后连接到服务库。微服务需要跑多个容器,容器多又会涉及到通信、架构、伸缩、更新、监控等等问题。docker 原理及在运维工作的地位和作用docker 原理及在运维工作的地位和作用三、云原生技术栈的概念及技术1、云原生技术栈云原生是一个生态概念、是一线互联网公司发展到某个极端的必然选择。主要包含三大要素,即容器及编排管理、DevOps 和微服务。其主要技术模块有应用定义及部署,编排与管理,运行环境,配置等。在云原生时代,云原生、容器、devops 等一定是未来若干年的发展方向。容器不但解决了大型架构的发展

7、瓶颈,而且取代了传统运维。docker 是云原生时代的基石和应用基础。学习 docker 需要一定程度的经验积累,所以现在企业对运维的要求越来越高。docker 原理及在运维工作的地位和作用docker 原理及在运维工作的地位和作用如上图所示,容器的启动速度在秒级,虚拟机的启动速度在分钟级。容器的性能接近原生,而虚拟机的性能较弱。容器需要的内存较小,虚拟机需要的内存较多。总体来看,容器的整体性能要优于虚拟机。容容器器和和虚虚拟拟化化 再次提高服务器资源利用率 重量更轻,体积更小。匹配微服务的需求 保持多环境运行的一致性 快速部署迁移,容错高。安全性较差多容器管理存在难度。稳定性较差排错难度较大

8、容器相比虚拟化的优势在于,可以再次提高服务器的资源利用率,重量更轻,体积更小,能够匹配为服务的需求,保持多环境运行的一致性,快速部署迁移,且容错率高。其劣势在于安全性相对较差,多容器管理有一定的难度,稳定性较差,排错难度较大。docker 原理及在运维工作的地位和作用docker 原理及在运维工作的地位和作用2、我们通过镜像后动容器去使用,更新文件是必然的事情,那镜像岂不是会被多个容器更改,造成冲突?答:像采用了分层设计,启动容器后,镜像永远是只读属性。只不过在最上层加一层读写层(容器层),如果要对底层镜像的文件进行更改,读写层会复制一份镜像中的只读层进行写操作,这就是 Copy-On-Wri

9、te。3、我们想要在一个镜像(Centos7)上创建一个新镜像(Centos7+nginx),新镜像会复制层镜像吗?答:不会,参考问题 1。容器、镜像和仓库容器、镜像和仓库Cgroup 主要用来资源控制,CPUMEM宽带等。提供的一种可以限制、记录、隔离进程组所使用的物理资源机制,实现进程资源控制。rootfs 的作用是文件系统隔离。接下来,访问隔离案例。首先,挂载镜像文件 iso,输入下列代码:rootdocker mount-t iso9660 zechen.iso/mntrootdocker ls/mnt然后,管理服务器,创建命名空间输入:rootdocker unshare-m/bin

10、/bash重新挂载输入:rootdocker mount-t iso9660-0 loop zechen.iso/mnt重新查看输入:rootdocker ls/mnt通过这个案例,让大家感受命名空间的大致内容,理解隔离的作用,且每个容器都是隔离的。容器、镜像和仓库容器、镜像和仓库第一步,关闭防火墙和 selinux。检查 firewood,确定环境的镜像系统是马哥教育提供的。第二步,安装存储库拓展包 yum install-y yum-utils。第三步,设定存储库。第四步,安装 yum-y install docker-ce,docker-ce-cli 和 containerd.io。其中

11、,docker-ce 是docker 的程序包;docker-ce-cli 是 docker 的工具包;containerd.io 是系统和 docker 的 api的守护进程。第五步,验证 docker version。查询 docker 版本信息如果有正确的打印或者正确的输出,说明安装成功。docker 安装与启动的代码如下:yum install-y epel-releaseyum install docker-io#安装 docker/etc/sysconfig/docker#配置文件chkconfig docker on#加入开机启动service docker start#启动 d

12、ocker 服务容器、镜像和仓库容器、镜像和仓库接下来,寻找官方镜像仓库的镜像并下载。需要的代码如下:docker images#查询本地镜像docker searchimages#查找镜像docker pullimages:tag#下载镜像#搜索镜像docker search#在 docker index 中搜索 image#下载镜像docker pull#从 docker registry server 中下拉 image#查看镜像docker images:#列出 imagesdocker images-a#列出所有的 images(包含历史)docker rmi:#删除一个或多个 im

13、age容器、镜像和仓库容器、镜像和仓库#使用镜像创建容器docker run-i-t sauloal/ubuntu14.04docker run-i-t sauloal/ubuntu14.04/bin/bash#创建一个容器,让其中运行 bash 应用,退出后容器关闭docker run-itd-name centos_aways-restart=always centos#创建一个名称 centos_aways 的容器,自动重启#-restart 参数:always 始终重启;on-failure 退出状态非 0 时重启;默认为,no 不重启#查看容器docker ps:列出当前所有正在运行

14、的 containerdocker ps-l:列出最近一次启动的 containerdocker ps-a:列出所有的 container(包含历史,即运行过的 container)docker ps-q:列出最近一次运行的 container ID#再次启动容器docker start/stop/restart#:开启/停止/重启 containerdocker start container_id#:再次运行某个 container(包括历史 container)#进入正在运行的 docker 容器docker exec-it container_id/bin/bashdocker run

15、-i-t-p#:映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。容器、镜像和仓库26#删除容器docker rm#:删除一个或多个 containerdocker rm docker ps-aq#:删除所有的 containerdocker ps-aq|xargs docker rm#:同上,删除所有的 container创建容器基础的命令格式。利用镜像直接创建容器:docker run+参数images:tag 启动命令#查看现有容器docker ps-a(加了该选项可以查出未启动的容器)27容器

16、、镜像和仓库#指定容器名字docker run-namenameimage:tag#利用镜像直接创建容器docker run-d-name nginx_1 nginx:latest#镜像用可交互的方式创建容器docker run-id-name nginx_1 nginx:latestt 以交互模式运行容量 t 为容器重新分配一个为输入终端#创建容器并暴露端口docker run-itd-p 8800:80-name nginx_1 nginx:latest如果有用户想要访问虚拟机或者宿主机的容器,只需要访问 8800 端口。通过内网的形式,找到容器里的 8800 端进行访问。容器、镜像和仓库

17、容器、镜像和仓库#删除镜像:docker rmi 镜像:tag/镜像 ID#容器和宿主机之间文件复制docker cp 文件目录容器 ID:内部路径docker cp 容器 ID:内部路径文件目录docker 的实际运用docker 的实际运用目目录录1 1:d do oc ck ke er r基基础础命命令令(下下)。2 2:d do oc ck ke er rf fi il le e。3 3:d do oc ck ke er r是是否否可可以以被被替替代代?4 4:d do oc ck ke er r的的前前世世今今生生泽泽臣臣一、docker 基础命令(下)这是 docker 基础命令下

18、半部分的学习。从天池基础镜像中获取pythondocker pull 天池镜像:标签;docker 的实际运用docker 的实际运用2)docker 下载该镜像 busybox 的镜像。3)给镜像创建一个软链接并改名 box:v1。docker 的实际运用docker 的实际运用*操作流程*1)启动虚拟机,检查防火墙和 Slinux 是否关闭rootdocker systemctl status firewalldrootdocker getenforce 02)检查 docker 是否启动rootdocker systemctl status docker3)查看 busybox 镜像ro

19、otdocker docker search busybox4)下载 busybox 镜像并检查是否成功rootdocker docker pull busyboxrootdocker docker images5)给镜像创建一个软链接并改名 box:v1 并检查是否成功rootdocker docker imagesrootdocker docker tag busybox:latest box:v1查看 ImageID,如果一样则软连接成功docker 的实际运用docker 的实际运用3)再从该容器内的/root/docker.txt 文件复制到宿主机/tmp。4)删除该容器。docke

20、r 的实际运用docker 的实际运用5)再从该容器内的/root/docker.txt 文件复制到宿主机/tmprootdocker tmp ls/tmprootdocker tmp docker cp96f7e0daf062:/root/docker.txt/tmp6)删除该容器并检查删除前需要停掉rootdocker docker stop 96f7e0daf062rootdocker docker rmi 96f7e0daf062rootdocker docker ps注意:使用 search 搜索 centos:7 是找不到官方版本的rootdocker docker search

21、centos:7rootdocker docker search centos tag 即可搜索官方的三、dockerfile 是否可以被替代?1、概述dockerfile 可以理解为一个制作镜像的脚本,但远没有脚本复杂。他根据某种格式自定义内容,就可以快速创建出需求的镜像。docker 的实际运用docker 的实际运用3)COPY:复制 docker 目录中的文件到镜像中COPY 指令类似 ADD 指令,但是 ADD 指令范围更广些,ADD 能够自动解压文件,能够访问网络资源,而 COPY 指令做不到。非目录需要重新指定,放在目录中非常便利,属于好的一种习惯,值得推荐使用目录。4)ADD:

22、复制 docker 目录中的文件到镜像中。(过程可以解压)ADD 指令是用来将宿主机某个文件或目录放到(复制)容器某个目录下面。官方不推荐 ADD,高级复制功能,需求不精准,推荐使用 COPY。5)EXPOSE:声明开放端口EXPOSE 指令用于暴露容器里的端口,我们在 3.5 里面演示过了,nginx 暴露的端口是 80,但是启动容器的时候需要指定宿主机端口来映射暴露的端口。需要暴露多个端口的话可以使用多个 EXPOSE,也可以一个 EXPOSE 指令后面跟多个端口,端口之间用空格隔开。声明不是变更,变更使用-p 构建容器时候使用。6)ENV:设置环境变量ENV 指令是用于设置环境变量的。底

23、层环境变量需要需提前设置。7)CMD:容器启动时执行的命令,最多只能执行一条CMD 指令是你在容器启动的时候帮你运行的命令,而 RUN 这个指令是构建镜像的时候帮你运行的命令。容器启动时执行命令,最多执行一条。8)WORKDIR:声明工作目录。类似 cdWORKDIR 是指下面的指令都在 WORKDIR 指定目录下面工作,这个与 linux 里面的 cd 差不多。切换目录使用 WORKDIR。做容器轻量级最好,比较小就很好,使用一条命令就不要使用两条命令。docker 的实际运用docker 的实际运用四、docker 的前世今生1、dockerfile 操作测试1)用 dockerfile

24、构建镜像:docker build-t(设置要构建镜像的名字,最后要加.)创建基础镜像docker 提供了两种方法来创建基础镜像docker 的实际运用docker 的实际运用4)测试:宿主机用浏览器访问 IP+port 看是否启动成功。2、dockerfile 案例 11)用 dockerfile 创建并启动一个 centos 的 apache 镜像。指定自定义内容。FROM centos:7RUN yum-y install httpdEXPOSE 80COPY index.html/usr/share/httpd/noindex/index.htmlCMD/usr/sbin/httpd,

25、-D,FOREGROUNDdocker 的实际运用docker 的实际运用看到 successfully 即安装成功。3)验证rootdocker apache docker run-itd-p 345:80 apache:v1rootdocker apache docker ps通过访问宿主机 ip 端口,查看 true,防火墙关闭。3、dockerfile 案例 21)用 dockerfile 创建并启动一个 centos7 的 nginx 镜像。docker 的实际运用docker 的实际运用3)创建容器rootdockernginx#docker run-itd-p 456:804)验

26、证通过访问宿主机的 ip+端口,查看 nginx,防火墙关闭。docker 实际工作案例实现docker 实际工作案例实现一、数据持久化我们什么情况下要做数据持久化呢?一定是在做容器之前先预判好哪些文件是要永久存储的,而不会跟着容器的生命周期而消失。比如说配置文件、日志文件、缓存文件或者应用数据等等。数据初始化有三种类型:第一种volumes,这个是最推荐的,也是最好的一种方式,第二种是 bindmount,第三种是 tmpfs。docker 实际工作案例实现docker 实际工作案例实现容器中的挂载点:key 为 destination、dst 或 target,value 为容器中的路径读

27、写类型:value 为 readonly,没有 keyvolume-opt 选项,可以出现多次。比如 volume-driver=local,volume-opt=type=nfs,第一个域:对于命名卷,为卷名;匿名卷,则忽略,此时会创建匿名卷第二个域:容器中的挂载点第三个域:可选参数,由,隔开,如 ro-v 或volume:由 3 个域组成,:分隔mount:由多个,隔开的键值对组成方式二:bindmount将宿主机中的文件、目录 mount 到容器上。宿主机、container 之间共享宿主机文件系统。这种持久化方法更导致 container 与宿主机的耦合过于紧密,所以不推荐使用。使用:

28、docker run-itd-p 8801:80-v/var/log/cont/apache1:/var/log/httpd/apache:new2挂载到容器:-v 或volume。如果是 Docker17.06 或更高:推荐使用mount。(同 volumes)-v 或volume:由 3 个域组成,:分隔docker 实际工作案例实现docker 实际工作案例实现docker run-itd-name tmptest-tmpfs/root nginx:latest二、harbor 仓库镜像获取有两种方式:第一种方式是从官方的镜像仓库获取,search 命令从官方镜像查找已有的镜像。第二种方

29、式是企业级镜像仓库,公司最常用的是 harbor。docker 实际工作案例实现docker 实际工作案例实现tar-xvf harbor-offline-installer-v2.3.1.tgz#解压cp harbor.yml.tmpl harbor.yml#复制官方配置文件案例。vim harbor.yml#修改配置文件中 hostname 和 https 字段。Vim/etc/docker/daemon.json(信任 harbor 端 IP)“Registry-mirrors”:“https/f9dk003m.mirror.aliyuncs.cm”,“insecure-regidtri

30、es”:“192.168.28.100(重启 docker)bash prepare&bash install.sh#初始化并安装docker 实际工作案例实现docker 实际工作案例实现https 注释,帮助我们实现安全的目的。重启 docker。执行,保存退出,出现 Harbor has been installedand started successfully,安装成功。docker 实际工作案例实现docker 实际工作案例实现1)新建项目后,创建用户,新建成员名称要和创建用户名字一样。2)将本地刚刚做的镜像推送到 harbor 共用项目仓库中。docker tag apache:

31、new1 192.168.28.100/library/apache:new1使用 harborvim/etc/docker/daemon.json(信任 harbor 端 IP)registry-mirrors:https:/,insecure-registries:192.168.28.200docker login 192.168.28.100docker push 192.168.28.100/library/apache:new1三、微服务docker 实际工作案例实现docker 实际工作案例实现微服务:微服务提出以业务边界作为模块划分原则,每个模块独立进程,一个业务由很多独立的小

32、业务组合而成,系统也是由独立的小系统组合而成,这样的好处是每个小系统都很容易理解,一个大系统可以根据业务组合微服务,或者逐渐发展独立的微服务。代价:微服务为了降低单个微服务的复杂性,导致整体系统的复杂性急剧增加。微服务之间的连接更加复杂,网络通讯不可靠和性能损耗,协议匹配,接口对接和转换,版本协作,微服务注册和发现,编排和调度,分布式业务和数据一致性等复杂性都是单体架构不需要考虑的。2、隐匿性困境:软件在没有应用到业务之前,各种信息和思考大多在每个人的脑海里,很难完全呈现和想象出来,客户只是知道自己想要更多新英雄,但并不知道要具体什么样的英雄;开发设计人员知道怎么做英雄,但又不能完全理解用户需

33、求;运维知道部署服务和上线,但又不能完全理解业务逻辑。单体架构中的各个模块隐藏在大系统的页面下,在交付之前对外界是不可见的。导致没有人能看清全貌,各自都把事情做到最好,但组合起来却不是客户想要的东西。微服务:微服务架构并没有改变软件开发过程中的隐匿性,而是通过缩短从需求到交付这段软件开发周期,减少隐匿时间,来降低软件工程总体的隐匿性。代价:组织必须要具备自动部署持续交付能力。假如一个系统上线需要 3 小时进行部署,如果我们要持续部署,每天都部署一次,那就需要每天拿出 3 小时做部署,这个成本是不能接受的。3、耦合性困境:假如系统从零开始做的话,头三个月开发会比较慢,因为需要搭建和熟悉一些开发、

34、测试、部署基础设施,随着基础设施和公共组件的完善,接下的半年到一年开发会加速,但是再往后开发速度又会逐渐降低,因为那些一开始提高开发效率的接口、共享表、依赖组件都变成了复杂网络缠绕在一起,变成了所谓的牵一发而动全身,改一行代码都不知道会影响到什么地方。docker 实际工作案例实现docker 实际工作案例实现实现:我们最后做一个案例,nginx 和 php-fpm 实现 php 网页正常运行。这个案例学通,之后就可以根据该案例知识,做更复杂的架构。该案例也是运维微服务需要基础掌握的核心内容。有几个问题需要解决:1、一个容器只能有一个启动命令(CMD),但这里启动两个服务。2、多个容器之间如何

35、通信?3、php-fpm 只允许本机通信,多个容器通信需自私做?4、nginx 和 php-fpm 需要访问同一个网页文件,怎么解决?php-fpm 镜像创建镜像准备:vim/etc/php-fpm.d/www.conflisten=0.0.0.0:9000 监听 IP 和端口。;listen.allowed_clients=127.0.0.1 允许连接的 FastCGI 客户的 ipv4 地址列表。mkdir/root/php-fpmcp/etc/php-fpm.d/www.conf/root/php-fpm/写 php-fpm 的 dockerfilevim/root/php-fpm/do

36、ckerfileFROM centos:7RUN yum y install php-fpmEXPOSE 9000COPY www.conf/etc/php-fpm.d/www.confCMD“/usr/sbin/php-fpm”,”nodaemonize”docker 实际工作案例实现docker 实际工作案例实现3)nginx 创建镜像准备vim/etc/nginx/conf.d/default.conf改成 php 配置mkdir/root/nginxcp/etc/nginx/conf.d/default.conf/root/nginxmkdir/root/nginxwebvim/root/nginxweb/index.php?php echo true;?docker 实际工作案例实现docker 实际工作案例实现5)构建镜像cd/root/nginxdocker build-t nginx:v1.cd/root/php-fpmdocker build-t php-fpm:v1.docker 实际工作案例实现docker 实际工作案例实现验证,直接网页打开即可。

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 研究报告 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服