我开始尝试使用docker但是对于如何开发它以及它的用例有一些疑问。如果有人能指导我完成这些问题,我们将非常感激。
首先, 据我所知,docker主要用于在自定义环境中开发应用程序,从而避免了繁琐的安装过程。这最初是我的意图,为什么我想使用docker for。
我已经创建了一个成功构建的docker文件,它具有基于库/ gcc的基本C ++开发工具。我希望能够像在终端上那样在这个docker容器中进行开发。
我做的是从Dockerfile创建了一个docker镜像。 (我可以观察到它已成功创建)
docker build -t mydockerimage .
然后以分离模式运行docker。
docker run -d mydockerimage
此时,我会收到docker容器ID的通知。但是,当我检查输出:
时,docker容器似乎没有运行docker container ls
第一个问题,为什么我的docker容器没有运行?
据我了解,与docker容器交互的最简单方法如下:
docker exec -it <container_id_or_name> echo "Hello from container!"
这是真的吗?这是一个docker的用例,我可以在其中启动容器并在其上执行一些Linux命令吗?
此外,当我尝试执行没有sudo的docker命令时,我在/var/lib/docker.sock上获得了权限被拒绝。 我在这里缺少什么?
提前谢谢。
答案 0 :(得分:0)
您是否在dockerfile中提供了entrypoint或CMD?这将在容器内执行并使容器保持运行。您可以找到一些详细信息here。
简而言之。 Docker有一个默认入口点:/bin/sh -c
,但没有默认的CMD。
检查ubuntu的dockerfile。这有作为CMD的bash所以它正在执行/bin/sh -c bash
。
$ docker run -it ubuntu bash
root@9855e779cab2:/#
这将生成一个交互式shell,您可以在其中执行类似ubuntu的命令。如果退出容器,容器将停止运行。
要使容器保持运行,您可以使用-d
选项。它将在后台运行容器作为守护进程:
$ docker run -d -it ubuntu bash
2606ad8e095baa0237cc30e599a26a4d727d99d47392d779fb83cd50f1a39614
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2606ad8e095b ubuntu "bash" 18 seconds ago Up 17 seconds cranky_johnson
现在你可以在容器内exec
来进入&#34;进入内部&#34;容器并执行ubuntu命令。
$ docker exec -it 2606ad8e095b bash
root@2606ad8e095b:/#
当您退出容器时,它仍然在后台运行。 现在我们也可以执行你的命令:
$ docker exec -it 2606ad8e095b echo "Hello from container!"
Hello from container!
这将在容器中打开一个bash会话并回显该字符串。
我认为在您的情况下定义一些入口点(也可以是脚本)或CMD非常重要。当您只想在容器中使用bash时,可能需要与Ubuntu非常相似的东西。
此外,当我尝试执行没有sudo的docker命令时,我在/var/lib/docker.sock上获得了权限被拒绝。我在这里缺少什么?
这很正常。 Docker守护程序当前需要root权限。因此,您必须将rooter与root用户或具有root权限的用户一起使用,并且每次都必须添加sudo
。您可以将用户添加到泊坞窗组。每次守护程序启动时,它都会使docker组对Unix套接字的所有权进行读/写。这意味着当该用户位于docker组中时,您可以在不使用sudo的情况下使用docker。
将您的用户添加到docker group:
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
$ exit
ssh back or open new shell