开源容器Podman的安装与使用,与Docker功能相似,多一种选择。

什么是 Podman ?



Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。

Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。

1. Podman 官网地址:https://podman.io/
2. Podman 项目地址:https://github.com/containers/libpod

安装 Podman

Podman 目前已支持大多数发行版本通过软件包来进行安装,下面我们来举几个常用发行版本的例子。

  • Fedora / CentOS

$ sudo yum -y install podman
  • Ubuntu

$ sudo apt-get update -qq
$ sudo apt-get install -qq -y software-properties-common uidmap
$ sudo add-apt-repository -y ppa:projectatomic/ppa
$ sudo apt-get update -qq
$ sudo apt-get -qq -y install podman
  • MacOS

$ brew cask install podman
  • RHEL 7

$ sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
$ sudo yum -y install podman
  • Arch Linux

$ sudo pacman -S podman

更多系统的安装方法,可参考官方文档:https://github.com/containers/libpod/blob/master/install.md

使用 Podman

使用 Podman 非常的简单,Podman 的指令跟 Docker 大多数都是相同的。下面我们来看几个常用的例子:

运行一个容器

$ podman run -dt -p 8080:8080/tcp \
-e HTTPD_VAR_RUN=/var/run/httpd \
-e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \
-e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \
-e HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/httpd/ \
registry.fedoraproject.org/f27/httpd /usr/bin/run-httpd复制代码

列出运行的容器

$ podman ps -a

分析一个运行的容器

$ podman inspect -l | grep IPAddress\":
"SecondaryIPAddresses": null,
"IPAddress": "",

查看一个运行中容器的日志

$ sudo podman logs --latest
10.88.0.1 - - [07/Feb/2018:15:22:11 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"

查看一个运行容器中的进程资源使用情况

$ sudo podman top <container_id>
 UID PID PPID C STIME TTY TIME CMD
 0 31873 31863 0 09:21 ? 00:00:00 nginx: master process nginx -g daemon off;
 101 31889 31873 0 09:21 ? 00:00:00 nginx: worker process

停止一个运行中的容器

$ sudo podman stop --latest

删除一个容器

$ sudo podman rm --latest

以上这些特性基本上都和 Docker 一样,Podman 除了兼容这些特性外,还支持了一些新的特性。

给容器设置一个检查点

$ sudo podman container checkpoint <container_id>
需要 CRIU 3.11 以上版本支持,CRIU 项目地址:https://criu.org/

根据检查点位置恢复容器

$ sudo podman container restore <container_id>

迁移容器

Podman 支持将容器从一台机器迁移到另一台机器。

首先,在源机器上对容器设置检查点,并将容器打包到指定位置。

$ sudo podman container checkpoint <container_id> -e /tmp/checkpoint.tar.gz
$ scp /tmp/checkpoint.tar.gz <destination_system>:/tmp

其次,在目标机器上使用源机器上传输过来的打包文件对容器进行恢复。

$ sudo podman container restore -i /tmp/checkpoint.tar.gz

配置别名

如果习惯了使用 Docker 命令,可以直接给 Podman 配置一个别名来实现无缝转移。你只需要在 .bashrc 下加入以下行内容即可:

$ echo "alias docker=podman" >> .bashrc
$ source .bashrc

Podman 如何实现开机重启容器

由于 Podman 不再使用守护进程管理服务,所以不能通过守护进程去实现自动重启容器的功能。那如果要实现开机自动重启容器,又该如何实现呢?

其实方法很简单,现在大多数系统都已经采用 Systemd 作为守护进程管理工具。这里我们就可以使用 Systemd 来实现 Podman 开机重启容器,这里我们以启动一个 Nginx 容器为例子。

首先,我们先运行一个 Nginx 容器。

$ sudo podman run -t -d -p 80:80 --name nginx nginx复制代码

然后,在建立一个 Systemd 服务配置文件。

$ vim /etc/systemd/system/nginx_container.service
[Unit]
Description=Podman Nginx Service
After=network.target
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/podman start -a nginx
ExecStop=/usr/bin/podman stop -t 10 nginx
Restart=always
[Install]
WantedBy=multi-user.target

接下来,启用这个 Systemd 服务。

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java