将本地目录挂载到远程 docker 容器

Mounting a local directory to remote docker container

我有一个远程 docker 容器,我已将其拉出,目前 运行 使用:

docker pull bamos/openface
docker run -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash

我在

也有一个本地目录
/Users/name/Documents/my-project

ipython 中开发时,我需要从 my-project 中的脚本 import openface,但我不知道如何将 my-project 挂载到 openface,或者应该反过来。

总的来说,我一直在阅读这里的文档https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-host-directory-as-a-data-volume,但仍然很困惑。如果有人可以,我将不胜感激

  1. 给出确切的命令,以便我可以从 my-project
  2. 导入 openface
  3. 解释命令的各个方面,这样我就不会那么困惑了:D

谢谢!

============================================= ================= 编辑:

现在我在做:

docker run -v /Users/name/Documents/my-project:/root/my-project -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash

它似乎在工作。

所以,我会指出一些你可以研究的主题,并给出我认为对你有用的想法。

既然你还在学习,让我们来看看这些主题:

  • 使用 docker 图片
  • 自定义 docker 图片
  • 整合一些 docker 图像

使用 docker 图片

这是你已经知道的。 运行 docker run -v /Users/name/Documents/my-project:/root/my-project -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash 并开始使用它。 运行 一些命令并查看所提供图像的功能。

用例(对我而言):

  • 有一次,我需要测试 NoSQL Cassandra。我很容易 运行 docker run --name some-cassandra -d cassandra:latest 并且它已经在工作了
  • 我会制作一个 Python/Flask 应用程序,所以与其制作 virtualenv,我更喜欢 Docker。

目前不太好,但用起来很有趣。

自定义一张docker图片

您可以创建自己的图像,而不是使用临时图像。所以,你需要了解Dockerfile。这是一个简单的例子:

FROM bamos/openface

RUN pip install flask
COPY myentrypoint.sh

CMD ["myentrypoint.sh"]

快速解释:

  • bamos/openface
  • 开始你自己的形象
  • 运行 一个安装 python package flask
  • 的命令
  • 复制您的入口点(您需要创建一个)
  • 运行 当用户使用你的容器时这个入口点

有了这张图片,只需用名称 Dockerfile 和 运行 docker build -t chibro2/myopenface . 保存,然后你就有了你自己的带有额外包的图片。

entrypoint 是默认的 sh 命令,它将启动某些东西(例如,网络服务器)。如果您有在线实例(例如 AWS),您可以 运行 您的 docker,它将启动您的网络服务。如果您在本地进行测试,您应该在网上获得相同的结果。一个常见的问题是使用不同的版本进行测试(例如 python3 本地版本,以及 python2 在服务器版本)。

用例:

  • 制作您的基础设施的版本(您的 git 存储库中有所有需要的包)
  • 制作一个可以在您的服务器上轻松运行的图像。

检查: https://www.digitalocean.com/community/tutorials/docker-explained-using-dockerfiles-to-automate-building-of-images https://docs.docker.com/engine/reference/builder/

整合一些docker张图片

我在 Docker 真正喜欢的一件事是 docker 撰写。您可以轻松处理多个 docker 相互配合的图像。 docker-compose:

的一个例子
version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

快速解释:

  • 我们创建一个容器数据库,一个 postgres 数据库
  • 我们创建一个 Web 服务,从 Docker 文件构建(它隐含在构建中),运行 一个服务器,命令为 python3 manage.py runserver 0.0.0.0:8000.

Ps.: 是的,它使用代码作为一个卷,但我不建议将其用于生产,但建议用于开发(因此,您可以轻松更改代码,并且不需要构建图像)。

使用 docker-compose,我们可以轻松地集成多个项目并使用一个命令启动所有项目:docker-compose up

用例:

  • 这非常适合微服务
  • 服务发现很容易
  • 简单的扩展命令(docker-compose scale web=2 将创建 2 个 Web 服务器实例)。

查看此快速入门:https://docs.docker.com/compose/django/

结论

docker 要学的东西太多了。对此我不能给出很好的答案,但我希望我能提供一点帮助。

未来可能的步骤是使用 Docker Machine 和 Docker Swarm。