【问题标题】:How to create a isolated "environment" in Ubuntu?如何在 Ubuntu 中创建一个孤立的“环境”?
【发布时间】:2018-10-22 07:52:40
【问题描述】:

有没有办法在 Ubuntu 14.04 中创建隔离环境?我安装了一个不稳定的应用程序,有时它不起作用,我不知道为什么。因此,我正在尝试创建一个隔离环境,以使我安装的依赖项仅在此环境中可用(类似于 python 虚拟环境)。

程序需要安装这些依赖:libc6libstdc++6、 imagemagickperllibgl1-mesa-glxlibglu1-mesa

我希望你能理解我的问题。谢谢!

【问题讨论】:

标签: ubuntu ubuntu-14.04


【解决方案1】:

您可以使用Docker 创建类似于虚拟机的隔离环境。您将在您的开发机器上运行 Docker 守护程序(在 Mac、Windows 和 Linux 上可用)。然后,您创建一个以 Ubuntu 14.04 基础映像开头的 Dockerfile。然后,您可以使用 Docker 语法编写命令来安装依赖项,并将代码复制到 Docker 容器(隔离环境的实例)中。

假设您有一个基本的 java 应用程序,并且您位于 /app 目录中:

/app
|
├── /bin
|   └── app.jar
|
├── /src
|   └── app.java
|
└── Dockerfile

您的Dockerfile 将如下所示描述您的隔离环境:

# Use the Ubuntu 14.04 base image
FROM ubuntu:14.04

# Install dependencies 
# (assuming they are available via apt-get)

# <install Java here>

RUN apt-get install -y \
libc6                  \
libstdc++6             \
imagemagick            \
perl                   \
libgl1-mesa-glx        \ 
libglu1-mesa       

# Copy code (or binaries) into the container
COPY app/bin/app.jar /app.jar

# Expose port 8080
EXPOSE 8080

# Run the application
CMD java -jar app.jar

然后您需要使用构建命令build 来自Dockerfile 的图像:

docker build -t app .

然后运行它(假设它暴露了 8080 端口):

docker run -p 8080:8080 app

现在您的应用将在您的开发机器上通过localhost:8080 提供,但它将在一个隔离的 Ubuntu 容器中运行。

【讨论】:

  • 我的程序使用图像,我可以用这个程序运行一个 docker 容器并使用容器外的图像吗?
  • @Julio 你这是什么意思?就像这个容器化应用程序是否与主机上不在 docker 应用程序中的其他进程进行交互一样?简短的回答,不。如果是这样,那么环境就不会被孤立。但是,假设您在公共端口上打开了一些应用程序,则 docker 容器中的应用程序应该能够通过网络看到它。但是容器中的环回地址 127.0.0.1 和宿主机的 127.0.0.1(localhost)是不一样的。使用 docker 查找网络,因为我相信您可以进行绑定,但我没有这方面的经验。
  • 我有这个图像编辑器(我正在谈论的程序),我需要隔离它,因为我认为程序会损坏,因为其他人使用我使用的同一台计算机。因此,他们可能会安装其他程序并修改我的程序所需的依赖项。因此,我想隔离我的程序,这样依赖项就永远不会改变它的版本。该程序的使用是通过终端,像这样: $ register image1 image2 。你认为 Docker 是一个好的解决方案吗?谢谢。
  • 我以为您的意思是“Docker 映像”。如果您打算将此程序作为服务“公开”,那么可以。也就是说,例如,如果它可以通过 HTTP 连接上传/下载照片,当然可以。但是,如果它是您手动使用的东西,则不会。这是可能的,但是每次您想使用它时都必须通过 SSH 连接到 docker 容器,然后通过 SCP 将文件进出 docker 容器以实际访问已编辑的文件。更好的解决方案可能是带有 VirtualBox 的 VM,并且在主机和来宾操作系统之间有一个共享文件夹。这也可以通过 docker 绑定目录来完成。
猜你喜欢
  • 2021-08-10
  • 2021-08-10
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2016-11-12
  • 2017-03-14
  • 2011-04-07
  • 2017-08-19
相关资源
最近更新 更多