前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >直接使用runc 部署Nginx

直接使用runc 部署Nginx

作者头像
运维开发王义杰
发布2023-08-16 19:32:55
发布2023-08-16 19:32:55
39300
代码可运行
举报
运行总次数:0
代码可运行

使用 runc`部署 Nginx 需要几个步骤。首先,确保你已经安装了 runc。接下来,请按照以下步骤操作:

1. 创建容器根文件系统(rootfs):

下载并解压 Nginx 容器镜像。可以使用 Docker 从 Docker Hub 获取一个官方的 Nginx 镜像,并将其导出为一个 rootfs:

代码语言:javascript
代码运行次数:0
复制
docker pull nginx:latest
docker create --name nginx-container nginx:latest
docker export nginx-container | tar -C /opt/nginx/rootfs -xvf -
docker rm nginx-container

这将在 /opt/nginx/rootfs目录中创建一个包含 Nginx 及其依赖项的文件系统。

2. 创建容器配置文件:

为容器创建一个 config.json文件。你可以使用 runc spec 命令生成一个默认的配置文件模板:

代码语言:javascript
代码运行次数:0
复制
cd /opt/nginx/
runc spec

打开生成的 config.json 文件,并进行以下更改:

  • 设置 root.path 属性的值为 "rootfs"。
  • 在 process.args 中设置正确的 Nginx 可执行文件路径和必要的选项,如 -g "daemon off;"。
  • 确保 process.env 包含正确的环境变量,如 PATH 和 LD_LIBRARY_PATH。
  • 将 terminal 属性设置为 false。
  • (可选)如果您希望使用主机网络,请删除 network 命名空间

配置示例:

代码语言:javascript
代码运行次数:0
复制
{
        "ociVersion": "1.0.2-dev",
        "process": {
                "terminal": false,
                "user": {
                        "uid": 101,
                        "gid": 101
                },
                "args": [
                        "nginx","-g","daemon off;"
                ],
                "env": [
                        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                        "TERM=xterm"
                ],
                "cwd": "/",
                "capabilities": {
                        "bounding": [
                                "CAP_AUDIT_WRITE",
                                "CAP_KILL",
                                "CAP_NET_BIND_SERVICE"
                        ],
                        "effective": [
                                "CAP_AUDIT_WRITE",
                                "CAP_KILL",
                                "CAP_NET_BIND_SERVICE"
                        ],
                        "permitted": [
                                "CAP_AUDIT_WRITE",
                                "CAP_KILL",
                                "CAP_NET_BIND_SERVICE"
                        ],
                        "ambient": [
                                "CAP_AUDIT_WRITE",
                                "CAP_KILL",
                                "CAP_NET_BIND_SERVICE"
                        ]
                },
                "rlimits": [
                        {
                                "type": "RLIMIT_NOFILE",
                                "hard": 1024,
                                "soft": 1024
                        }
                ],
                "noNewPrivileges": true
        },
        "root": {
                "path": "rootfs",
                "readonly": false
        },
        "hostname": "runc",
        "mounts": [
                {
                        "destination": "/proc",
                        "type": "proc",
                        "source": "proc"
                },
                {
                        "destination": "/dev",
                        "type": "tmpfs",
                        "source": "tmpfs",
                        "options": [
                                "nosuid",
                                "strictatime",
                                "mode=755",
                                "size=65536k"
                        ]
                },
                {
                        "destination": "/dev/pts",
                        "type": "devpts",
                        "source": "devpts",
                        "options": [
                                "nosuid",
                                "noexec",
                                "newinstance",
                                "ptmxmode=0666",
                                "mode=0620",
                                "gid=5"
                        ]
                },
                {
                        "destination": "/dev/shm",
                        "type": "tmpfs",
                        "source": "shm",
                        "options": [
                                "nosuid",
                                "noexec",
                                "nodev",
                                "mode=1777",
                                "size=65536k"
                        ]
                },
                {
                        "destination": "/dev/mqueue",
                        "type": "mqueue",
                        "source": "mqueue",
                        "options": [
                                "nosuid",
                                "noexec",
                                "nodev"
                        ]
                },
                {
                        "destination": "/sys",
                        "type": "sysfs",
                        "source": "sysfs",
                        "options": [
                                "nosuid",
                                "noexec",
                                "nodev",
                                "ro"
                        ]
                },
                {
                        "destination": "/sys/fs/cgroup",
                        "type": "cgroup",
                        "source": "cgroup",
                        "options": [
                                "nosuid",
                                "noexec",
                                "nodev",
                                "relatime",
                                "ro"
                        ]
                }
        ],
        "linux": {
                "resources": {
                        "devices": [
                                {
                                        "allow": false,
                                        "access": "rwm"
                                }
                        ]
                },
                "namespaces": [
                        {
                                "type": "pid"
                        },
                        {
                                "type": "ipc"
                        },
                        {
                                "type": "uts"
                        },
                        {
                                "type": "mount"
                        }
                ],
                "maskedPaths": [
                        "/proc/acpi",
                        "/proc/asound",
                        "/proc/kcore",
                        "/proc/keys",
                        "/proc/latency_stats",
                        "/proc/timer_list",
                        "/proc/timer_stats",
                        "/proc/sched_debug",
                        "/sys/firmware",
                        "/proc/scsi"
                ],
                "readonlyPaths": [
                        "/proc/bus",
                        "/proc/fs",
                        "/proc/irq",
                        "/proc/sys",
                        "/proc/sysrq-trigger"
                ]
        }
}

3. 启动容器:

使用 `runc` 命令启动 Nginx 容器:

代码语言:javascript
代码运行次数:0
复制
cd /opt/nginx
sudo runc run nginx-container

这将在前台启动一个名为 `nginx-container` 的 Nginx 容器实例。现在可以访问 Nginx 服务器了

4. 停止容器:

代码语言:javascript
代码运行次数:0
复制
runc kill nginx-container

5.删除容器:

runc delete nginx-container

总结

runc 是一个轻量级的容器运行时,允许您轻松部署和管理单个容器。本文介绍了如何使用 runc 创建、运行、停止和删除 Nginx 容器,以及如何查看容器日志、配置容器网络和管理容器数据。尽管我们主要关注了 Nginx 容器,但这些方法同样适用于其他类型的容器。请记住,在实际生产环境中,更复杂的容器编排工具(如 Docker 和 Kubernetes)可能更适合管理多个容器和服务。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发王义杰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5.删除容器:
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档