精华内容
下载资源
问答
  • $ docker export 1e560fca3906 > ubuntu.tar
  • docker容器与本机文件交互

    千次阅读 2019-03-24 16:05:56
    1.如何从docker容器中下载文件: docker cp container_created:path <...2.如何将文件从本机上传到docker容器 docker cp <path> container_created:path 例子: $docker ps CONTAINER ID IMA...

    1.如何从docker容器中下载文件:

    docker cp container_created:path <path>
    

    其中:<path>为本地要存储的路径。
    2.如何将文件从本机上传到docker容器

    docker cp <path> container_created:path
    

    例子:

    $docker ps
    CONTAINER ID        IMAGE                                         COMMAND             CREATED 
            STATUS              PORTS               NAMES
     266f4acef99b        reg.docker.alibaba-inc.com/alibase/alios7u2   "/sbin/init"        4 hours ago         Up 4 hours
    
    $docker cp 266f4:/root/feedback_venv/feedback_venv.zip /Users/Downloads/
    
    展开全文
  • docker上运行python容器与本机carla交互安装docker开始安装创建python镜像并运行容器 安装docker 开始安装 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本: $ sudo apt-get remove docker ...

    docker上运行python容器与本机carla交互

    安装docker

    参考docker官方文档

    开始安装

    由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:

    $ sudo apt-get remove docker docker-engine docker-ce docker.io
    

    更新apt包索引:

    $ sudo apt-get update
    

    安装以下包以使apt可以通过HTTPS使用存储库(repository):

    $ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
    

    添加Docker官方的GPG密钥:
    #这里官方文档没有加sudo,一开始一直没成功。

    $ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    

    使用下面的命令来设置stable存储库:

    $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    

    再更新一下apt包索引:

    $ sudo apt-get update
    

    安装最新版本的Docker CE:

    $ sudo apt-get install docker-ce docker-ce-cli containerd.io
    

    Ubuntu18.04可以直接安装最新版,Ubuntu16.04在这里依赖出现了问题

    下列软件包有未满足的依赖关系:
     containerd.io : 依赖: libseccomp2 (>= 2.4.0) 但是 2.2.3-3ubuntu3 正要被安装
     docker-ce : 依赖: libseccomp2 (>= 2.3.0) 但是 2.2.3-3ubuntu3 正要被安装
                 推荐: aufs-tools 但是它将不会被安装
                 推荐: cgroupfs-mount 但是它将不会被安装 或
                         cgroup-lite 但是它将不会被安装
                 推荐: pigz 但是它将不会被安装
    E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
    

    可以选择指定低版本:

    sudo apt install docker-ce=17.03.2~ce-0~ubuntu-xenial 
    

    如果你是当安装libltdl7报错如下:

    Depends: libseccomp2 (>= 2.3.0) but 2.2.3-3ubuntu3 is to be installed
                 Recommends: aufs-tools but it is not going to be installed
    

    只需要:

    apt-get install -y libltdl7 libseccomp2
    

    安装完成,验证docker
    通过运行hello-world映像来验证Docker Engine是否已正确安装:

    $ sudo docker run hello-world
    

    出现Hello from Docker!,安装成功。
    在这里插入图片描述
    配置docker

    sudo usermod -aG docker 用户名   //获得权限
    

    配置完重启docker服务:

    sudo service docker restart
    

    创建python镜像并运行容器

    通过Dockerfile创建docker镜像,新建一个docker-file文件夹并创建Dockerfile文件,requirements.txt文件,将gym-carla文件夹打包放入文件夹。
    在这里插入图片描述
    在Dockerfile文件写入以下内容:

    FROM python:3.6
    
    MAINTAINER wangpeng
    
    WORKDIR /app
    COPY . /app
    
    RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
      
    
    CMD ["/bin/bash"]
    

    requirements.txt文件写入:

    gym==0.12.5
    pygame==1.9.6
    scikit-image==0.16.2
    

    在docker-file文件夹打开终端并创建镜像,镜像名为gym-docker:0.1,注意后面有一个.与镜像名之间有空格。

    wang@wang-m920t:~/docker-file$ docker build -t gym-docker:0.1 .
    

    在这里插入图片描述
    成功!
    运行容器:

    docker run -it gym-docker:0.1
    

    在这里插入图片描述
    解压gym.tar.gz得到gym-carla文件夹。

     tar -xzvf gym.tar.gz 
    

    https://github.com/cjy1992/gym-carla按照gym-carla配置一下环境,python包已经安装好了。

    pip install -e .
    

    gym-carla要用carla里的carla-0.9.6-py3.5-linux-x86_64.egg文件,现在打开另一个终端将这个文件上传给docker容器。79c04e667618是现在运行的容器名。将该文件复制到了79c04e667618的/app目录下。

    docker cp /home/wang/CARLA_0.9.6/PythonAPI/carla/dist/carla-0.9.6-py3.5-linux-x86_64.egg 79c04e667618:/app
    

    写入python环境变量并source ~/.bashrc使生效。

    echo export PYTHONPATH=$PYTHONPATH:/app/carla-0.9.6-py3.5-linux-x86_64.egg >> ~/.bashrc 
    

    运行gym-carla中的test.py,有一个错误:
    在这里插入图片描述
    缺少库文件。
    下载该文件:

    wget https://jpegclub.org/support/files/jpegsrc.v8d1.tar.gz
    

    解压:

    tar -xzvf jpegsrc.v8d1.tar.gz 
    

    进入该文件夹编译安装:

    ./configure
     make
     make install
     make test
    

    写入环境变量:

    echo export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib >> ~/.bashrc
    source ~/.bashrc
    

    再次运行test.py
    在这里插入图片描述
    默认连接本地carla服务,找不到。查看docker ip:
    在这里插入图片描述
    修改代码:
    vim gym-carla/gym_carla/envs/carla_env.py
    在这里插入图片描述
    将第88行里的localhost改为172.17.0.1。保存退出。
    没有vim,使用apt安装,apt update,apt install vim。
    在本机运行carla文件,./CarlaUE4.sh
    运行容器test.py
    在这里插入图片描述
    连接成功!
    exit退出docker保存为新镜像,版本号为0.1.1。

    docker commit 79c04e667618 gym-carla:0.1.1
    
    展开全文
  • docker各进程的交互

    千次阅读 2018-01-05 12:40:23
    docker各个进程交互

    docker各进程的交互

                               +------------+
                                  |            |
                                  | Docker Hub |
                                  |            |
                                  +------------+
                                        
                                        |
                                      2 | REST
                                        |
                                        
                                   +---------+
    +--------+       REST          |         |    grpc      +-------------------+
    | docker |<------------------->| dockerd |<------------>| docker-containerd |
    +--------+         1           |         |      3       +-------------------+
                                   +---------+                       
                                                                     |
                                                                     | 4
                                                                     
                                                          +------------------------+  5   +-------------+
                                                          | docker-containerd-shim |<---->| docker-runc |
                                                          +------------------------+      +-------------+
                                                                                                 
                                                                                                 | 6
                                                                                                 
                                                                                             +-------+
                                                                                             | hello |
                                                                                             +-------+

    步骤过程
    1. docker <–> dockerd
    docker进程是docker客户端,dockerd进程是docker服务器端,它们的代码都在moby项目里面。

    当在shell里面运行docker run hello-world后,docker程序被启动,这个程序就是docker的客户端,它的任务就是解析命令行参数,然后构造相应的启动容器请求,通过rest的方式发给dockerd。

    Engine API里描述了dockerd支持的所有请求,docker v17.03.0对应的API版本为v1.26,而docker v17.03.1对应的版本为v1.27,API版本之间的差别可以参考version-history。

    1. dockerd <–> “docker hub”
      当dockerd收到客户端的运行容器请求后,发现本地没有相应的镜像(image),就会从docker hub取相应image。(实际过程要比这个步骤多,这里为了简单直观,省略掉了其它的步骤,后面有详细的说明)

    docker hub是docker官方存放镜像(image)的服务器,dockerd和它之间也是使用rest接口,协议为Registry HTTP API V2。

    取image的大概过程如下:

    首先获取image的manifests,manifests里面包含两部分内容,一是image的配置文件的digest(sha256),另一个是image包含的所有filesystem layer的digest(sha256)

    根据上一步得到的image的配置文件的digest,在本地找是否已经存在对应的image,如果已经存在的话,就不用再往下走了,用现成的就可以了,如果没有,则继续

    遍历manifests里面的所有layer,根据其digest在本地找,如果找到对应的layer,则跳过当前layer,否则从服务器取相应layer的压缩包

    等上面的所有步骤完成后,就会拼出完整的image

    这里的每个layer都是相对于上一个文件系统layer的变化情况。
    从上面的过程可以看出,docker只会拉取本地没有的layer。

    1. dockerd <–> docker-containerd
      dockerd拿到image后,就会在本地创建相应的容器,然后再做一些初始化工作后,最后通过grpc的方式通知docker-containerd进程启动指定的容器

    docker-containerd是和dockerd一起启动的后台进程,他们之间使用unix socket通信,协议是grpc.

    1. docker-containerd <–> docker-containerd-shim
      docker-containerd和docker-containerd-shim都属于containerd项目,当docker-containerd收到dockerd的启动容器请求之后,会做一些初始化工作,然后启动docker-containerd-shim进程,并将相关配置所在的目录作为参数传给它。

    可以简单的理解成docker-containerd管理所有本机正在运行的容器,而docker-containerd-shim只负责管理一个运行的容器,相当于是对runc的一个包装,充当containerd和runc之间的桥梁,runc能干的就交给runc来做,runc做不了的就放到这里来做。

    1. docker-containerd-shim <–> docker-runc
      docker-containerd-shim进程启动后,就会按照runtime的标准准备好相关运行时环境,然后启动docker-runc进程。

    docker-runc就是runc程序的重命名,它们是相等的,若无特殊情况,后面介绍中不区分docker-runc和runc

    image和runtime标准都由Open Container Initiative(OCI)负责定义维护,而runc就是docker贡献给OCI的一个标准runtime实现。

    如何启动runc是公开的标准,大概过程就是准备好rootfs和配置文件,然后使用合适的参数启动runc进程就可以了。

    1. docker-runc <–> hello
      runc进程打开容器的配置文件,找到rootfs的位置,并启动配置文件中指定的相应进程,在hello-world的这个例子中,runc会启动容器中的hello程序。

    到此为止,容器启动成功。

    进程间的关系
    等runc将容器启动起来后,runc进程就退出了,于是容器里面的第一个进程(hello)的父进程就变成了docker-containerd-shim,在pstree的输出里面,进程树的关系大概如下:

    systemd───dockerd───docker-containerd───docker-containerd-shim───hello
    实际操作过程中可能看不到这样的输出,因为hello很快就运行退出了,接着docker-containerd-shim也退出了。

    其中dockerd和docker-containerd是后台常驻进程,而docker-containerd-shim则由docker-containerd按需启动。

    runc退出后其子进程hello不是应该由init进程接管吗?怎么就变成了docker-containerd-shim的子进程了呢?这是因为从Linux 3.4开始,prctl增加了对PR_SET_CHILD_SUBREAPER的支持,这样就可以控制孤儿进程可以被谁接管,而不是像以前一样只能由init进程接管。

    输出
    hello进程启动之后,往标准输出打印一段话后就退出了,那这个标准输出输出到哪里去了呢?docker客户端是怎么得到这段话的呢?这就取决于docker将这个标准输出重定向到哪里去了,以及它是怎么管理容器的这些输出的,这涉及到docker的日志管理方式,该部分内容会在后续做详细介绍,这里只需要知道容器的标准输出的内容能被docker的这些进程一层一层的转发给客户端就行了。

    详细步骤
    上面介绍的是一个精简版的hello world运行步骤,实际过程要多几个回合,下面用curl命令来模拟一下实际的操作流程:

    这里假设已经配置了dockerd监听本地tcp端口2375

    请求dockerd创建容器,但由于dockerd在本地找不到相应的image,于是返回失败
    dev@debian:~$ curl 127.0.0.1:2375/v1.27/containers/create -X POST -H “Content-Type: application/json” -d ‘{“Image”: “hello-world”}’
    {“message”:”No such image: hello-world:latest”}

    请求dockerd去找registry服务器拿image
    这里的http应答中的内容包含了很多跟进度条相关的内容
    dev@debian:~$ curl ‘127.0.0.1:2375/v1.27/images/create?fromImage=hello-world&tag=latest’ -X POST
    {“status”:”Pulling from library/hello-world”,”id”:”latest”}
    {“status”:”Pulling fs layer”,”progressDetail”:{},”id”:”78445dd45222”}
    {“status”:”Downloading”,”progressDetail”:{“current”:971,”total”:971},”progress”:”[==================================================\u003e] 971 B/971 B”,”id”:”78445dd45222”}
    {“status”:”Verifying Checksum”,”progressDetail”:{},”id”:”78445dd45222”}
    {“status”:”Download complete”,”progressDetail”:{},”id”:”78445dd45222”}
    {“status”:”Extracting”,”progressDetail”:{“current”:971,”total”:971},”progress”:”[==================================================\u003e] 971 B/971 B”,”id”:”78445dd45222”}
    {“status”:”Extracting”,”progressDetail”:{“current”:971,”total”:971},”progress”:”[==================================================\u003e] 971 B/971 B”,”id”:”78445dd45222”}
    {“status”:”Pull complete”,”progressDetail”:{},”id”:”78445dd45222”}
    {“status”:”Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7”}
    {“status”:”Status: Downloaded newer image for hello-world:latest”}

    再次创建容器成功,得到容器ID
    dev@debian:~$ curl 127.0.0.1:2375/v1.27/containers/create -X POST -H “Content-Type: application/json” -d ‘{“Image”: “hello-world”}’
    {“Id”:”2a4717ffb830bf4cff12ef6e6f1e93129970df273387797fd023e10292e3e928”,”Warnings”:null}

    attach到容器的标准输出,curl程序会暂停在这里,等待容器的输出
    dev@debian:~$ curl ‘127.0.0.1:2375/v1.27/containers/2a4717ffb830bf4cff12ef6e6f1e93129970df273387797fd023e10292e3e928/attach?stderr=1&stdout=1&stream=1’ -d ‘{“Connection”: “Upgrade”, “Upgrade”:”tcp”}’
    等下一步容器启动后,在这里可以看到容器的输出

    另外打开一个shell窗口,启动容器
    dev@debian:~$ curl 127.0.0.1:2375/v1.27/containers/2a4717ffb830bf4cff12ef6e6f1e93129970df273387797fd023e10292e3e928/start -X POST
    从上面的curl命令可以看出,在hello-world这个场景中,docker客户端主要发送了四个请求给dockerd,首先创建image,然后创建容器,接着attach标准输出,最后启动容器。(attach涉及到标准输入输出重定向,这里不细说)

    这里是它们之间的交互流程:

                               +---------+
    

    +——–+ | |
    | | 1.create container | |
    | |——————–>| |
    | | | |
    | | 2.image not found | |
    | |<——————–| |
    | | | |
    | | 3.create image | |
    | |——————–>| |
    | | | |
    | | 4.image created | |
    | |<——————–| |
    | docker | | dockerd |
    | | 5.create container | |
    | |——————–>| |
    | | | |
    | | 6.container id | |
    | |<——————–| |
    | | | |
    | | 7.start container | |
    | |——————–>| |
    | | | |
    | | 8.container started | |
    | |<——————–| |
    +——–+ | |
    +———+
    流程对应的文字描述如下:

    客户端发送创建容器请求给dockerd,dockerd收到请求后,发现本地没有相应的额image,于是返回失败。

    客户端收到失败的响应后,立即发送创建image的请求过来,dockerd收到后,会去docker hub上拿相应的image,拿到后返回成功。

    客户端再次发送创建容器请求给dockerd,dockerd收到会根据拿到的image创建一个新容器,并初始化容器运行时要用到的相关目录和配置文件,里面就包含了rootfs,容器创建完成后,dockerd返回容器的ID给客户端。

    客户端发启动容器请求给dockerd,dockerd收到请求后,会通知docker-containerd启动容器,启动成功后返回成功给客户端。

    dockerd去docker hub上取image发生在这里的3~4步之间,而docker-containerd───docker-containerd-shim───hello这些事发生在这里的7~8步之间。

    展开全文
  • 主要介绍了Docker命令行守护进程的交互方法的相关资料,需要的朋友可以参考下
  • RenkuLab Docker 映像包含从 Renku 平台启动 JupyterLab 和 RStudio 等交互式环境所需的最少依赖项。 它们还各自包含一个版本。 用法 基本 python (renkulab-py)、基本 R (renkulab-r) 和基本 Julia (renkulab-julia...
  • 与docker容器交互

    千次阅读 2017-01-05 14:38:13
    1 进入容器: docker exec -it containerId sh 2 查看 vi /etc/docker/registry/config.yml 配置文件 3 从容器中像主机拷贝数据  docker cp containerId:/var/test/testfile /var/local/testfilea ...

    1 进入容器:  docker exec -it containerId sh


    2  查看 vi /etc/docker/registry/config.yml  配置文件


    从容器中像主机拷贝数据

        docker cp containerId:/var/test/testfile /var/local/testfilea

    4 从容器向主机copy数据

    用/var/lib/docker/aufs/mnt/通道来完成拷贝。

    cp localfile /var/lib/docker/aufs/mnt/[container full Id]/xx/xx/bb


    进入容器

     

    docker exec -it registry sh

    进入容器

     

    docker exec -it registry sh

    进入容器

     

    docker exec -it registry sh

    展开全文
  • 面向Python交互式Deepweb的快速智能链接分析器的Docker映像 概述 PIDRILA:P ython我nteractive d eepweb为[R APID我ntelligent大号墨nalyzer实在是快异步通过BrightSearch团队为所有的道德netstalkers开发的网络...
  • 系统利用了Docker的容器化技术,将用户的提供Python的服务封装在容器里面,实现了用户用户、用户宿主机之间的隔离,同时通过容器实现了用户权限控制和用户资源限制,权限控制和资源管理极大地提高了平台服务的...
  • Docker的简单交互式提示。 从启发使用 。 目录 产品特点 建议docker命令 在docker exec / start / stop命令后列出容器ID和名称 根据键入的命令建议命令参数 在docker pull命令之后列出来自docker hub的图像 在...
  • hocker:与docker注册表进行交互并生成nix构建指令的实用程序
  • restfull风格的架构自动部署已成为现在的主流了,今天我就来讲讲在docker上自动部署Nginx,并且反向代理centos7服务器上数据交互。 一、docker下载centos7镜像,docker pull centos:7 ; 二、将项目打包成jar包...
  • Docker

    万次阅读 2020-12-19 16:44:42
    Docker
  • Docker run终端交互能力

    千次阅读 2017-08-08 15:58:34
    Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。 输出Hello worldrunoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world... run:前面的 docker 组合来运行一个
  • docker exec -it 容器id /bin/bash
  • Docker运行交互式容器

    万次阅读 2017-11-12 15:36:03
    在之前的一篇博客中《Docker入门——Hello World》中我们通过命令...在篇博客中,我们可以进入Ubuntu,然后使用shell交互式的对容器进行交互。 docker的两个参数-i,-t可以实现交互式功能:docker run -i -t ubuntu
  • Docker命令行守护进程如何交互

    千次阅读 2017-05-22 12:21:49
    Docker并非单体应用,它由多个组件构成。这篇博客将介绍Docker守护进程(daemon)与Docker命令行(CLI)。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,228
精华内容 23,691
关键字:

docker与本机交互