在某些时候,我们除去容器内本身的打包好的程序,我们还会需要一些依赖服务,这些服务通常是挂载在一号进程上通过 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参数创建的容器将被赋予以下权限:
- 容器内的进程拥有主机 root 权限。
- 容器内的进程可以访问主机上的设备,包括串口、USB设备等。
- 容器内的进程可以执行一些高级操作,如加载内核模块、修改网络配置等。
centos:latest :是镜像名称,冒号后的是组别或者叫标签,
/usr/sbin/init:需要容器从外部加载的程序。这里就是 systemctl需要的服务名称。
然后我们就可以通过这个命令进入容器内部查看了。
docker exec -it test /bin/bash