17、Fedora 31:容器管理与Web服务器搭建指南

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
  1. 查看容器信息:
# buildah containers

输出示例:

CONTAINER ID BUILDER IMAGE ID IMAGE NAME CONTAINER NAME
9b138eee7fa6 * scratch working-container
  1. 挂载容器文件系统:
# buildah mount working-container

输出示例:

/var/lib/containers/storage/overlay/20b46cf0e2994d1ecdc4487b89f93f6ccf41f72788da63866b6bf80984081d9a/merged
  1. 使用 dnf 命令安装软件包:
# dnf install --releasever=31 --installroot <container_fs_mount> bash coreutils dnf

其中 <container_fs_mount> buildah mount 命令输出的挂载路径。
5. 卸载容器文件系统:

# buildah umount working-container
  1. 运行容器并进入 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
  1. 登录Cockpit,选择 Podman Containers 页面。
  2. 下载镜像:点击 Get new image 按钮,输入关键字搜索并下载所需镜像。
  3. 运行容器:选择下载好的镜像,点击 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
  1. 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`:分别指定错误日志和访问日志文件的位置。
  1. 创建网站文件目录并添加 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>
  1. 重启 httpd 服务:
# systemctl restart httpd
  1. 打开浏览器,使用域名访问网站,验证服务器配置是否生效。

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
  1. 按照提示输入电子邮件地址并接受服务条款,Certbot会列出 httpd.conf 文件中找到的域名,选择要为其安装证书的网站。
  2. 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>
  1. Certbot会询问是否将未来的HTTP请求重定向到HTTPS,可根据需求选择。
  2. 安装证书后,可在浏览器中访问以下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 服务器的搭建和配置。同时,要注意各个操作环节的要点和注意事项,确保系统的稳定性和安全性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值