容器化技术最佳实践1–容器化技术简介与Docker入门

文章目录

  • 容器化技术最佳实践1--容器化技术简介与Docker入门
  • 容器化简介
    • 通过虚拟化了解容器化
    • 对开发和运维的好处
    • 容器化部署特点
    • 什么情况下可以采用容器化技术
    • 什么情况下不适用容器化技术
  • 云原生
    • 何谓云原生?
    • 云原生里的微服务
    • 云原生里的容器化
  • Docker简介
    • 安装Docker
      • Windows
      • Linux
      • MacOS
    • Windows上启动Docker服务
    • Linux上启动Docker服务
      • 有root权限
      • 非root权限
        • 使用前检查
        • 安装本用户docker环境
        • 编辑环境变量
        • 设置开机自动登录某个普通用户
        • 设置用户的Docker服务器为开机自启动
        • 启动docker并检查服务状态
        • 不配置环境变量的使用方式
    • 镜像操作
      • 搜索镜像
      • 下载镜像
      • 查看本地镜像
      • 删除本地镜像
    • 容器操作
      • 根据镜像启动容器
      • 启动、停止、重启容器
      • 修改容器
      • 查看容器详情
      • 进入容器查看文件
      • 删除容器

容器化简介

通过虚拟化了解容器化

参考链接:https://kubernetes.io/zh-cn/docs/concepts/overview/

容器化技术与虚拟化技术比较:

虚拟化技术 容器化技术
软件 KVM,VMware,Vitrual-box,Hyper-V Docker,LXC,podman
平台 Openstack k8s,Docker swarm
镜像 虚拟磁盘 镜像(image)
镜像构建方式 通过系统ISO安装,或在其它镜像基础上修改 通过配置文件构建镜像
实例 虚拟机 容器(container)
实例启动方式 通过镜像及启动参数(如CPU、内存配额等)启动 通过镜像启动,可通过参数映射外部文件目录、映射服务端口等

容器和虚拟机非常相似,但消耗资源少、运行速度快,通常被认为是轻量级的虚拟机

对开发和运维的好处

对于开发者来说:
容器简化了开发和交付过程,可以通过容器搭建开发和测试环境,便于跨平台开发。
每个容器都具有虚拟的操作系统环境、可以在容器中挂载外部文件夹(卷)、安装各种软件包、编译程序、启动服务等。
应用程序可构建成镜像文件交付,一次构建,随处运行。
容器还支持交叉编译,可以很轻松地将应用部署在使用ARM处理器的服务器上。
每个开发人员可轻松构建自己应用程序的依赖环境,比如每个应用程序都有一个Nginx等,避免多人共用时配置复杂易出错。

对于运维人员来说:
简化了部署过程,可通过docker compose或k8s pod配置文件,同时部署一组服务(自动完成下载镜像–可以是内部镜像服务器上的、配置参数、运行容器、负载均衡等),
且不需要额外编写服务启停脚本,容器软件可以管理服务启停。

容器化部署特点

容器部署方式与其它方式比较:

容器 虚拟化 传统
额外磁盘空间 MB级 GB级
额外CPU消耗
额外内存消耗
应用运行效率 接近100% 约90% 100%
系统支持实例数量 约1000 约10
实例启动时间 毫秒级 分钟级
资源配额设置 复杂。通过cgroup v2 容易。通过Hypervisor 复杂。通过cgroup v2
应用服务管理 可由容器引擎管理启动。不需编写启停脚本或配置文件 通过systemd service 通过systemd service
应用部署速度 快。通过导入镜像或容器部署 慢。通过登录虚拟机部署或导入镜像部署 一般
应用迁移速度 一般
安全隔离 较好 较好

容器化部署是大势所趋

部署方式演进:传统部署时代 ==> 虚拟化部署时代 ==> 容器化部署时代

什么情况下可以采用容器化技术

  • 开发和测试环节
  • 原先没有采用虚拟化部署的服务(在裸机上部署的)
  • 原先在虚拟机中部署的服务,现在可以在虚拟机中运行容器部署
  • 裸机使用Linux内核版本4.18及以上的、考虑将虚拟机替换成容器的
  • 云原生应用

什么情况下不适用容器化技术

  • 裸机操作系统版本太旧、且无法重装系统的,不能将虚拟机替换成容器
  • 多租户环境,使用虚拟机对租户环境进行隔离的,不能将虚拟机替换成容器

云原生

何谓云原生?

参考链接:https://zhuanlan.zhihu.com/p/150190166
云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。
云原生(CloudNative)是一个组合词,Cloud+Native。
Cloud表示应用程序位于云中,而不是传统的数据中心;
Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。

云原生可概括为4个要点:微服务(设计)、DevOps+CICD(开发、测试、交付)、容器(基础设置)

云原生里的微服务

参考链接:https://aws.amazon.com/cn/microservices/
微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的 API 进行通信的小型独立服务组成。这些服务由各个小型独立团队负责。
微服务架构使应用程序更易于扩展和更快地开发,从而加速创新并缩短新功能的上市时间。

云原生里的容器化

容器化技术比云原生的概念出现得早。云原生计算基金会(CNCF)看到容器化技术的优势,将其列为应用分发和交付的标准。k8s是CNCF的项目。

Docker简介

Docker相当于容器界的Vmware。

安装Docker

Windows

访问:https://www.docker.com/products/docker-desktop/
下载并安装Docker Desktop

Linux

参考链接:https://docs.docker.com/engine/install/

以CentOS8为例:

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin# 如果服务器上安装了podman和runc,可能会提示包冲突,可先卸载podman和runc,或直接运行如下命令替换
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin --allowerasing

MacOS

目前MacOS不能原生支持Dockers,是通过虚拟机的docker来提供服务的,占用内存较高(通常3GB以上)。
安装过程略。

Windows上启动Docker服务

运行Docker Desktop

Linux上启动Docker服务

有root权限

sudo systemctl --user start docker
sudo systemctl --user enable docker

非root权限

docker在v20.10之后对安全性进行了加强,可以在生产环境中以非root权限运行docker
参考链接:https://docs.docker.com/engine/security/rootless/

使用前检查

运行docker version查看版本号,需docker-ce版本为v20.10及以上

运行systemctl --user,看看能否看到服务列表。如下显示如下错误,可能是因为使用su - username切换到该用户的:

$ systemctl --user
Failed to connect to bus: No such file or directory

安装本用户docker环境

运行dockerd-rootless-setuptool.sh install
注意看命令的输出,看看有没有异常。并按提示配置相应的环境变量。
如果有以下异常信息,可能是因为使用su - username切换到该用户导致的:

$ dockerd-rootless-setuptool.sh install
[INFO] systemd not detected, dockerd-rootless.sh needs to be started manually:

编辑环境变量

编辑 ~/.bashrc 添加如下两行

export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/用户ID/docker.sock
source ~/.bashrc

设置开机自动登录某个普通用户

# 设置启动时登录这个普通用户(缠绕),这样才能触发启动docker,否则服务器重启后rootless的docker服务仍然无法启动。
sudo loginctl enable-linger $(whoami)

设置用户的Docker服务器为开机自启动

systemctl --user enable docker

启动docker并检查服务状态

systemctl --user start docker
systemctl --user status docker

不配置环境变量的使用方式

如果未设置环境变量,可以使用如下命令进入rootless模式

docker context use rootless

镜像操作

搜索镜像

通过命令行搜索:

docker search mysql

通过浏览器访问docker官方镜像仓库:https://hub.docker.com

下载镜像

docker pull nginx

查看本地镜像

docker images

删除本地镜像

docker rmi 镜像名称:tag,或ID
# 如果有容器使用了这个镜像,是无法删除的,需先删除容器再删镜像

容器操作

根据镜像启动容器

docker run -d --name 容器名 -p 本机端口:容器内端口 --restart always 镜像名称

启动、停止、重启容器

docker start 容器名称或ID
docker stop 容器名称或ID
docker restart 容器名称或ID

修改容器

  • 最佳实践:要修改端口映射或卷挂载,最好删掉容器、重开

  • 使用docker container update修改容器开机自启动选项

# 注意:可以修改的选项较少,可通过docker container update --help查看
docker container update --restart always 容器名称或ID
docker container update --restart no 容器名称或ID
  • 修改容器配置文件(不推荐)

  • 使用docker container commit将容器保存为新镜像,再使用新的参数运行

  • 最佳实践:要修改端口映射或卷挂载,最好删掉容器、重开

查看容器详情

docker container inspect 容器名称或ID

进入容器查看文件

docker exec -it 容器名称或ID /bin/bash

删除容器

docker stop 容器名称或ID
docker rm 容器名称或ID

容器化技术最佳实践1--容器化技术简介与Docker入门相关推荐

  1. 阿里云专有云容器服务弹性伸缩最佳实践

    简介:阿里云专有云容器服务弹性伸缩最佳实践 1.容器服务弹性伸缩简介 本小节将基于使用原理对容器服务弹性伸缩进行简要的描述. 本实践基于K8s的业务集群运行在专有云上,对测试业务进行压力测试,主要基于 ...

  2. 博云容器云、DevOps 平台斩获可信云“技术最佳实践奖”

    7 月 21 日,2022 可信云大会在北京顺利开幕,会上中国信通院颁布了可信云最佳实践评选结果.博云容器云和博云牧繁 DevOps 平台成功入选可信云技术最佳实践云原生-容器及管理.可信云最佳实践软 ...

  3. 从云原生到智能化,深度解读行业首个「视频直播技术最佳实践图谱」

    在2022阿里云直播峰会上,多位直播产业领域技术专家与行业先行者,共同探讨超视频化时代视频直播技术的演进趋势与未来发展.会上,阿里云重磅发布了行业首个「视频直播技术最佳实践图谱」,将直播技术归纳总结为 ...

  4. 数据安全--8--数据安全中的部分技术最佳实践

    一.5A架构中的最佳实践 针对于5A架构中的技术最佳实践,总结如下: 身份认证: ● 人员身份认证(含员工.合作伙伴.用户等)使用SSO单点登录系统,并在敏感业务上启用超时退出机制: ● 非人员身份认 ...

  5. 阿里云发布行业首个「视频直播技术最佳实践图」!

    2022阿里云直播峰会于7月8日落下帷幕,多位直播产业领域技术专家与行业先行者,共同探讨超视频化时代直播技术的演进趋势与未来发展. 此次大会,重磅发布了行业首个「视频直播技术最佳实践图」,将直播技术归 ...

  6. linux磁盘分配最佳实践,构建容器应用的8个最佳实践

    导读 容器是未来在共有云和私有云进行应用开发的主要趋势,但是容器到底是什么,为什么它们成为了一种广受欢迎的部署机制,而且你需要怎样来修改你的应用来为容器化的环境优化它? 容器是未来在共有云和私有云进行 ...

  7. Docker容器镜像安全最佳实践指南

    文章目录: 0x02 Docker 容器安全最佳实践 1.主机安全配置 1.1 更新docker到最新版本 1.2 为容器创建一个单独的分区 1.3 只有受信任的用户才能控制docker守护进程 1. ...

  8. 生产中的12种容器镜像扫描最佳实践

    现在很多团队面临着这么一个挑战:如何在不减慢应用交付速度的情况下,管理好安全风险.有种方法可以解决该问题,就是采用安全的 DevOps 工作流程. 安全的DevOps(也称为DevSecOps)会在从 ...

  9. k8s容器灰度发布最佳实践(基于spinnaker)

    k8s中的容器一般是通过deployment管理的,那么一次滚动升级理论上会更新所有pod,这由deployment资源特性保证的,但在实际的工作场景下,需要灰度发布进行服务验证,即只发布部分节点,这 ...

最新文章

  1. ViewPager单页显示3个item
  2. Kali Linux Web***测试之 WebSploit
  3. [转]程序集之GAC---Global Assembly Cache
  4. SaltStack之salt-key管理
  5. iOS - 沙盒文件操作指南
  6. Android sqlite load_extension漏洞解析
  7. apache的mpm工作模式
  8. 基于php技术的毕业设计管理系统的研究与实现,基于PHP的图书管理系统设计与实现毕业论文.DOC...
  9. MD5摘要算法的几种解密方法,分享md5免费解密网站
  10. “一瞬”一词出自梵典《僧祇律》 相当于0.36秒
  11. php 代码加密运行,php加密后可以直接运行吗
  12. 剑指Offer_入门_JZZ_斐波那契数列
  13. git rebase出错:Cannot rebase:You have unstaged changes
  14. Stripe国际支付平台接入
  15. c语言rsi2010中制运行,汇编语言初探(控制类指令)-来自第三章3.6的笔记-P135-P163
  16. html 设置图片显示比例,css怎么实现图片在页面上以相同等比例显示缩放?(示例)...
  17. STM32+MS5611气压计测量海拔,IIC方式
  18. SU插件|Fredo6基础运行库免费下载( (LibFredo6) )
  19. 一道及易掉坑常见的关于值传递的面试题
  20. html div跟随页面滚动条滚动,javascript – 当我向下滚动页面时,如何让div跟随我?...

热门文章

  1. 伟大的程序员同志们累了看看我这笑话,巨搞笑!
  2. grpc---客户端流式
  3. 不同等级的UI设计师工作内容有什么区别?
  4. Linux内核源码分析-scsi子系统-让磁盘转起来-sd_spinup_disk
  5. 云剪智能混剪软件/批量剪辑工具技术源码框架---- 一键生成上亿条原创视频
  6. 云计算学习笔记——第四章 存储虚拟化
  7. 1年2轮融资团队2倍扩张,180人的产研团队如何有序协同?
  8. 大数据周会-本周学习内容总结05
  9. 时间格式在ios不兼容的问题
  10. 推荐8个堪称神器的网站!