Fedora 31:容器管理与Web服务器搭建指南
1. 容器管理
1.1 容器删除
当容器不再需要时,可在停止容器后使用
podman rm
命令将其删除,示例如下:
# podman rm mycontainer2
1.2 使用Buildah构建容器
Buildah可基于现有容器、镜像或从头开始构建新容器,还能挂载容器文件系统以便在主机上访问和修改。
1.2.1 基于现有镜像构建容器
使用以下命令基于Fedora 31基础镜像构建容器(若镜像未从注册表拉取,Buildah会在创建容器前下载):
$ buildah from docker://docker.io/library/fedora:31
运行此命令后,会创建一个名为
fedora-working-container
的可运行容器,可使用以下命令测试:
$ buildah run fedora-working-container cat /etc/passwd
1.2.2 从头开始构建容器
从头构建容器本质上是创建一个空容器,之后可安装所需软件包。步骤如下:
1. 运行以下命令创建空容器:
# buildah from scratch working-container
- 查看容器信息:
# buildah containers
输出示例:
CONTAINER ID BUILDER IMAGE ID IMAGE NAME CONTAINER NAME
9b138eee7fa6 * scratch working-container
- 挂载容器文件系统:
# buildah mount working-container
输出示例:
/var/lib/containers/storage/overlay/20b46cf0e2994d1ecdc4487b89f93f6ccf41f72788da63866b6bf80984081d9a/merged
-
使用
dnf命令安装软件包:
# dnf install --releasever=31 --installroot <container_fs_mount> bash coreutils dnf
其中
<container_fs_mount>
是
buildah mount
命令输出的挂载路径。
5. 卸载容器文件系统:
# buildah umount working-container
-
运行容器并进入
bash命令行:
# buildah run working-container bash
输出示例:
bash-5.0#
1.3 容器桥接网络
容器网络使用容器网络接口(CNI)桥接网络栈实现。以下是主机系统上运行容器时的典型网络配置:
# ip a
输出示例:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:20:dc:2f brd ff:ff:ff:ff:ff:ff
inet 192.168.0.33/24 brd 192.168.0.255 scope global dynamic noprefixroute enp0s3
valid_lft 3453sec preferred_lft 3453sec
inet6 2606:a000:4307:f000:aa6:6da1:f8a9:5f95/64 scope global dynamic noprefixroute
valid_lft 3599sec preferred_lft 3599sec
inet6 fe80::4275:e186:85e2:d81f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: cni-podman0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 7e:b6:04:22:4f:22 brd ff:ff:ff:ff:ff:ff
inet 10.88.0.1/16 scope global cni0
valid_lft forever preferred_lft forever
inet6 fe80::7cb6:4ff:fe22:4f22/64 scope link
valid_lft forever preferred_lft forever
12: veth2a07dc55@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master cni0 state UP group default
link/ether 42:0d:69:13:89:af brd ff:ff:ff:ff:ff:ff link-netns cni-61ba825e-e596-b2ef-a59f-b0743025e448
inet6 fe80::400d:69ff:fe13:89af/64 scope link
valid_lft forever preferred_lft forever
在上述示例中,主机的
enp0s3
接口连接到外部网络,IP地址为
192.168.0.33
,同时创建了一个名为
cni-podman0
的虚拟接口,IP地址为
10.88.0.1
。
在容器中运行
ip a
命令可能的输出如下:
# ip a
输出示例:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
3: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 3e:52:22:4b:e0:d8 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.88.0.28/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::3c52:22ff:fe4b:e0d8/64 scope link
valid_lft forever preferred_lft forever
此时容器的IP地址为
10.88.0.28
,可在主机上使用
ping
命令验证主机和容器是否在同一子网:
# ping 10.88.0.28
CNI配置文件位于
/etc/cni/net.d/87-podman-bridge.conflist
,默认内容如下:
{
"cniVersion": "0.4.0",
"name": "podman",
"plugins": [
{
"type": "bridge",
"bridge": "cni-podman0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"routes": [
{
"dst": "0.0.0.0/0"
}
],
"ranges": [
[
{
"subnet": "10.88.0.0/16",
"gateway": "10.88.0.1"
}
]
]
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
},
{
"type": "firewall",
"backend": "iptables"
}
]
}
可修改此文件来更改子网地址范围和插件类型。
1.4 使用Cockpit管理容器
除了命令行工具,还可使用Cockpit web界面创建和管理Linux容器。步骤如下:
1. 若Cockpit中未安装
podman
模块,运行以下命令安装:
# dnf install cockpit-podman
-
登录Cockpit,选择
Podman Containers页面。 -
下载镜像:点击
Get new image按钮,输入关键字搜索并下载所需镜像。 -
运行容器:选择下载好的镜像,点击
run按钮,在弹出的对话框中配置容器参数,如端口映射、内存限制、存储卷等,最后点击Run按钮启动容器。
运行中的容器会显示在列表中,可通过按钮对容器进行启动、停止、暂停和保存等操作,也可使用命令行工具进行管理。
2. Fedora 31 Web服务器搭建
2.1 配置Web服务器的要求
搭建自己的网站需要计算机(或云服务器实例)、操作系统、Web服务器、域名、名称服务器和IP地址。具体如下:
-
操作系统
:使用Fedora 31。
-
Web服务器
:Fedora 31支持Apache Web服务器,可在操作系统运行后安装。
-
域名
:可通过任何域名注册服务进行注册。
-
IP地址
:若在云实例上运行Fedora 31,提供商分配的IP地址会列在服务器概述信息中;若自行托管服务器且ISP分配了静态IP地址,需使用名称服务器将域名与该地址关联;若使用动态IP地址,可使用免费的动态DNS(DDNS)服务将动态IP地址映射到域名。
2.2 安装Apache Web服务器软件包
当前版本的Fedora默认不安装Apache Web服务器,可使用以下命令检查是否已安装:
# rpm -q httpd
若输出类似
httpd-2.4.41-9.fc31.x86_64
,则表示已安装;若输出
package httpd is not installed
,则需使用以下命令安装:
# dnf install httpd
2.3 配置防火墙
在启动和测试Apache Web服务器之前,需修改防火墙以允许Web服务器与外部通信。默认情况下,HTTP和HTTPS协议分别使用端口80和443,需根据使用的协议打开相应端口,并指定面向互联网的防火墙区域:
# firewall-cmd --permanent --zone=<zone> --add-port=80/tcp
# firewall-cmd --permanent --zone=<zone> --add-port=443/tcp
打开端口后,重新加载防火墙设置:
# firewall-cmd --reload
在云托管服务器上,可能还需在云控制台中为服务器实例启用相应端口。
2.4 端口转发
若Fedora 31系统位于受防火墙保护的网络中,需配置防火墙将端口80和/或端口443转发到Web服务器系统。不同防火墙和设备的配置方法不同,需参考相关文档进行配置。
2.5 启动Apache Web服务器
安装Apache服务器并配置防火墙后,需验证服务器是否运行,必要时启动服务器。可使用以下命令检查Apache
httpd
服务的状态:
# systemctl status httpd
若服务未运行,可使用以下命令启动:
# systemctl start httpd
若希望系统启动时自动启动Apache
httpd
服务,可运行以下命令:
# systemctl enable httpd
2.6 测试Web服务器
安装完成后,需验证Web服务器是否正常运行。若可访问服务器的桌面环境,可打开Web浏览器,在地址栏输入
http://127.0.0.1
,若配置正确,浏览器应加载相应页面。若无法访问桌面环境,可从同一局域网的其他系统或使用远程服务器的外部IP地址进行访问。
2.7 为域名配置Apache Web服务器
配置Web服务器以支持特定域名的步骤如下:
1. 进入
/etc/httpd/conf
目录,编辑
httpd.conf
文件:
cd /etc/httpd/conf
vim httpd.conf
-
在
httpd.conf文件中添加虚拟主机条目,示例如下:
<VirtualHost *:80>
ServerAdmin feedback@myexample.com
ServerName www.myexample.com
DocumentRoot /var/www/myexample
ErrorLog logs/myexample_error_log
CustomLog logs/myexample_access_log combined
</VirtualHost>
- `ServerAdmin`:定义网站管理员的电子邮件地址。
- `ServerName`:指定与该虚拟主机关联的域名。
- `DocumentRoot`:指定网站文件的存储位置。
- `ErrorLog` 和 `CustomLog`:分别指定错误日志和访问日志文件的位置。
-
创建网站文件目录并添加
index.html文件:
mkdir /var/www/myexample
vim /var/www/myexample/index.html
index.html
文件示例:
<html>
<title>Sample Web Page</title>
<body>
Welcome to MyExample.com
</body>
</html>
-
重启
httpd服务:
# systemctl restart httpd
- 打开浏览器,使用域名访问网站,验证服务器配置是否生效。
2.8 安全网站基础
本章前面创建的Web服务器和网站使用HTTP协议,数据以明文传输,存在安全风险。现代网站通常使用HTTPS协议,通过安全套接层(SSL)或传输层安全(TLS)建立安全的加密通信。
2.9 为Apache配置HTTPS
默认情况下,Apache服务器不包含实现安全HTTPS网站所需的模块,需安装
mod_ssl
模块:
# dnf install mod_ssl
安装完成后,重启
httpd
服务以加载新模块:
# systemctl restart httpd
使用以下命令检查模块是否已加载:
# apachectl -M | grep ssl_module
输出示例:
ssl_module (shared)
2.10 获取SSL证书
网站的SSL证书需从证书颁发机构(CA)获取,推荐从Let’s Encrypt获取免费证书,步骤如下:
1. 按照Let’s Encrypt网站的步骤下载并安装Certbot工具。
2. 运行以下命令生成并安装证书:
# certbot-auto --apache
-
按照提示输入电子邮件地址并接受服务条款,Certbot会列出
httpd.conf文件中找到的域名,选择要为其安装证书的网站。 -
Certbot会进行一些检查,然后获取并安装证书,同时在
/etc/httpd/conf目录下创建httpd-le-ssl.conf文件,包含安全虚拟主机条目。示例如下:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin feedback@myexample.com
ServerName www.myexample.com
DocumentRoot /var/www/myexample
ErrorLog logs/myexample_error_log
CustomLog logs/myexample_access_log combined
SSLCertificateFile /etc/letsencrypt/live/www.myexample.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.myexample.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
- Certbot会询问是否将未来的HTTP请求重定向到HTTPS,可根据需求选择。
- 安装证书后,可在浏览器中访问以下URL测试证书配置是否成功:
https://www.ssllabs.com/ssltest/analyze.html?d=www.myexample.com
若配置成功,SSL Labs报告将给出较高评分。
通过以上步骤,可在Fedora 31上进行容器管理和搭建Web服务器,同时实现HTTP和HTTPS配置,确保网站的正常运行和数据安全。
3. 容器管理与Web服务器搭建总结
3.1 容器管理总结
容器管理涉及多个方面,从容器的删除、构建到网络配置以及使用 Cockpit 进行可视化管理,每个环节都有其重要性和操作要点。以下是对容器管理相关操作的总结表格:
| 操作类型 | 操作步骤 | 示例命令 |
| — | — | — |
| 容器删除 | 停止容器后使用
podman rm
命令删除 |
# podman rm mycontainer2
|
| 基于现有镜像构建容器 | 使用
buildah from
命令基于指定镜像构建 |
$ buildah from docker://docker.io/library/fedora:31
|
| 从头构建容器 | 依次执行创建空容器、挂载文件系统、安装软件包、卸载文件系统、运行容器等步骤 | 见 1.2.2 节详细步骤 |
| 容器网络配置 | 查看主机和容器的网络配置,可修改 CNI 配置文件 |
# ip a
,修改
/etc/cni/net.d/87-podman-bridge.conflist
|
| 使用 Cockpit 管理容器 | 安装
cockpit-podman
模块,登录 Cockpit 下载镜像并运行容器 |
# dnf install cockpit-podman
|
下面是容器管理的 mermaid 流程图:
graph LR
A[容器操作] --> B[删除容器]
A --> C[构建容器]
C --> C1[基于现有镜像]
C --> C2[从头构建]
A --> D[网络配置]
A --> E[Cockpit 管理]
B --> B1[停止容器]
B1 --> B2[podman rm 命令]
C1 --> C11[buildah from 命令]
C2 --> C21[创建空容器]
C21 --> C22[挂载文件系统]
C22 --> C23[安装软件包]
C23 --> C24[卸载文件系统]
C24 --> C25[运行容器]
D --> D1[查看网络配置]
D1 --> D2[修改 CNI 配置文件]
E --> E1[安装 cockpit-podman]
E1 --> E2[登录 Cockpit]
E2 --> E3[下载镜像]
E3 --> E4[运行容器]
3.2 Web 服务器搭建总结
Fedora 31 上搭建 Web 服务器是一个系统的过程,涵盖了从前期准备到安全配置的多个步骤。以下是对 Web 服务器搭建操作的总结列表:
1.
配置要求
:明确所需的计算机、操作系统、Web 服务器、域名、名称服务器和 IP 地址。
2.
安装 Apache
:使用
rpm -q httpd
检查是否安装,未安装则使用
dnf install httpd
安装。
3.
防火墙配置
:打开 HTTP(端口 80)和/或 HTTPS(端口 443)端口,重新加载防火墙设置。
4.
端口转发
:根据网络环境配置防火墙进行端口转发。
5.
启动服务器
:检查并启动
httpd
服务,可设置开机自启。
6.
测试服务器
:使用 IP 地址或域名访问网站进行验证。
7.
域名配置
:编辑
httpd.conf
文件添加虚拟主机条目,创建网站文件目录和
index.html
文件,重启服务。
8.
安全配置
:安装
mod_ssl
模块,获取 SSL 证书并配置 HTTPS。
以下是 Web 服务器搭建的 mermaid 流程图:
graph LR
A[Web 服务器搭建] --> B[配置要求]
A --> C[安装 Apache]
A --> D[防火墙配置]
A --> E[端口转发]
A --> F[启动服务器]
A --> G[测试服务器]
A --> H[域名配置]
A --> I[安全配置]
B --> B1[准备计算机等资源]
C --> C1[检查是否安装]
C1 --> C2{是否安装}
C2 -- 否 --> C3[dnf install httpd]
D --> D1[打开端口]
D1 --> D2[重新加载防火墙]
E --> E1[配置端口转发]
F --> F1[检查服务状态]
F1 --> F2{是否运行}
F2 -- 否 --> F3[启动服务]
F2 -- 是 --> F4[设置开机自启]
G --> G1[使用 IP 或域名访问]
H --> H1[编辑 httpd.conf]
H1 --> H2[添加虚拟主机条目]
H2 --> H3[创建网站目录和文件]
H3 --> H4[重启服务]
I --> I1[安装 mod_ssl]
I1 --> I2[获取 SSL 证书]
I2 --> I3[配置 HTTPS]
4. 综合应用与注意事项
4.1 综合应用场景
在实际应用中,容器管理和 Web 服务器搭建可以结合使用。例如,可以使用容器化的方式部署 Web 服务器,将 Apache 服务器运行在容器中,这样可以提高服务器的可移植性和隔离性。具体步骤如下:
1. 使用 Buildah 构建一个包含 Apache 服务器的容器镜像。
- 基于 Fedora 31 镜像创建容器:
$ buildah from docker://docker.io/library/fedora:31
- 在容器中安装 Apache 服务器:
$ buildah run <container_name> dnf install httpd
- 配置容器中的 Apache 服务器,可参考 2.7 节的域名配置步骤。
- 提交容器为新的镜像:
$ buildah commit <container_name> apache-fedora-image
2. 使用 Podman 运行该容器镜像。
-
# podman run -d -p 80:80 apache-fedora-image
-
-d
表示在后台运行容器,
-p 80:80
表示将主机的 80 端口映射到容器的 80 端口。
4.2 注意事项
-
容器管理方面
:
- 在删除容器时,确保容器已停止,避免数据丢失或其他问题。
- 从头构建容器时,注意软件包的安装路径和依赖关系,确保容器能够正常运行。
- 修改 CNI 配置文件时,要谨慎操作,避免影响容器的网络连接。
-
Web 服务器搭建方面
:
- 配置防火墙时,要明确防火墙区域和端口的使用情况,避免安全漏洞。
- 获取 SSL 证书时,按照 Let’s Encrypt 的要求操作,确保证书的有效性和安全性。
- 在配置域名和虚拟主机时,要确保域名解析正确,文件路径和权限设置正确。
通过以上对容器管理和 Fedora 31 Web 服务器搭建的详细介绍和总结,希望能帮助读者更好地掌握相关技术,在实际应用中能够顺利完成容器的创建、管理以及 Web 服务器的搭建和配置。同时,要注意各个操作环节的要点和注意事项,确保系统的稳定性和安全性。
超级会员免费看
62

被折叠的 条评论
为什么被折叠?



