Docker容器

centos8 podman替代docker

本文主要是介绍centos8 podman替代docker,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

Podman的介绍

在centos8里面默认的容器就是podman,不再是docker,可以快捷管理镜像(类似带系统的Time

Machine),能快捷由镜像创建容器环境(类似虚拟机,但不模拟硬件层),也可以快速由容器制作出

镜像进行保存或者分享。

Podman是无守护程序容器引擎,用于在Linux系统上开发,管理和运行OCI容器。容器可以以root用户

或无根模式运行。简而言之: alias docker = podman

20年k8s宣布弃用docker原本由 Docker 负责的工作现在基本都由红帽发布的三款工具接管了,分别是 Podman、Skopeo 与

Buildah。它们都不需要守护程序,也不需要访问 root 权限组

Podman(Pod Manager)是一个功能齐全的容器引擎,它是一个简单的无守护工具。 Podman提供了

一个类似Docker-CLI的命令行,可以简化从其他容器引擎的转换,并允许管理pod,容器和图像。

Libpod 是一个创建容器 pod 的工具和库,它包含 pod 管理工具 Podman,Podman 管理 pod、容

器、容器镜像和容器卷。

Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和

Docker 类似,不同的是 Podman 没有 daemon美[ˈdiːmən]

所以Podman 比较简单粗暴,它不使用 Daemon,而是直接通过 OCI runtime(默认也是 runc )来启

动容器,所以容器的进程是 podman 的子进程。

为什么会出现podman?

docker的出现,解决的根本问题是: 解决了不同环境之间手工匹配的复杂程度;

但docker有个让人头疼的问题:“Docker 守护程序在多个核心上占用 100% CPU 资源,并导致主机无法

正常使用。”

而Podman不需要守护程序,也不需要访问 root 权限组。Podman 能够替代大部分子命令(run, push,

pull 等等)。由于不需要守护程序,而且会利用用户命名空间模拟容器中的 root,所以 Podman 不需

要接入具有 root 权限的 socket——这就解决了 Docker 长期以来一直面临的老大难问题。

搭建podman

系统环境

[root@xinsz08-20 ~]# uname -r 4.18.0-80.el8.x86_64 
[root@xinsz08-20 ~]# cat /etc/redhat-release 
CentOS Linux release 8.0.1905 (Core)

我们公司使用的系统

更新dnf

注: dnf类似于yum,是centos8里面自带的软件管理器

[root@xinsz08-20 ~]# dnf update -y && dnf makecache

 

安装podman

[root@xinsz08-20 ~]# dnf install podman -y 
[root@xinsz08-20 ~]# podman -v podman version 2.2.1

 

搭建wordpress初始容器

Podman安装完成后,我们选择基于Centos 8的镜像搭建WordPress。

也可以直接在Docker Hub (Podman兼容Docker) 中找 WordPress的镜像,会更快捷,

但是呢,我们说,运维玩的就是个折腾!

所以我们多折腾一步吧,了解一下具体结构,比如添加https,或者搭多个WordPress等自定需求。

首先可以尝试用podman进行搜索centos 8的镜像,用于之后搭建WordPress,有时候直接通过

podman search centos:8 找不到官方的image。

查找centos8的镜像

[root@xinsz08-20 ~]# podman search centos:8 
INDEX NAME DESCRIPTION 
STARS OFFICIAL AUTOMATED 
docker.io docker.io/yozhi/centos add some common tools to 
image centos:8.2.2... 0 
docker.io docker.io/dongyupu/jira-software tag 8.5.0 : 
centos:8(openjdk-1.8.0) tag 8.3.... 0 
docker.io docker.io/vssware/gmssl Base On vssware/centos:8 
1 
docker.io docker.io/vssware/python 基于 *vssware/centos:8* 镜 
像创建,使... 0 
docker.io docker.io/images4dev/centos8 Based off the official 
CentOS:8.1.1911 image... 0 
docker.io docker.io/mizux/ortools Simple python ortools 
inside a centos:8 dock... 0 
docker.io docker.io/jlkinsel/centos-polylinux-example Example of a 
centos:8.1.1911 that's had pack... 0 
docker.io docker.io/thanasan/centos8-systemd Linux CentOS:8 systemd 
0 
docker.io docker.io/mohitaga98/centos1 centos:8 with additional 
internal commands(p... 0 
docker.io docker.io/meghna98/centos_with_httpd Centos:8 images with 
httpd installed 0 

下载centos8

[root@xinsz08-20 ~]# podman pull centos:8

查看拉取到本地的镜像

[root@xinsz08-20 ~]# podman images 
REPOSITORY TAG IMAGE ID CREATED SIZE 
docker.io/library/centos 8 300e315adb2f 4 months ago 217 MB 
[root@xinsz08-20 ~]# podman image ls 
REPOSITORY TAG IMAGE ID CREATED SIZE 
docker.io/library/centos 8 300e315adb2f 4 months ago 217 MB 
[root@xinsz08-20 ~]# 

 

基于镜像创建容器

使用podman run --help查看具体参数

--name mywordpress 将容器命名为mywordpress

-dit 是三个选项的合体,主要保证能够在后台运行

-p 表示映射一个服务器端口至容器,比如映射80端口用于http的默认端口

443用于https的默认端口

/sbin/init 为赋予容器systemctl等命令的权限,方便后续管理

 

进入容器

 

[root@xinsz08-20 ~]# podman run --name mywordpress -dit -p 80:80 -p 443:443 
centos:8 /sbin/init 

查看当前的所有容器的状态

[root@xinsz08-20 ~]# podman ps -a ## 查看所有的容器 
CONTAINER ID IMAGE COMMAND CREATED STATUS 
PORTS NAMES 
f42545980324 docker.io/library/centos:8 /sbin/init 25 seconds ago Up 22 
seconds ago 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp mywordpress 
[root@xinsz08-20 ~]# podman ps ## 查看正在运行的容器 
CONTAINER ID IMAGE COMMAND CREATED STATUS 
PORTS NAMES 
f42545980324 docker.io/library/centos:8 /sbin/init 30 seconds ago Up 27 
seconds ago 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp mywordpress 
[root@xinsz08-20 ~]# 

使用命令进入容器

[root@xinsz08-20 ~]# podman exec -it d7e62f7cf5c6 bash 
[root@f42545980324 /]#

可以看到xshell上主机名变化

 

 

查看下hostname

[root@f42545980324 /]# hostname 
f42545980324 

搭建wordpress

注意: 在容器中不建议使用dnf update, 会使容器不必要的增大很多

首先我们安装所需要的软件和服务

mariadb 为一个数据库,也可以用其他数据库。用于之后 wordpress 存储文章、用户等数据信息

httpd 是 apache 网站服务,wordpress 可以选择搭建在 apache 之上。当然还可以选择用 nigix。

php 是 wordpress 基于的脚本语言

wget 是常用的下载工具,之后会用于下载 wordpress 包

[root@f42545980324 /]# dnf install mariadb mariadb-server httpd httpd-tools php 
php-cli php-json php-gd php-mbstring php-pdo php-xml php-mysqlnd php-pecl-zip 
wget -y 

启动安装好的服务

[root@f42545980324 /]# systemctl start httpd 
[root@f42545980324 /]# systemctl start mariadb 
[root@f42545980324 /]# systemctl enable httpd 
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → 
/usr/lib/systemd/system/httpd.service. 
[root@f42545980324 /]# systemctl enable mariadb 
Created symlink /etc/systemd/system/mysql.service → 
/usr/lib/systemd/system/mariadb.service. 
Created symlink /etc/systemd/system/mysqld.service → 
/usr/lib/systemd/system/mariadb.service. 
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → 
/usr/lib/systemd/system/mariadb.service. 
[root@f42545980324 /]#

查看状态

 

 

:q可以退出到非查看状态;

如果状态非active,则意味着有一些问题,可能是配置问题(但当前还没有进行配置,但之后可能会遇

到,到时候可以通过报错提示的日志查看方式,确定问题所在),也可能是内存不足等等,可以使用top

瞅一瞅内存状态。

配置数据库

进入数据库:

[root@f42545980324 /]# mysql -uroot -p 
Enter password: 

创建mywordpress数据库,名字可以自定,但需要记住,之后配置wordpress需要用到:

MariaDB [(none)]> create database mywordpress; 
Query OK, 1 row affected (0.001 sec) 
MariaDB [(none)]> GRANT ALL ON mywordpress.* TO 'wordpressuser'@'localhost' 
IDENTIFIED BY 'mywordpresspassword'; 
Query OK, 0 rows affected (0.000 sec) 
MariaDB [(none)]> flush privileges; 
Query OK, 0 rows affected (0.000 sec) 

下载wordpress

WordPress是php写的页面服务,跑在网站服务器上(apache或nigx),所以不需要安装。管理起来也

几乎和管理一堆网页文件差别不大。

这里选择安装至 /var/www 目录下

[root@f42545980324 /]# cd /var/www/ 
[root@f42545980324 www]# wget https://wordpress.org/latest.tar.gz
[root@f42545980324 www]# ls 
cgi-bin html latest.tar.gz 
[root@f42545980324 www]#

 

解压

[root@f42545980324 www]# ls 
cgi-bin html latest.tar.gz 
[root@f42545980324 www]# 
[root@f42545980324 www]# tar xf latest.tar.gz 
[root@f42545980324 www]# ls -l 
total 15388 
drwxr-xr-x. 2 root root 6 Nov 4 03:23 cgi-bin 
drwxr-xr-x. 2 root root 6 Nov 4 03:23 html 
-rw-r--r--. 1 root root 15750352 Apr 15 02:08 latest.tar.gz 
drwxr-xr-x. 5 nobody nobody 4096 Apr 15 02:08 wordpress 
[root@f42545980324 www]# 

此时文件夹的所属者是nobody,需要将其修改为apache,并赋予权限,使WordPress能修改自己的配

置或者自动更新等等。

首先将拥有者修改为apache,所属group也修改为apache。 -R参数表示递归修改,会一起修改文件夹

内所有文件,-f是不看报错消息,可以不加f。

775对应于apache和apache组可读、可写、可执行,而其他组可读、不可写、可执行

[root@f42545980324 www]# chown -Rf apache:apache ./wordpress/ 
[root@f42545980324 www]# chmod -Rf 775 ./wordpress/ 

配置apache

[root@f42545980324 www]# cd /etc/httpd/ 
[root@f42545980324 httpd]# ls 
conf conf.d conf.modules.d logs modules run state 
[root@f42545980324 httpd]# 

其中conf是主配置文件夹,开启运行时apacha会优先加载其中的配置文件 httpd.conf ,可以查阅其配

置,每一条官方都自带有比较详细的备注和说明。

conf.d是额外配置的文件夹,根据httpd.conf中的配置,appache会默认加载里面所有以 .conf 结尾的文

件。

conf.modules.d是模块的配置文件夹,根据httpd.conf中的配置,appache也会默认加载这里面所有以

.conf 结尾的文件,一些比如ssl、webdav等常用的模块配置就位于这个文件夹中。

而我们的wordpress配置可以放在conf.d中,首先进入conf.d,用vi创建并编辑配置文件:

[root@f42545980324 httpd]# cd /etc/httpd/conf.d/ 
[root@f42545980324 conf.d]# vim mywordpress.conf #此时还没有vim 
bash: vim: command not found 
[root@f42545980324 conf.d]# vi mywordpress.conf 
[root@f42545980324 conf.d]#

粘进下方配置

服务监听 80 端口

服务根文件夹为 /var/www/wordpress

给文件夹配置服务权限和跳转方式

[root@f42545980324 conf.d]# cat mywordpress.conf 
<VirtualHost *:80> 
ServerAdmin root@localhost 
DocumentRoot /var/www/wordpress 
<Directory "/var/www/wordpress"> 
Options Indexes FollowSymLinks 
AllowOverride all 
Require all granted 
</Directory> 
ErrorLog /var/log/httpd/wordpress_error.log 
CustomLog /var/log/httpd/wordpress_access.log common 
</VirtualHost> 

完成后Esc进入vi的普通模式,并键入 :wq 保存与退出。

之后重启apache服务

[root@f42545980324 conf.d]# systemctl restart httpd

配置wordpress

通过页面端访问配置wordpress时候必用:

wordpressuser

mywordpresspassword

mywordpress

 

[root@d7e62f7cf5c6 wordpress]# vi wp-config-sample.php

vim 
define( 'DB_NAME', 'mywordpress' ); 
24
25 /** MySQL database username */ 
26 define( 'DB_USER', 'wordpressuser' ); 
27
28 /** MySQL database password */ 
29 define( 'DB_PASSWORD', 'mywordpresspassword' ); 
30
31 /** MySQL hostname */ 
32 define( 'DB_HOST', 'localhost' ); 

cp wp-config-sample.php wp-config.php

输入虚拟机的IP进行配置

192.168.1.20

 

 

选择中文

 

 

 

 

根据提示一步步填入信息,最后输入用户名和密码就进入了后台哦。

 

 

这篇关于centos8 podman替代docker的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!