为什么要使用容器

  • 扩容/缩容不及时

    • 对于可提前预知的业务高峰,传统的扩容手段很繁琐。
    • 对于不可预知的突发流量,传统手段无法及时动态扩容。
  • 服务器环境臃肿

    • 某些服务器上可能跑多个应用,对维护、迁移带来困难。
  • 新项目上线资源分配痛点

    • 现在很多项目都是基于分布式架构的,一上来就需要几十台服务器。
    • 开发人员开发项目,打包项目环境代码成镜像部署到容器平台。
    • 好处: 1、运维人员节省人工成本 2、持续发布有问题更快解决。
  • 资源利用率低

    • 容器也是一种虚拟化技术,可以提高服务器的资源使用率。
  • 环境不一致性

    • 测试环境和生产环境都是使用窗口技术,更好的避免了传统架构测试环境和生产环境不致产生的问题。

容器 vs 虚拟机

vm_vs_container

容器:
1、容器提供一个基本的独立环境,实现容器隔离、资源限制。
2、主要解决应用层面问题,应用快速部署、高效管理。

虚拟机:
1、提升服务器资源利用率。
2、提供一个完全隔离的环境。

docker 概述

  • 使用最广泛的开源容器引擎
  • 一种操作系统级的虚拟化技术
  • 依赖于Linux内核特性: Namespace(资源隔离)和Cgroups(资源限制)
  • 提供简单的应用程序打包工具
  • 多环境保持一致性
  • 开发人员和运维人员职责逻辑分离

对于传统部署,如果分工比较明确,通常做法是:

  • 由开发人员开发代码,经测试人员测试,最后由开发人员将最终的代码上传至代码仓库。
  • 运维人员直接通过代码仓库进行在线打包或者从代码库下载下来后进行打包,再进行生产发布。
  • 如果有代码上的问题,原则上是由开发人员进行修改,然后由运维人员进行发布。

引入容器后:

  • 由开发人员开发代码,经测试后,由开发人员打包成镜像,部署到容器平台。
  • 业务运维人员不再负责版本发布等工作,主要专注于处理系统业务上的问题。
  • 平台运维人员则关注于怎么高效去管理这些容器。如此可以节省运维成本,问题也能得到更快解决。

Docker应用场景

  • 应用程序打包和发布
  • 应用程序隔离
  • 持续集成
  • 部署微服务
  • 快速搭建测试环境
  • 提供PaaS产品(平台即服务)

docker的组成

docker组成
客户端即在linux命令行执行的docker命令。
容器需要镜像才能拉起来。

docker 安装

官方网址:https://docs.docker.com/engine/install/
官网上提供了多个Linux发行版本的安装方法以及二进制包的安装方法。

安装前先关闭 SELinux 和防火墙。
此外,旧版本包名曾为 docker 或者 docker-engine,这些都太老了,先卸载它们。

这儿以 CentOS 上安装 docker 为例。
官方源:https://download.docker.com/linux/centos/docker-ce.repo
阿里源: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker:

# yum install docker-ce [docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin]
# systemctl enable docker
# systemctl start docker

检查 docker deamon 是否运行:

# ps aux | grep docker
root       1259  0.2  5.2 1038584 52448 ?       Ssl  00:54   0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

查看 docker 版本:

[root@demo1 ~]# docker info
Client: Docker Engine - Community
 Version:    24.0.2
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.10.5
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.18.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 24.0.2
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8
 runc version: v1.1.7-0-g860f061
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
 Kernel Version: 3.10.0-1062.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 972.4MiB
 Name: demo1
 ID: e7c53d86-7253-4660-b1cc-dbf486e6ccf8
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false
-- By 许望(RHCA、OCM、VCP)
最后修改:2023 年 11 月 06 日 05 : 38 PM
如果觉得我的文章对你有用,请随意赞赏