跨cpu架构部署容器技术点:怎么将容器启动时的1号进程挂载到systemctl

在某些时候,我们除去容器内本身的打包好的程序,我们还会需要一些依赖服务,这些服务通常是挂载在一号进程上通过 systemctl这个控制器服务来维护。
但因为docker的最小工作原则,info进程,或者说 systemctl控制程序,不会默认包含在docker中的。

  • 我们可以使用top 命令查看 依赖于 官方 镜像构建的容器,
    • 通过 exec命令进入容器内,
    • 使用top 命令查看 在运行进程,并没有 info 进程或者,systemctl 相关字样。他只有两个进程,bash 和 top

为了启动一些服务,如 redis 、mysql 这些。我们可以使用官方打包好的镜像,但如果你想更加定制化。

docker 也提供了对应的方式:

使用 -ti 参数,将 外部的init 服务,传入到容器内。具体如下:
docker run -tid --name test --privileged=true centos:latest /usr/sbin/init

  • docker run :是启动容器命令

  • -tid :是docker run 命令的参数,

  • --name test:是指定容器名称,是容器 UID的代称。

  • --privileged=true:是Docker中的一个参数,用于授予容器的特权权限。当一个容器被设置为特权容器时,它将拥有与主机操作系统相同的权限,可以执行一些高级操作,如访问主机设备、加载内核模块等。

    使用--privileged=true参数创建的容器将被赋予以下权限:

    1. 容器内的进程拥有主机 root 权限。

    2. 容器内的进程可以访问主机上的设备,包括串口、USB设备等。

    3. 容器内的进程可以执行一些高级操作,如加载内核模块、修改网络配置等。

  • centos:latest :是镜像名称,冒号后的是组别或者叫标签,

  • /usr/sbin/init:需要容器从外部加载的程序。这里就是 systemctl需要的服务名称。

然后我们就可以通过这个命令进入容器内部查看了。
docker exec -it test /bin/bash

你可能感兴趣的:(Docker,Liunx,架构,docker,linux)