sock 文件方式控制宿主机_在docker容器中调用和执行宿主机的docker操作

本文关键详细介绍了在docker容器中启用和实行宿主机的docker实际操作,具备非常好的实用价值,期待对大伙儿有一定的协助。一起追随我回来瞧瞧吧

最先这一贴子,送给docker初学者。自然如果你是一个高手,原文中分隔线后的操作步骤也是一种构思。

最先说一下,怎样在docker中实行宿主机的docker实际操作,大家管它叫docker in docker。

对于为何要在docker中实际操作宿主机的docker,优势显而易见,你既能够将你的实际要求容器化布署,又无需立即在宿主机上安裝(假定大家没有办法在docker中实际操作宿主机的docker,那麼大家只有将那样的软件系统立即安裝到宿主机上,那样显而易见是不利管理方法和维护保养的)。

完成这类要求,实际上比较简单,你只必须将docker宿主机的docker文件和docker.sock文件挂载到容器中就可以,实际为:

-v /var/run/docker.sock:/var/run/docker.sock

-v /usr/bin/docker:/usr/bin/docker

你需要先找到你宿主机的docker和docker.sock部位,别挂载不对,规范的Linux一切正常而言便是上边的部位。

你一直在起动docker容器的情况下,将所述2个文件一切正常挂载后,就可以在docker中实行例如 docker images 这些那样的指令了。

假如出現难题 permission denied

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

…………………………………………………………

dial unix /var/run/docker.sock: connect: permission denied

解决方案

在容器所属的宿主机上立即给 docker.sock 777管理权限,指令 chmod 777 docker.sock

华丽的分隔线

下边是对于群辉系统软件,你无需太关注这一系统软件是啥,总而言之就是这个系统软件在docker层面有一些独有的难题,造成 你不能那么无拘无束,所以我选用了一种随机应变的方式来解决(一种构思,毛遂自荐)先描述一下现况:

该系统软件出示了docker的UI可视化工具,我们在这一专用工具上能够开展基本的挂载实际操作,可是如果我们想挂载上边的docker和docker.sock文件,就不行,先看一下截屏:

说一下图上UI实际操作的局限!

群辉官方网开展了限定,你能挑选的文件,是不太可能挑选到 /usr/ /va/ 等那样系统软件方面的文件的,也就是我们无法立即挂载docker和docker.sock文件。

做 ln -s 软连接是不是行得通?

经试着,先根据ssh命令行至jenkins文件夹中建立两个软连接(将docker和docker.sock开展软连接),随后返回群辉的UI页面,仍然不可以挑选(由于群辉立即屏蔽掉软连接文件,你是看不见的)

那麼如何解决呢?

我的方式是(软连接的方式随机应变一下):

1、在图上的jenkins文件目录下随意建立两个文件 docker 和 docker.sock 文件(取名恰当就可以)

2、随后在docker点一下“加上文件”按键,一切正常挑选这两个文件,开展挂载,你彻底能够一切正常挂载而且进行别的配备,配备结束后,临时不必起动docker容器。

3、登陆ssh进到群辉,将jenkins文件目录中不久建立的两个文件删掉掉,随后把docker和docker.sock源文件建立软连接到jenkins中。

root@test:cd /volume1/docker/jenkins/

root@test:rm -rf docker docker.sock

root@test:ln -s /run/docker.sock /volume1/docker/jenkins/docker.sock

root@test:ln -s /usr/local/bin/docker /volume1/docker/jenkins/docker

root@test:/volume1/docker/jenkins# ll

total 8

drwxrwxrwx 1 Nuggets users 96 Jun 6 11:22 .

drwxr-xr-x 1 root root 188 May 30 19:29 ..

lrwxrwxrwx 1 root root 21 Jun 6 11:22 docker -> /usr/local/bin/docker

lrwxrwxrwx 1 root root 16 Jun 6 11:21 docker.sock -> /run/docker.sock

drwxrwxrwx 1 shanhongyu users 24 Jun 1 11:07 java_home

drwxrwxrwx 1 Nuggets users 4476 Jun 6 11:00 jenkins_home

drwxrwxrwx 1 shanhongyu users 82 Jun 1 11:12 maven_home

4、随后返回群辉UI,起动容器,那样就极致了。

(群辉不许你选软连接,可是linux和docker实质上是能够立即挂载软连接的)

填补专业知识:应用docker在镜像系统中运作宿主机程序流程

docker run指令用以在新容器中运行命令。docker run指令最先在特定的印象上建立一个可写容器层,随后应用特定的指令起动它。

换句话说,docker run等同于API /containers/create 和 /containers/(id)/start。

能够应用docker start重启终止的容器,并应用其全部此前的变更详细。 客户程序docker ps -a查询全部容器的目录。

使用方法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Shell

事例

分派名字并分派伪TTY(-name,-it)

$ docker run --name test -it debian

root@d6c0fe130dba:/# exit 13

$ echo $?

13

$ docker ps -a | grep test

d6c0fe130dba debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test

Shell

此实例应用debian:latest印象运作一个名叫test的容器。 -it 标示Docker分派联接到容器的stdin的伪TTY; 在容器中建立一个互动式的bash shell。 在该实例中,bash shell根据键入exit 13撤出。该撤出编码传送给docker run的调用者,并纪录在检测容器的数据库中。

捕捉容器ID(-cidfile)

$ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"

Shell

这将建立一个容器并打印测试到控制面板。--cidfile标示使Docker试着建立一个新文件,并将容器ID载入它。假如文件早已存有,Docker将回到一个不正确。 Docker运作撤出时,Docker将关掉此文件。

详细的容器作用(-privileged)

$ docker run -t -i --rm ubuntu bash

root@bc338942ef20:/# mount -t tmpfs none /mnt

mount: permission denied

Shell

这将失灵,由于默认设置状况下,大部分潜在性的风险核心作用被丢掉; 包含cap_sys_admin(它是挂载文件系统软件需要的)。 可是,--privileged标示将容许它运作:

$ docker run -t -i --privileged ubuntu bash

root@50e3f57e16e6:/# mount -t tmpfs none /mnt

root@50e3f57e16e6:/# df -h

Filesystem Size Used Avail Use% Mounted on

none 1.9G 0 1.9G 0% /mnt

Shell

设定工作中文件目录[-w]

$ docker run -w /path/to/dir/ -i -t ubuntu pwd

Shell

-w容许在文件目录中运行命令,这儿是/path/to/dir/。 假如途径不会有,则在容器内建立。

为每一个容器设定储存驱动软件选择项

$ docker run -it --storage-opt size=120G fedora /bin/bash

Shell

挂载tmpfs(-tmpfs)

$ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image

Shell

--tmpfs标示应用rw,noexec,nosuid,size = 65536k选择项将一个空tmpfs装车到容器中。

挂载卷(-v,-read-only)

$ docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd

Shell

-v标示将各项工作文件目录装车到容器中。 -w容许在各项工作文件目录中运行命令,将文件目录更改成pwd回到的值。因此 这一组成应用容器运行命令,但在各项工作文件目录中。

$ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash

Shell

当关联卷的服务器文件目录不会有时,Docker将全自动在服务器上建立此文件目录。 在上面的实例中,Docker将在起动容器以前建立/doesnt/exists文件夹。

$ docker run --read-only -v /icanwrite busybox touch /icanwrite/here

Shell

卷能够与--read-only组成应用,以操纵容器载入文件的部位。 --read-only标示将容器的根文件系统软件挂载为写保护严禁载入容器的特定卷之外的部位。

之上这篇在docker容器中启用和实行宿主机的docker实际操作便是我共享给大伙儿的所有内容了,期待能给大伙儿一个参照,也期待大伙儿多多的适用大家。

热搜词

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值