读完文章后的一些感受如下:
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:主要特点功能包括:基于角色的访问控制,基于镜像的复制策略,图形化用户界面,审计管理等。
- 微服务是一种架构的模式,是单体的应用。单体应用拆分成各个模块,充分的去解耦,独立构建部署,互相之间可以协调配合。 微服务的特点,颗粒度小,且专注一件事情。单独的进程。轻量级的通信机制。松耦合,独立部署。微服务具备四个特性,复杂性,隐匿性,异变性,配合性。