精华内容
下载资源
问答
  • 首先这个帖子,献给...至于为什么要在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容器的时候,将上述两个文件正常挂载后,就可以在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文件夹中创建2个软连接(将docker和docker.sock进行软连接),然后回到群辉的UI界面,依然不能选择(因为群辉直接屏蔽了软连接文件,你是看不到的)

    那么如何解决呢?

    我的方法是(软连接的方法变通一下):

    1、在图上的jenkins目录下随便创建2个文件 docker 和 docker.sock 文件(命名正确即可)

    2、然后在docker点击“添加文件”按钮,正常选择这2个文件,进行挂载,你完全可以正常挂载并且完成其他配置,配置完毕后,暂时不要启动docker容器。

    3、登录ssh进入群辉,将jenkins目录中刚刚创建的2个文件删除掉,然后把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操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    展开全文
  • 首先这个帖子,献给docker...至于为什么要在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容器的时候,将上述两个文件正常挂载后,就可以在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文件夹中创建2个软连接(将docker和docker.sock进行软连接),然后回到群辉的UI界面,依然不能选择(因为群辉直接屏蔽了软连接文件,你是看不到的)

    那么如何解决呢?
    我的方法是(软连接的方法变通一下):
    1、在图上的jenkins目录下随便创建2个文件 docker 和 docker.sock 文件(命名正确即可)
    2、然后在docker点击“添加文件”按钮,正常选择这2个文件,进行挂载,你完全可以正常挂载并且完成其他配置,配置完毕后,暂时不要启动docker容器。
    3、登录ssh进入群辉,将jenkins目录中刚刚创建的2个文件删除掉,然后把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本质上是可以直接挂载软连接的)

    (END)

    展开全文
  • 至于为什么要在docker中操作宿主机的docker,优点不言而喻,你既可以将你的具体需求容器化部署,又不用直接在宿主机上安装(假设我们没有办法在docker中操作宿主机的docker,那么我们只能将这样的软件程序直接安装到...
  • 首先说一下,如何在docker中执行宿主机的docker操作,我们管它docker in 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容器的时候,将上述两个文件正常挂载后,就可以在docker中执行诸如 docker images 等等这样的命令了。

    展开全文
  • 这个新建的网络就subnet了,可能有的同学会问了:“啊,老师老师,那不是有一个bridge了吗,为什么还有新建一个呢?” 因为docker不让我们用默认的。。。 下面就是把容器接进这个子网,命令的格式为: docker ...

    docker默认是不允许容器互访的,想让他们互访需要一个叫做bridge的东西。

    先看一下都有什么网络:

    docker network ls

    下面新建一个出来:

    docker network create subnet 

    这个新建的网络就叫subnet了,可能有的同学会问了:“啊,老师老师,那不是有一个bridge了吗,为什么还有新建一个呢?”

    因为docker不让我们用默认的。。。

    下面就是把容器接进这个子网,命令的格式为:

    docker run -it --name 容器名 --network 网络名(subnet啦) --network-alias 网络别名 镜像名

    有点复杂是吧 我举个栗子:

    docker run -it --name my_ubuntu --network subnet --network-alias my_ubuntu 
    --gpus all -p 5000:5000 ubuntu_for_server:v1.0 

    另外一个容器是:

    docker run -it --name my_ubuntu2 --network subnet --network-alias my_ubuntu2 
    --gpus all -p 5001:5001 ubuntu_for_server2:v1.0 

    这样就把两个容器都打开了,这个时候你可以用ping my_ubuntu去测试能不能连通第一个容器。

    还有就是比如需要在代码里面调用第一个容器的flask服务,那么可以http://my_ubuntu:5000/api/xxxxx这样去调用啦 那个网络别名当做ip来用,很方便。

    展开全文
  • 什么叫容器?

    2020-04-11 16:56:57
    容器就是将软件和依赖,一起打包的技术,解决了在不同环境下,运行环境有差异的...容器是基于paas的云服务,可以通过端口映射到宿主机,让外部用户可以访问容器服务,每个宿主机上,可以跑很多容器服务,互不干涉 ...
  • 防火墙结构之双重宿主主机结构

    千次阅读 2019-11-26 21:14:07
    目录什么叫双重宿主主机?原理解释如何提供服务?注意事项 什么叫双重宿主主机? 双重宿主主机又称为堡垒主机,是一台至少配有两个网络接口的主机,它可以充当与这些接口相连的网络之间的路由器,在网络之间发送...
  • 一、交叉编译的概念 1.交叉编译是什么 交叉编译:是指在一个平台下生成另外一个平台的可执行代码。在window上面编译C51代码,并编译成可执行文件,如:xx.hex。 2.编译是什么 ...4.什么叫宿主机(host)
  • 一、什么是交叉编译: 程序员编辑的代码是以人的思维模型为基础的,这并不能被机器直接识别并执行,所以必须要通过一定的...第二种则是在一种设备上进行编辑、编译(宿主机),而生成的执行程序却要能够在另一种设...
  • 对业务系统的监控 No.118

    万次阅读 2019-04-30 17:11:14
    本文转载于公众号“一名大蕉的程序员” 这篇文章是写给想对目前的业务系统进行监控但是又不知道从何入手的小伙伴看的,又或者是对于现有监控机制的一个反思,...cp1 : 业务系统宿主机监控 现在一般系统都...
  • 认识编译

    2017-12-25 18:42:00
    1.1什么叫编译程序 源语言诸如Java、C等这样高级的语言,目标语言如汇编语言、或机器语言等“低级语言”,这样的一个程序是翻译程序。 专门用于帮助程序开发和调试的编译程序成为诊断编译程序,着重于提高目标代码...
  • 016交叉工具链

    2016-05-19 17:50:00
    1、什么是交叉工具链:  从两个层次理解,第一个层次,交叉工具,第二个层次,... 在这个模型中,有宿主机,目标机(开发板),宿主机和目标机的硬件平台是不一样的,宿主机一般都是X86平台,目标机有ARM等,X86很...
  • Hadoop学习笔记1

    千次阅读 2017-02-02 22:02:28
    Hadoop部署方式 本地模式 ...所以不同服务器只是上面跑的进程(或者说程序)不同,我们是根据它们跑的进程来命名它们分别叫什么服务器的。 宿主机(windows)和客户机(linux)之间通信 host-only:宿主机
  • Vhost/Virtio是一种半虚拟化的设备抽象接口规范, 在Qemu和KVM中的得到了广泛的应用,在客户机操作系统中实现的前端驱动程序一般直接Virtio, 在宿主机实现的后端驱动程序称为Vhost。与宿主机纯软件模拟I/O相比,...
  • 因为docker的容器与宿主机共享系统核心,所以如果容器被攻陷呢么宿主机将受到牵连。 TLS TLS 全称为Transport Layer Security,意指传输层安全,是解决网络安全的重量级武器。传输层安全最早由网景公司所开发,那时...
  • Vhost/Virtio是一种半虚拟化的设备抽象接口规范, 在Qemu和KVM中的得到了广泛的应用,在客户机操作系统中实现的前端驱动程序一般直接Virtio, 在宿主机实现的后端驱动程序称为Vhost。与宿主机纯软件模拟I/O相比,...
  • TFTP与NFS服务器配置

    2017-02-02 16:32:27
    首先要介绍一下交叉开发,交叉开发有两个概念,一个是宿主机(产生嵌入式软件的机器,如pc机),目标机(运行嵌入式软件的机器,如开发板),宿主机产生嵌入式软件,通过一些机制下载到目标机上运行,通过什么样的...
  • Vhost/Virtio是一种半虚拟化的设备抽象接口规范, 在Qemu和KVM中的得到了广泛的应用,在客户机操作系统中实现的前端驱动程序一般直接Virtio, 在宿主机实现的后端驱动程序称为Vhost。与宿主机纯软件模拟I/O相比,...
  • 交叉工具链

    2017-10-19 21:16:53
    什么是交叉工具链在编译软件的时候,会用到(链接)一些平台相关的类库,如果...Ⅱ嵌入式开发模型——交叉开发在嵌入式开发过程中有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运
  • 以上命令均在宿主机上操作。 2.数据卷 上述两种数据交互的方式均属于手动操作,现在使用-v挂载数据卷,即可实现自动同步数据。 2.1什么是数据卷? 数据卷,又数据盘,在Linux操作系统下,数据卷就是一个文件目录...
  • 宕机迁移

    千次阅读 2019-08-13 10:20:44
    收到了云服务厂商的宕机迁移短信,怎么办? 一、什么是宕机迁移? 宕机迁移是阿里云提供的物理机宕机保护用户手段之一,指部署在... (也叫宿主机实例服务中断)二、出现了宕机迁移我该怎么办,如何尽快恢复应用?...
  • 公平来答。很多这样的问题,上来有人就会甩评测...有条件你可以自己买台专用宿主机搭个争抢的环境,去看看什么叫Noisy neighbor。给大家推荐个帖子,说的很详细(2018云计算最新评测:CPU稳定性背后的真相)。 你们觉
  • docker安装mysql

    千次阅读 2021-01-02 17:05:53
    容器中的文件,映射到宿主机。 mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf 创建*.cnf 在/root/mysql/conf中创建 *.cnf 文件(叫什么都行) touch my.cnf 启动docker docker run -p 3306:3306...
  • 在学习linux基础的时候,...虚拟机使用宿主机的 硬件资源,拥有真实计算机的绝大多数功能。你可以在虚拟机中安装虚拟机软件所支持的操作系统,比如你可以在 vm 虚拟机中安 装 linux,也可以在 vm 虚拟机中安装 ...
  • 1.1 什么叫编译程序 理解、记忆以下概念!!! 翻译程序:能够把某一种语言程序转换成另一种等价的语言程序的程序 编译程序:把高级程序语言转换成等价的低级程序语言的翻译程序是编译程序 翻译程序=编译程序+解释...
  • 交叉编译调试环境建立在宿主机(也就是你的电脑)上,对于的开发板目标板。要完全手工的建立针对某特定的目标板的交叉编译环境是一个非常麻烦的过程。有些人会问,为什么需要建立特定的环境,从网上下载一个通用的...
  • 在学习linux基础的时候,...虚拟机使用宿主机的硬件资源,拥有真实计算机的绝大多数功能。你可以在虚拟机中安装虚拟机软件所支持的操作系统,比如你可以在 vm 虚拟机中安装 linux,也可以在 vm 虚拟机中安装 window...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

什么叫宿主机