读《4天实战 轻松玩转docker》学习笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

读完文章后的一些感受如下:

1、有些地方的语句不太通顺,可能没有校对;

2、里面有一些知识点有重复出现;

3、了解了docker、微服务、K8S的原理及在未来运维中起到的重要作用;

4、容器、镜像、仓库-Docker三大核心的概念;

5、学习了Docker的命令行及实际工作中的案例,有了大概的印象。

6、命令比较多,知识比较广泛,所以还是需要课下多动手实践才能更好掌握。原理很重要,操作也不能少。 下面是整个学习过程中摘录的知识点,还需要反复学习理解:

  • LNMP 是一套技术的组合,L=Linux、N=Nginx、M=MySQL、P=PHP,其中Nginx 服务是不能处理动态请求。
  • 多点集群就是很多服务器在服务,服务的是一个单体应用,架构里面,服务的单体应用就是服务的某一个应用,这四个服务器里面,原站里面都是一套代码。
  • 物理隔离、虚拟化、云计算的发展,概念,优缺点。物理隔离包含隔离网闸技术 、物理隔离卡等。物理隔离产品是用来解决网络安全问题的。云计算可以解决的问题:版本更新频率大增、熬夜加班、生产环境不稳定、扯皮对立、压力更大恶性循环。
  • DevOps 是一个必然趋势,是一种方法,也是一种观念。
  • 新环境产生问题:资源利用率、扩容不及时、环境不一致导致的问题。
  • docker与容器区别:docker 就是容器,容器就是 docker,并不是这样的,容器就是一个技术类型。而 docker 是当下最主流的,容器的一种实现容器的方案,docker 只是容器其中一种实现方案,其他方案包括:LXC,Mesos,RKT 等等,最大区别当容器和服务器的数量达到一定规模的时候,就会碰到管理的问题,即如何有效管理大量的服务器和容器,保证应用的稳定运行、方便升级和故障的快速解决。
  • docker或者容器和传统虚拟化最大的一点区别,就是虚拟化的封装是系统级的封装,docker或者其他容器是进程级的封装。和传统虚拟化最大的一点区别,就是虚拟化是系统级的封装,进程级封装。
  • Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视。
  • 云原生是一个生态概念、是一线互联网公司发展到某个极端的必然选择。包含三大要素:容器及编排管理、DevOps、微服务。
  • 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。
  • 容器与虚拟机的比较 启动速度 容器-〉秒级 虚拟机-〉分钟级 性能 容器-〉接近原生 虚拟机-〉较弱 内存代价 容器-〉很少 虚拟机-〉较多 硬盘使用 容器-〉一般为 MB 虚拟机-〉一般为 GB 运行密度 容器-〉单机支持千个容器 虚拟机-〉一般几十个 隔离性 容器-〉安全隔离 虚拟机-〉完全隔离 迁移性 容器-〉优秀 虚拟机-〉一般 容器:再次提高服务器资源利用率 虚拟机:安全性较差 容器:重量更轻,体积更小 虚拟机:多容器管理存在难度 容器:匹配微服务的需求 虚拟机:稳定性较差 容器:保持多环境运行的一致性 容器:快速部署迁移,容错高 虚拟机:排错难度较大
  • Docker 主要就是借助 Linux 内核技术 Namespace 来做到隔离的,Linux Namespaces 机制提供一种资源隔离方案。PID,IPC,Network 等系统资源不再是全局性的,而是属于某个特定的Namespace。每个 namespace 下的资源对于其他 namespace 下的资源都是透明,不可见的。
  • Control groups:提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 cpu、memory、磁盘 IO 等等)的机制,被 LXC、docker 等很多项目用于实现进程资源控制。
  • 云原生的技术栈实际上三个方面,devops,微服务,还有一块是容器 K8s,从系统层次来看,从上到下分别是: 应用层:应用定义及部署(App Definition and Development)、配置(Provisioning)、可 观测性和分析(Observability and Analysis)、无服务(Serverless) 集群:编排与管理(Orchestration & Management) 底层运行环境:运行环境(Runtime)
  • 建议数据库不要装 docker,放到你的虚拟机里边,数据库本身这个软件也不太可能和其他的软件共同装在一个,毕竟容器里你进去以后你要排错,为了避免这种麻烦,建议数据库这一块就尽量不要放在容器里边
  • 镜像里面只包含两种东西,它的依赖环境和它实际要做的一个应用,镜像是把它两个融合在一起的,就是应用和它底层的一些依赖环境变量,或者一些参数也好等等。它把它们融合到一起了。
  • docker 常见的有 3 种安装方式,yum、rpm 包、脚本。
    Docker的基本命令
  • 使用镜像创建容器 docker run -i -t sauloal/ubuntu14.04 docker 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 :列出当前所有正在运行的 container docker ps -l :列出最近一次启动的 container docker ps -a :列出所有的 container(包含历史,即运行过的 container) docker ps -q :列出最近一次运行的 container ID
  • 再次启动容器 docker start/stop/restart #:开启/停止/重启 container docker start [container_id] #:再次运行某个 container (包括历史 container)
  • 进入正在运行的 docker 容器 docker exec -it [container_id] /bin/bash docker run -i -t -p <host_port:contain_port> #:映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。
  • 删除容器 docker rm <container...> #:删除一个或多个 container docker rm docker ps -aq #:删除所有的 container docker ps -aq | xargs docker rm #:同上, 删除所有的 containe
  • 查看镜像或容器的详细信息: docker inspect [容器ID/镜像名:tag]
  • 给镜像添加一个软链接并改名和标签: docker tag [oldname:tag] [newname:tag]
  • 删除镜像: docker rmi 镜像:tag/镜像ID
  • 容器和宿主机之间文件复制 ldocker cp [文件目录 容器ID:内部路径] ldocker cp [容器ID:内部路径 文件目录]
  • Dockerfile 步骤 1、创建 dockerfile 目录,名字可以自定义。在大目录里面创建各种小目录和文档,比较有层次。 2、在该目录中编辑 dockerfile。 3、用 COPY 或 ADD,需要把被 COPY 文件提前放到 dockerfile 目录中。 4、官方推荐用 COPY,如果需要过程中解压,用 ADD。 5、CMD 字段,需要用[“命令”,”选项 1”]这种格式书写。强制格式写法,必须使用[“命令”,”选项 1”],类似于 python 的数组。 6、CMD 字段只能写一条命令,且这条命令尽量是前台执行的命令。如果是后台命令,这条命令结束,docker 就会自动关闭。
  • 用dockerfile 构建镜像: docker build -t(设置要构建镜像的名字,最后要加.) 创建基础镜像 Docker 提供了两种方法来创建基础镜像 一种是通过引入 tar 包的形式, 另外一种是通过一个空白的镜像来一步一步构建 scratch 是 Docker 保留镜像,镜像仓库中的任何镜像都不能使用这个名字,使用 FROM scratch 表明我们要构建镜像中的第一个文件层。
  • 数据初始化有三种类型。第一种volumes,这个是最推荐的,也是最好的一种方式。第二种是 bind—mount,第三种是 tmpfs。
  • volumes是官方比较推荐也是大型的集群比较常见的一种方式。可以理解为在自己的宿主机或者云端或者在某一个区域创建一块磁盘专门去存放容器里的数据或文件。把这个容器里边的数据或者文件还有目录等都规划好,再去启动容器。正常在老一些的版本里边首先必须要去创建 volumes,否则是没有办法创建成功的。新版本好像不写命令也可以创建成功。
  • bind—mount将宿主机中的文件、目录 mount 到容器上。质上是宿主机、container 之间共享宿主机文件系统。这种持久化方法更导致 container 与宿主机的耦合过于紧密,所以不推荐使用。
  • tmpfs将数据存于宿主机内存中。docker 可将用户名与密码等敏感数据保存在某个数据库中,当启动需要访问这些敏感数据的 container 或者 service 时,docker 会在宿主机上创建一个 tmpfs,然后将敏感数据从数据库读出写到 tmpfs 中,再将 tmpfs mount 到 container 中,安样能保证数据安全。当容器停止运行时,则相应的 tmpfs 也从系统中删除。
  • 镜像获取有两种方式: 第一种方式是从官方的镜像仓库获取,search 命令从官方镜像查找已有的镜像, 第二种方式是企业级镜像仓库,公司最常用的一种 harbor。 harbor 的作用 1:企业级镜像仓库,根据企业需求创建的镜像,可以通过 harbor 实现管理和使用。作用 2:主要特点功能包括:基于角色的访问控制,基于镜像的复制策略,图形化用户界面,审计管理等。
  • 微服务是一种架构的模式,是单体的应用。单体应用拆分成各个模块,充分的去解耦,独立构建部署,互相之间可以协调配合。 微服务的特点,颗粒度小,且专注一件事情。单独的进程。轻量级的通信机制。松耦合,独立部署。微服务具备四个特性,复杂性,隐匿性,异变性,配合性。
相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
25天前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
4月前
|
运维 监控 数据可视化
容器化部署革命:Docker实战指南
容器化部署革命:Docker实战指南
|
3月前
|
供应链 测试技术 开发者
用 Docker 轻松部署 ERPNext 15:多场景实战指南
ERPNext 15 是一款功能全面的开源企业资源规划系统,结合 Docker 容器化部署,具备高效、灵活、低成本等优势。适用于小微企业数字化起步、多分支机构协同办公、开发者测试环境搭建、短期项目管理及企业内部培训等多种场景。模块化设计支持按需扩展,满足不同规模企业需求,是实现高效企业管理的理想选择。
用 Docker 轻松部署 ERPNext 15:多场景实战指南
|
4月前
|
安全 Java Docker
Docker 部署 Java 应用实战指南与长尾优化方案
本文详细介绍了Docker容器化部署Java应用的最佳实践。首先阐述了采用多阶段构建和精简JRE的镜像优化技术,可将镜像体积减少60%。其次讲解了资源配置、健康检查、启动优化等容器化关键配置,并演示了Spring Boot微服务的多模块构建与Docker Compose编排方案。最后深入探讨了Kubernetes生产部署、监控日志集成、灰度发布策略以及性能调优和安全加固措施,为Java应用的容器化部署提供了完整的解决方案指南。文章还包含大量可落地的代码示例,涵盖从基础到高级的生产环境实践。
225 3
|
5月前
|
关系型数据库 MySQL 数据库
Docker Compose-实战
Docker Compose-实战
173 5
|
6月前
|
Ubuntu Linux Docker
Docker容器的实战讲解
这只是Docker的冰山一角,但是我希望这个简单的例子能帮助你理解Docker的基本概念和使用方法。Docker是一个强大的工具,它可以帮助你更有效地开发、部署和运行应用。
195 27
|
11月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
12686 38
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
10月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
253 3
实战~如何组织一个多容器项目docker-compose
|
11月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
778 4
国产数据实战之docker部署MyWebSQL数据库管理工具