首页 > 其他分享 >lxd容器

lxd容器

时间:2024-03-14 09:01:48浏览次数:14  
标签:容器 -- lxd lxc Linux first

持续部署

背景

旨在实体机资源不足的条件下,使用虚拟容器进行持续部署工作。

资源充足的条件下,可快速拉起多个部署环境进行验证,例如如下情况:

  • 满足多人的机器使用需求:每个组件或每个人都可拥有自己的测试环境进,可规避其他人的修改对自身的影响
  • 基于 feature 的测试验证需求:针对每一个 feature ,可以进行环境部署进行验证
  • 基于多分支的测试验证需求:同时有多版本和多分支的情况下,可进行不同环境的部署

同时,自动化简化了部署需要的中间过程,更加高效。

目标

系统部署条件需求:

  • ubuntu18.04 系统
  • 服务通过 systemd 进行管理

基于以上条件,需要选择合适的容器进行部署。

技术

此处选择 lxd 的容器进行部署

1 简介

1.1 lxd

lxd 全称是 Linux容器守护程序(Linux Container Daemon),其实就是一个提供了 REST API 的 lxc 容器管理器,可以通过 API 进行容器的管理和控制。

lxd 构建在 lxc(Linux Containers)之上。lxc提供了容器技术的基础,而 lxd则是对 lxc进行了更高级别的管理和控制,提供了更多的功能和工具。

1.2 lxc

lxc 是 Linux Container 的缩写,也就是 Linux 容器,用于通过单个 Linux 内核在受控主机上虚拟运行多个 Linux 系统。

LXC起源于cgroup和namespaces,使得进程之间相互隔离。

1、lxc 使用内核的 Cgroups 功能,来提供进程和网络空间的隔离,来替代通过创建一个完整的虚拟机来为应用程序提供隔离环境。

2、lxc 就是一种轻量级虚拟化,将 Linux 进程沙盒化,使用的是 Linux 中的 namespace 技术进行资源隔离:

  • pid namespace 隔离了进程,
  • mount namespace 隔离了文件系统,
  • network namespace 隔离了网络

2 使用场景

lxd 的使用场景介于虚拟机和 docker 容器之间。如果需要一个完整的系统,要在这个系统里面执行较复杂的操
作,比如mount、systemctl、snap之类的,这个时候docker容器可能就无法满足,但是虚拟机又
大笨重,一台机器开几个实例,宿主机就吃不消了。也就是说在需要大量轻量虚拟机的场景下,lxd 比较合适。

为什么选择 lxd 容器而不是 docker 容器?

docker 容器是一个应用程序级容器,它将应用和其依赖环境全部打包到一个单一对象中,在不包含完整的操作系统的情况下就能运行普通应用。并且,docker 容器通常不直接运行 systemd,因为 systemd 是 Linux 系统的 init 管理器,用于启动和管理系统服务,而 docker 容器通常只运行单个应用程序。如果使用docker来进行部署,systemd管理需要单独处理。

lxd/lxc 是一个系统级别的容器,和 docker 容器最大的不同是提供了完整的操作系统虚拟化。

总结:docker 容器是面向应用程序的,而 lxd/lxc 是面向系统的,它提供了一个完整的系统。

3 基本使用

3.1 安装和初始化lxd

lxd 的实例包括容器和虚拟机,此处只介绍容器。

在 ubuntu 上通过 snap 进行安装:

①安装 snap

查看版本,看是否已安装

>snap version
snap    2.61.1
snapd   2.61.1
series  16
ubuntu  18.04
kernel  5.4.0-150-generic

若未安装

sudo apt update
sudo apt install snapd

②安装lxd

sudo snap install lxd

若错误说明已安装,更新以确保最新版本

sudo snap refresh lxd

③初始化lxd,此处使用最小化

lxd init --minimal

3.2 创建并启动容器

①创建并启动一个新的容器,ubuntu:22.04为镜像,first为容器名

lxc launch ubuntu:22.04 first

这步会慢,需要下载镜像,如果网络无法下载,可使用export和import进行导出和导入

②创建并启动容器second

lxc launch ubuntu:22.04 second

这步会快些,因为镜像已经下载过了

③拷贝容器

# 执行拷贝
lxc copy first third
# 查看容器列表,可见拷贝出来的容器third不会自动启动
lxc list
# 启动容器,此处使用restart会报错
lxc start third

④查看容器详细信息

lxc info first

3.3 配置容器

可在创建时分配资源,如内存、cpu、磁盘等

①创建容器:限制一个vCPU和192M内存,limited为容器名

lxc launch ubuntu:22.04 limited --config limits.cpu=1 --config limits.memory=192MiB

②查看配置

lxc config show limited

③查看实体机和容器中限制

# 内存
free -m
lxc exec limited -- free -m
# cpu
nproc
lxc exec limited -- nproc

④容器运行时可更新配置

# 设置配置:limited为配置名
lxc config set limited limits.memory=128MiB、
# 检查配置
lxc config show limited
lxc exec limited -- free -m

3.4 与容器交互

①命令交互

# 交互式
# 执行命令:进入交互界面
lxc exec first -- bash
# 执行命令
cat /etc/*release
# 退出交互shell
exit

# 非交互式
lxc exec first -- apt-get update
lxc exec first -- apt-get install sl -y
lxc exec first -- /usr/games/sl

②文件导入和导出

# 从 lxd 容器中拉取文件或目录到本地系统
lxc file pull <container_name>/<remote_path> [<local_path>]
# 用于将本地系统中的文件或目录推送到 lxd 容器中	
lxc file push [<local_path>] <container_name>/<remote_path>

3.5 快照管理

①创建容器first的快照clean

lxc snapshot first clean

②恢复快照

lxc restore first clean

③删除快照

lxc delete first/clean

4 常用命令

一、镜像
查看镜像:lxc image list
删除镜像:lxc image delete <fingerprint-or-alias>
导出镜像:lxc image export <image-alias> /home/exported-image.tar.xz
		 此处会生成两个文件
导入镜像:lxc image import 文件1.xz 文件2.root --alias <new-image-alias>
二、容器 	
查看容器:lxc list
创建容器:lxc launch <image-name> <container-name>
	 或:lxc launch <fingerprint> <container-name>	
容器交互:lxc exec first -- bash或者lxc shell 容器名
停止容器:lxc stop <container-name>
删除容器:lxc delete <container-name>
强制删除:lxc delete <container-name> --force
三、配置
1、设置端口映射:
lxc config device add <container-name> <device-name> proxy listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80
    - proxy: 设备类型,表示端口代理。
    - listen=tcp:0.0.0.0:8080: 定义在主机上监听的地址和端口。
    - connect=tcp:127.0.0.1:80: 定义连接到容器内部的地址和端口。
2、设置磁盘目录/挂载目录:
lxc config device add <container-name> <device-name>t disk source=/host/path/path/on/host path=/container/path
3、查看所有设备:lxc config device list
四、快照
创建快照:lxc snapshot first clean
查看快照:lsx list first/lsx info first
恢复快照:lxc restore first clean
删除快照:lxc delete first/clean

实现

实际部署方案:

资源受限:只使用两个容器

容器1:作为基础安装验证

容器2:进行各组件的替换更新

资源不限制:

容器1:作为基础安装验证

容器...:针对每个feature验证时,创建新容器进行验证

参考:

1、官方文档:Canonical LXD documentation (ubuntu.com)

2、docker、LXC、LXD的区别及传统的虚拟机与操作系统虚拟化的区别_lxd容器-CSDN博客

3、LXC 和 LXD 容器总结_lxc lxd-CSDN博客

标签:容器,--,lxd,lxc,Linux,first
From: https://www.cnblogs.com/circlelll/p/18072036

相关文章

  • 在Docker容器和主机之间复制文件/文件夹
    简介Docker是一种流行的容器化平台,它允许开发人员在独立、可移植的环境中构建、打包和部署应用程序。在使用Docker时,常常需要在Docker容器和主机之间进行文件的复制和共享。Docker提供了一个名为dockercp的命令,可以轻松地在容器和主机之间复制文件和目录。本文将详细介绍docker......
  • Spring核心思想之 AOP:在自定义容器基础上实现AOP功能
    在Spring核心思想之AOP:基础概念及注解式AOP初体验中对AOP的基本概念及使用有了初步的了解。本文仿Spring自定义后置处理器、注解等,在Spring的核心思想之IOC:仿Spring自定义一个实现IOC的容器的基础上实现自定义的AOP功能。aop相关目录:......
  • 42_Docker容器编排
    下载安装docker-composecurl-L"https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose#curl-L"https://get.daocloud.io/docker/compose/releases/download/v2.17.2/d......
  • docker容器操作
    可以把镜像运行成容器,一个镜像可以运行出多个容器案例(把centos7运行成容器)#--name=centos7容器名#run:创建并运行#-di:创建出容器并运行,命令行还在宿主机dockerrun-di--name=centos7centos:centos7容器操作命令#查看正在运行的容器dockerps#查看所有容......
  • SpringBoot(容器功能)
    文章目录1.@Configuration添加/注入bean1.注入bean1.编写一个JavaBean,Monster.java2.创建一个config文件夹(名字任意),用于存放配置Bean的类(相当于配置文件)3.BeanConfig.java4.测试使用MainApp.java2.结果展示2.细节说明1.@Configuration的proxyBeanMethods属性2.可以有......
  • 如何在Docker容器和主机之间复制文件/文件夹
    简介Docker是一种流行的容器化平台,它允许开发人员在独立、可移植的环境中构建、打包和部署应用程序。在使用Docker时,常常需要在Docker容器和主机之间进行文件的复制和共享。Docker提供了一个名为dockercp的命令,可以轻松地在容器和主机之间复制文件和目录。本文将详细介绍docker......
  • Spring的核心思想之一IOC:仿Spring自定义一个实现IOC的容器
    IoCInversionofControl(控制反转/反转控制),是⼀个技术思想而不是⼀个技术实现。它描述的是Java开发领域对象的创建,管理的问题——传统开发⽅式:⽐如类A依赖于类B,往往会在类A中new⼀个B的对象,而在IoC思想下开发⽅式:使用者不⽤⾃⼰去new对象了,由IoC容器(Spring框架或其他)帮......
  • 将Asp.net Core 微服务容器部署到 Kubernetes
    将微服务容器部署到KubernetesKubernetes会为你运行容器,需要通过YAML文件描述希望Kubernetes执行的操作,在Kubernetes上部署和运行后端服务简单操作如下步骤安装Kubernetes工具和实现我们需要同时安装kubectl工具和Kubernetes实现按照参考:https://www.cnblogs.co......
  • docker容器
    1.运行容器dockerrun是启动容器的方法。可用三种方式指定容器启动时执行的命令:(1)CMD指令。(2)ENTRYPOINT指令。(3)在dockerrun命令行中指定容器启动时执行pwd,返回的/是容器中的当前目录。执行dockerps或dockercontainerls可以査看Dockerhost中当前......
  • LeetCodeHot100 283. 移动零 11. 盛最多水的容器 15. 三数之和 42. 接雨水
    283.移动零https://leetcode.cn/problems/move-zeroes/description/?envType=study-plan-v2&envId=top-100-likedpublicvoidmoveZeroes(int[]nums){intr=0;for(inti=0;i<nums.length;i++){if(nums[i]!=0){......