如何在docker图像中进行开发

时间:2018-03-19 13:40:53

标签: docker dockerfile

我开始尝试使用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上获得了权限被拒绝。 我在这里缺少什么?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您是否在dockerfile中提供了entrypointCMD?这将在容器内执行并使容器保持运行。您可以找到一些详细信息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