RHEL 7.6 Beta 的 Podman 介绍 已翻译 100%

oschina 投递于 08/31 19:22 (共 5 段, 翻译完成于 09-11)
阅读 149
收藏 0
0
加载中

Red Hat Enterprise Linux(RHEL)7.6 Beta版是几天前发布的,我注意到的第一个新特性是Podman。Podman通过提供与Docker命令行类似的体验来补充BuildahSkopeo:允许用户运行独立的(非编排的)容器。Podman不需要一个守护进程来运行容器和吊舱,所以我们可以很容易地与臃肿的守护进程说再见。

Podman实现了几乎所有的Docker CLI命令(当然,除了与Docker Swarm相关的命令)。对于容器编排,我建议您看一下Kubernetes和Red Hat OpenShift

Podman只包含一个在命令行上运行的命令。后台没有后台进程,这意味着Podman可以通过systemd集成到系统服务中。

我们将介绍一些真实的例子,这些示例展示了从Docker CLI到Podman的转换是多么容易。

雪落无痕xdj
翻译于 09/04 19:56
0

Podman 的安装

如果你运行的是 Red Hat Enterprise Linux 7.6 Beta ,请按照以下步骤操作。如果不是,你可以使用 Katacoda 在线试用 Podman 。

你需要使能 extras repo:

$ su -
# subscription-manager repos --enable rhel-7-server-extras-beta-rpms

请注意:在撰写本文时,RHEL 7.6 仍处于测试阶段。一旦 GA 发生后,请通过删除 -beta- 来更改 repo 名称。

然后,启动正确的安装命令:

# yum -y install podman

此命令将安装 Podman 及其依赖项:atomic-registriesrunCskopeo-containers 和 SELinux 策略。

这就是全部步骤了。现在你可以试玩下 Podman 了。

Tocy
Tocy
翻译于 09/03 09:45
0

命令行示例

运行一个RHEL容器

对于第一个例子,假设我们只想运行一个RHEL容器。在一个RHEL系统上,当我们想运行一个RHEL容器,它应该像下面这样:

[root@localhost ~]# docker run -it rhel sh
-bash: docker: command not found

如您所见,在我的RHEL 7.6主机上没有docker命令。只需将docker命令替换为podman:

[root@localhost ~]# podman run -it rhel sh
Trying to pull registry.access.redhat.com/rhel:latest...Getting image source signatures
Copying blob sha256:367d845540573038025f445c654675aa63905ec8682938fb45bc00f40849c37b
71.46 MB / ? [------------=----------------------------------------------] 23s 
Copying blob sha256:b82a357e4f15fda58e9728fced8558704e3a2e1d100e93ac408edb45fe3a5cb9
1.27 KB / ? [----=--------------------------------------------------------] 0s 
Copying config sha256:f5ea21241da8d3bc1e92d08ca4888c2f91ed65280c66acdefbb6d2dba6cd0b29
6.52 KB / 6.52 KB [========================================================] 0s
Writing manifest to image destination
Storing signatures
sh-4.2#

现在我们有了RHEL容器。让我们来试着玩儿一下,检查它的状态,然后删除它和它的源镜像:

sh-4.2# ps ax
PID TTY STAT TIME COMMAND
1 pts/0 Ss 0:00 sh
10 pts/0 R+ 0:00 ps ax
sh-4.2# exit

[root@localhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
deda2991f9fd registry.access.redhat.com/rhel:latest sh 3 minutes ago Exited (0) Less than a second ago reverent_torvalds

[root@localhost ~]# podman rm deda2991f9fd
deda2991f9fd43400566abceaa917ecbd59a2e83354c5c9021ba1830a7ab196d

[root@localhost ~]# podman image rm rhel
f5ea21241da8d3bc1e92d08ca4888c2f91ed65280c66acdefbb6d2dba6cd0b29

正如您所看到的,我们使用了与docker相同的语法。目前没有任何不同之处。我并没有查看Podman的帮助文档,马上就开始工作了!

雪落无痕xdj
翻译于 09/04 20:00
0

运行一个MariaDB持久性容器

让我们继续,尝试一个更复杂的测试:带一些自定义变量来运行MariaDB 10.2,并尝试让它的“数据”是持久的。

首先,让我们下载MariaDB容器映像并检查它的详细信息:

[root@localhost ~]# podman pull registry.access.redhat.com/rhscl/mariadb-102-rhel7Trying to pull registry.access.redhat.com/rhscl/mariadb-102-rhel7...Getting image source signatures
Copying blob sha256:367d845540573038025f445c654675aa63905ec8682938fb45bc00f40849c37b
71.46 MB / ? [------------=----------------------------------------------] 10s 
Copying blob sha256:b82a357e4f15fda58e9728fced8558704e3a2e1d100e93ac408edb45fe3a5cb9
1.27 KB / ? [----=--------------------------------------------------------] 0s 
Copying blob sha256:ddec0f65683ad89fc27298921921b2f8cbf57f674ed9eb71eef4e23a9dd9bbfe
6.40 MB / ? [--------------=----------------------------------------------] 1s 
Copying blob sha256:105cfda934d478ffbf65d74a89af55cc5de1d5bc94874c2d163c45e31a937047
58.25 MB / ? [-------------------------------------------=---------------] 10s 
Copying config sha256:7ac0a23445fec91d4b458f3062e64d1ca4af4755387604f8d8cbec08926867d7
6.79 KB / 6.79 KB [========================================================] 0s
Writing manifest to image destination
Storing signatures
7ac0a23445fec91d4b458f3062e64d1ca4af4755387604f8d8cbec08926867d7

[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.access.redhat.com/rhscl/mariadb-102-rhel7 latest 7ac0a23445fe 9 days ago 445MB

[root@localhost ~]# podman inspect 7ac0a23445fe
...

然后,我们可以设置一个文件夹,一旦我们启动容器,就可以处理MariaDB的数据:

[root@localhost ~]# mkdir mysql-data
[root@localhost ~]# chown 27:27 mysql-data

请注意:“27”是mysql用户的ID,它将在容器中运行MariaDB的进程。出于这个原因,我们必须允许它从目录中读取和写入目录。

最后,运行:

[root@localhost ~]# podman run -d -v /root/mysql-data:/var/lib/mysql/data:Z -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 registry.access.redhat.com/rhscl/mariadb-102-rhel7
71da2bb210b36aaab28a2dc81b8e77da4e1024d1f2d025c0a7b97b075dec1425


[root@localhost ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
71da2bb210b3 registry.access.redhat.com/rhscl/mariadb-102-rhel7:latest container-entrypoin... 3 seconds ago Up 3 seconds ago 0.0.0.0:3306->3306/udp, 0.0.0.0:3306->3306/tcp cranky_mahavira

如您所见,容器已经启动并运行,但是它在做什么呢?让我们检查下:

[root@localhost ~]# podman logs 71da2bb210b3 | head
=> sourcing 20-validate-variables.sh ...
=> sourcing 25-validate-replication-variables.sh ...
=> sourcing 30-base-config.sh ...
---> 13:12:43 Processing basic MySQL configuration files ...
=> sourcing 60-replication-config.sh ...
=> sourcing 70-s2i-config.sh ...
---> 13:12:43 Processing additional arbitrary MySQL configuration provided by s2i ...
=> sourcing 40-paas.cnf ...
=> sourcing 50-my-tuning.cnf ...
---> 13:12:43 Initializing database ...

啊!它只是启动并初始化了它的数据库。让我们继续:

[root@localhost ~]# mysql --user=user --password=pass -h 127.0.0.1 -P 3306 -t
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.2.8-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| db |
| information_schema |
| test |
+--------------------+
3 rows in set (0.00 sec)

MariaDB [(none)]> use test;
Database changed

MariaDB [test]> show tables;
Empty set (0.00 sec)

太完美了。现在我们至少创建一个表格,然后我们将终止容器:

MariaDB [db]> CREATE TABLE mytest (username VARCHAR(20), date DATETIME);
Query OK, 0 rows affected (0.02 sec)

MariaDB [db]> show tables;
+--------------+
| Tables_in_db |
+--------------+
| mytest |
+--------------+
1 row in set (0.00 sec)

MariaDB [db]> Bye

[root@localhost ~]# podman kill 71da2bb210b3
71da2bb210b36aaab28a2dc81b8e77da4e1024d1f2d025c0a7b97b075dec1425

检查文件夹的内容,我们可以看到数据仍然在那里,让我们启动一个新的容器来检查数据持久性:

[root@localhost ~]# ls -la mysql-data/
total 41024
drwxr-xr-x. 6 27 27 4096 Aug 24 09:12 .
dr-xr-x---. 4 root root 219 Aug 24 09:28 ..
-rw-rw----. 1 27 27 2 Aug 24 09:12 71da2bb210b3.pid
-rw-rw----. 1 27 27 16384 Aug 24 09:12 aria_log.00000001
-rw-rw----. 1 27 27 52 Aug 24 09:12 aria_log_control
drwx------. 2 27 27 56 Aug 24 09:27 db
-rw-rw----. 1 27 27 2799 Aug 24 09:12 ib_buffer_pool
-rw-rw----. 1 27 27 12582912 Aug 24 09:27 ibdata1
-rw-rw----. 1 27 27 8388608 Aug 24 09:27 ib_logfile0
-rw-rw----. 1 27 27 8388608 Aug 24 09:12 ib_logfile1
-rw-rw----. 1 27 27 12582912 Aug 24 09:12 ibtmp1
-rw-rw----. 1 27 27 0 Aug 24 09:12 multi-master.info
drwx------. 2 27 27 4096 Aug 24 09:12 mysql
-rw-r--r--. 1 27 27 14 Aug 24 09:12 mysql_upgrade_info
drwx------. 2 27 27 20 Aug 24 09:12 performance_schema
-rw-rw----. 1 27 27 24576 Aug 24 09:12 tc.log
drwx------. 2 27 27 6 Aug 24 09:12 test

[root@localhost ~]# podman run -d -v /root/mysql-data:/var/lib/mysql/data:Z -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 registry.access.redhat.com/rhscl/mariadb-102-rhel7
0364513f6b6ae1b86ea3752ec732bad757770ca14ec1f879e7487f3f4293004d

[root@localhost ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0364513f6b6a registry.access.redhat.com/rhscl/mariadb-102-rhel7:latest container-entrypoin... 3 seconds ago Up 2 seconds ago 0.0.0.0:3306->3306/udp, 0.0.0.0:3306->3306/tcp heuristic_northcutt

[root@localhost ~]# mysql --user=user --password=pass -h 127.0.0.1 -P 3306 -t
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.2.8-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [db]> show tables;
+--------------+
| Tables_in_db |
+--------------+
| mytest |
+--------------+
1 row in set (0.00 sec)

MariaDB [db]> Bye

[root@localhost ~]# podman kill 0364513f6b6a
0364513f6b6ae1b86ea3752ec732bad757770ca14ec1f879e7487f3f4293004d

太棒了!MariaDB的数据仍然在那里,新的容器可以读取并按要求显示它。

雪落无痕xdj
翻译于 09/04 20:04
0

通过systemd和Podman将容器作为系统服务进行管理

最后,我们将创建一个简单的systemd资源来处理以前创建的MariaDB容器。

首先,我们需要创建一个systemd资源文件来处理全新的容器服务:

[root@localhost ~]# cat /etc/systemd/system/mariadb-podman.service[Unit]Description=Custom MariaDB Podman Container
After=network.target[Service]Type=simple
TimeoutStartSec=5m
ExecStartPre=-/usr/bin/podman rm "mariadbpodman"

ExecStart=/usr/bin/podman run --name mariadbpodman -v /root/mysql-data:/var/lib/mysql/data:Z -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 registry.access.redhat.com/rhscl/mariadb-102-rhel7

ExecReload=-/usr/bin/podman stop "mariadbpodman"
ExecReload=-/usr/bin/podman rm "mariadbpodman"
ExecStop=-/usr/bin/podman stop "mariadbpodman"
Restart=always
RestartSec=30[Install]

然后我们可以重新加载systemd目录并启动服务:

[root@localhost ~]# systemctl daemon-reload[root@localhost ~]# systemctl start mariadb-podman[root@localhost ~]# systemctl status mariadb-podmanmariadb-podman.service - Custom MariaDB Podman Container
Loaded: loaded (/etc/systemd/system/mariadb-podman.service; static; vendor preset: disabled)
Active: active (running) since Fri 2018-08-24 10:14:36 EDT; 3s ago
Process: 19147 ExecStartPre=/usr/bin/podman rm mariadbpodman (code=exited, status=0/SUCCESS)
Main PID: 19172 (podman)
CGroup: /system.slice/mariadb-podman.service
└─19172 /usr/bin/podman run --name mariadbpodman -v /root/mysql-data:/var/lib/mysql/data:Z -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DA...

Aug 24 10:14:39 localhost.localdomain podman[19172]: 2018-08-24 14:14:39 140578968823552 [Note] InnoDB: Buffer pool(s) load completed at 180824 14:14:39
Aug 24 10:14:39 localhost.localdomain podman[19172]: 2018-08-24 14:14:39 140579889719488 [Note] Plugin 'FEEDBACK' is disabled.
Aug 24 10:14:39 localhost.localdomain podman[19172]: 2018-08-24 14:14:39 140579889719488 [Note] Server socket created on IP: '::'.
Aug 24 10:14:39 localhost.localdomain podman[19172]: 2018-08-24 14:14:39 140579889719488 [Warning] 'user' entry 'root@71da2bb210b3' ignored in --sk...ve mode.
Aug 24 10:14:39 localhost.localdomain podman[19172]: 2018-08-24 14:14:39 140579889719488 [Warning] 'user' entry '@71da2bb210b3' ignored in --skip-n...ve mode.
Aug 24 10:14:39 localhost.localdomain podman[19172]: 2018-08-24 14:14:39 140579889719488 [Warning] 'proxies_priv' entry '@% root@71da2bb210b3' igno...ve mode.
Aug 24 10:14:39 localhost.localdomain podman[19172]: 2018-08-24 14:14:39 140579889719488 [Note] Reading of all Master_info entries succeded
Aug 24 10:14:39 localhost.localdomain podman[19172]: 2018-08-24 14:14:39 140579889719488 [Note] Added new Master_info '' to hash table
Aug 24 10:14:39 localhost.localdomain podman[19172]: 2018-08-24 14:14:39 140579889719488 [Note] /opt/rh/rh-mariadb102/root/usr/libexec/mysqld: read...ections.
Aug 24 10:14:39 localhost.localdomain podman[19172]: Version: '10.2.8-MariaDB' socket: '/var/lib/mysql/mysql.sock' port: 3306 MariaDB Server
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl stop mariadb-podman
[root@localhost ~]#

真棒!我们通过Podman来管理相应的容器,并以此为基础来搭建自定义系统服务。

更多资源

您想要一种简单快捷的方法来试验Podman吗? Katacoda就是答案。 Katacoda是一个交互式学习和培训平台,可让您在浏览器中使用真实环境学习新技术!

看看这里:katacoda.com/courses/containers-without-docker/running-containers-with-podman

为了更好的了解Podman,请查阅以下两个由Dan Walsh写的博客:

这就是全部内容!愿容器和你在一起!

清清鸟
清清鸟
翻译于 09/04 13:22
0
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(0)

返回顶部
顶部