我正在关注CoreOS Docker 文档其中提到使用以下命令启动容器:
docker run someImageName /bin/somebinary
图像在哪里someImageName
。当 /bin/somebinary 退出时,图像将不再运行。
我只想运行一个图像,而不指定要运行的任何二进制文件。相反,我只是想运行通常在映像操作系统内运行的服务(例如 systemd / sysvinit)。
这似乎是人们想用 Docker 做的最常见的事情,但尝试在没有命令的情况下运行映像会返回:
2014/02/05 14:49:19 Error: create: No command specified
如何启动 Docker 容器并运行完整的操作系统,而不是指定命令?
答案1
正如这里所记录的,您/sbin/init
只需像任何其他从单用户模式启动到多用户模式的 unix 一样运行命令即可。
https://stackoverflow.com/questions/19332662/start-full-container-in-docker
容器可以是功能齐全的操作系统,但不一定非要这样(虚拟机也不是,只是配置和管理起来更复杂)。
我想说 Docker 的全部意义在于让应用程序容器变得简单,这样你就只需要配置一个应用程序,而不是整个操作系统。
答案2
答案3
要在容器中运行完整的操作系统,请创建以下 Dockerfile:
FROM fedora:25
CMD /sbin/init
然后构建并启动容器并在其中进入 shell 来探索其中运行的服务:
docker build -t os .
docker run -d --privileged --name os os
docker exec -it os bash
容器内有完整的 systemd 服务。非常棒。
答案4
docker pull ubuntu
只需从同一图像运行多次即可。将创建新容器,然后可以启动和停止每个容器,每个容器都保存自己的配置。为了方便起见,最好使用“--name”为每个容器命名。
Fi:
docker run --name MyContainer1 <ubuntu image>
docker run --name MyContainer2 <ubuntu image>
docker run --name MyContainer3 <ubuntu image>
就是这样。
$ docker ps
CONTAINER ID IMAGE CREATED STATUS NAMES
a7e789711e62 67759a80360c 12 hours ago Up 2 minutes MyContainer1
87ae9c5c3f84 67759a80360c 12 hours ago Up About a minute MyContainer2
c1524520d864 67759a80360c 12 hours ago Up About a minute MyContainer3
此后,您的容器就永久创建了,您可以像虚拟机一样启动和停止它们。
docker start MyContainer1
进入容器并做你想做的事:
docker exec -it MyContainer1 bash