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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 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:主要特点功能包括:基于角色的访问控制,基于镜像的复制策略,图形化用户界面,审计管理等。
  • 微服务是一种架构的模式,是单体的应用。单体应用拆分成各个模块,充分的去解耦,独立构建部署,互相之间可以协调配合。 微服务的特点,颗粒度小,且专注一件事情。单独的进程。轻量级的通信机制。松耦合,独立部署。微服务具备四个特性,复杂性,隐匿性,异变性,配合性。
相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
运维 监控 安全
构建高效自动化运维体系:Ansible与Docker的协同实战
【5月更文挑战第25天】 在当今快速迭代的软件发布环境中,自动化运维成为确保部署效率和可靠性的关键。本文通过深入分析Ansible和Docker技术,探索它们如何协同工作以构建一个高效的自动化运维体系。文章不仅介绍了Ansible的配置管理功能和Docker容器化的优势,还详细阐述了将两者结合的实践策略,旨在帮助读者理解并实现更智能、更灵活的基础设施管理。
|
1天前
|
jenkins 持续交付 开发者
利用Docker容器化部署应用的实战指南
【6月更文挑战第27天】本文详述Docker应用部署,涵盖Docker基本概念、安装、镜像制作及运行。通过编写Dockerfile构建镜像,使用`docker build`、`run`、`push`及`stop`命令管理。集成CI/CD工具如Jenkins,实现自动化构建、测试和部署,提升开发效率与部署质量。Docker助力轻量级、可移植的微服务架构。
|
3天前
|
NoSQL Redis Docker
Docker再学习 - 实战
Docker再学习 - 实战
5 0
|
1月前
|
前端开发 API 数据库
【Docker专栏】Docker Compose实战:编排多容器应用
【5月更文挑战第7天】Docker Compose是Docker的多容器管理工具,通过YAML文件简化多容器应用部署。它能一键启动、停止服务,保证开发、测试和生产环境的一致性。安装后,创建`docker-compose.yml`文件定义服务,如示例中的web和db服务。使用`docker-compose up -d`启动服务,通过`docker-compose ps`、`stop`、`down`和`logs`命令管理服务。
【Docker专栏】Docker Compose实战:编排多容器应用
|
1月前
|
Cloud Native 测试技术 数据库
【云原生之Docker实战】使用Docker部署flatnotes笔记工具
【5月更文挑战第17天】使用Docker部署flatnotes笔记工具
92 8
|
1月前
|
安全 Linux Docker
Ubantu docker学习笔记(六)容器数据卷
Ubantu docker学习笔记(六)容器数据卷
Ubantu docker学习笔记(六)容器数据卷
|
1月前
|
监控 安全 Cloud Native
【云原生之Docker实战】使用Docker部署Ward服务器监控工具
【5月更文挑战第11天】使用Docker部署Ward服务器监控工具
70 4
|
1月前
|
Cloud Native 安全 Linux
【云原生之Docker实战】使用Docker部署mBlog微博系统
【5月更文挑战第10天】使用Docker部署mBlog微博系统
36 2
|
1月前
|
存储 缓存 监控
【Docker 专栏】Docker 容器性能调优实战
【5月更文挑战第8天】本文探讨了Docker容器的性能调优技巧,包括理解容器性能指标(如CPU、内存、网络和磁盘I/O)并进行相应调优。重点讲述了CPU和内存的限制设置,网络配置优化以及磁盘I/O性能提升方法。通过实例展示了如何解决高CPU使用率问题,强调了根据应用需求进行调优的重要性,以实现更高效、稳定的容器运行。
【Docker 专栏】Docker 容器性能调优实战
|
1月前
|
Kubernetes 调度 Docker
Ubantu docker学习笔记(十一)k8s基本操作
Ubantu docker学习笔记(十一)k8s基本操作