在Linux系统中如何使用Vagrant管理Podman容器
本文将和您一起探讨如何在Linux系统中使用Vagrant管理Podman容器。要完成这一目标,您需要在Linux操作系统上安装Vagrant,可以参考在Ubuntu 22.04系统上安装和使用Vagrant的方法一文,地址在https://www.hmxthome.com/linux/4915.html。如果是在Ubuntu上,还需要安装相关的软件包,可在命令行中运行sudo apt-get install libarchive-tools命令安装。另外,本文将使用VirtualBox作为管理程序,所以,用户还需要有VirtualBox。在Vagrant和Virtualbox已经成功安装的前提下,请按照以下步骤进行操作。
如何使用Vagrant管理Podman容器
步骤1:创建Vagrant Box
对于本文,我们将使用VirtualBox作为提供程序创建CentOS 7 Vagrant Box:
$ vagrant box add centos/7 --provider=virtualbox
更多的场景,请看如下所示:
##For KVM
vagrant box add centos/7 --provider=libvirt
##For VMware
vagrant box add generic/centos7 --provider=vmware_desktop
##For Docker
vagrant box add generic/centos7 --provider=docker
##For Parallels
vagrant box add generic/centos7 --provider=parallels
为CentOS 7创建Vagrant文件,如下所示:
mkdir ~/vagrant-vms
cd ~/vagrant-vms
touch ~/vagrant-vms/Vagrantfile
现在,我们将根据我们的首选项编辑Vagrant文件。
步骤2:使用Vagrant管理Podman容器
现在使用Vagrant管理您的Podman容器,如下所示。停止正在运行的实例:
$ vagrant halt
==> default: Attempting graceful shutdown of VM...
1、使用Vagrant构建Podman图像
Vagrant Podman provisioner可用于自动构建图像。容器映像可以在运行之前或在任何配置的容器之前构建,如下所示:
$ vim ~/vagrant-vms/Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.provision "podman" do |d|
d.build_image "~/vagrant-vms/app"
end
end
上面是一个示例代码,介绍了如何从Docker文件构建映像,并记住来宾机上必须存在路径~/vagrant/app:
vagrant ssh
mkdir ~/vagrant-vms/app
chmod 755 ~/vagrant-vms/app
停止正在运行的实例,如下所示:
vagrant halt
开始Vagrant,如下所示:
vagrant up --provision
2、用Vagrant Pull Podman图像
还可以从Docker注册表中提取图像。有两种方法可以用来指定要拉取的Docker图像。
第一种方法是使用参数images。
例如,要获取Ubuntu映像,请使用:
$ vim ~/vagrant-vms/Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.provision "podman",
images: ["ubuntu"]
end
第二个选项是使用pull_images函数,如下所示:
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.provision "podman" do |d|
d.pull_images "ubuntu"
d.pull_images "alpine"
end
end
样本输出如下截图所示:
$ vagrant up --provision
3、使用Vagrant运行Podman容器
除了构建和提取Podman图像之外,Vagrant还可以用于运行Podman容器。运行容器可以使用Ruby块语法完成,通常使用do…end块。
例如,要运行Rabbitmq Podman容器,请使用以下语法:
$ vim ~/vagrant-vms/Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.provision "podman" do |d|
d.run "rabbitmq"
end
end
启动实例如下:
$ vagrant up --provision
==> default: Rsyncing folder: /home/thor/vagrant-vms/ => /vagrant
==> default: Running provisioner: podman...
==> default: Starting Docker containers...
==> default: -- Container: rabbitmq
验证容器是否已启动:
$ vagrant ssh
$ podman ps
详细的状态如下图所示:
您也可以使用同一图像运行多个容器。在这里,您必须指定每个容器的名称。
例如,运行多个MySQL实例,可以使用以下代码:
$ vim ~/vagrant-vms/Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.provision "podman" do |d|
d.run "db-1", image: "mariadb"
d.run "db-2", image: "mariadb"
end
end
然后运行以下命令查看结果:
$ vagrant up --provision
==> default: Rsyncing folder: /home/thor/vagrant-vms/ => /vagrant
==> default: Running provisioner: podman...
==> default: Podman installing
==> default: Starting Docker containers...
==> default: -- Container: db-1
==> default: -- Container: db-2
此外,可以将容器配置为在其中安装共享目录的情况下运行。
例如,运行具有共享目录/var/www的Ubuntu容器时使用以下代码:
$ vim ~/vagrant-vms/Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.provision "podman" do |d|
d.run "ubuntu",
cmd: "bash -l",
args: "-v '/vagrant:/var/www'"
end
end
样本输出:
$ vagrant up --provision
==> default: Rsyncing folder: /home/thor/vagrant-vms/ => /vagrant
==> default: Running provisioner: podman...
==> default: Podman installing
==> default: Starting Docker containers...
==> default: -- Container: ubuntu
您可以如下验证您创建的Podman容器:
$ vagrant ssh
$ podman ps -a
详细的状态如下图所示:
您可以暂停/休眠Vagrant实例,如下所示:
vagrant suspend
如果要删除Vagrant实例,请运行以下命令:
vagrant destroy
至此,我们已经成功完成了使用Vagrant管理Podman容器的目标。