可以在 Docker 上运行 Ubuntu 服务器吗?

可以在 Docker 上运行 Ubuntu 服务器吗?

我的团队一直在运行 VirtualBox 的 Ubuntu 16.04 服务器上开发我们的项目。随着新开发人员加入我们的项目,每次帮助他们在 VirtualBox 上创建新的 Ubuntu 服务器并安装所有依赖项以启动项目对我们来说是一个很大的麻烦。

我们决定用 Docker 来解决这个麻烦。因此,我尝试使用下面的方法在 Docker 上的 Ubuntu 上运行我们的项目Dockerfiledocker-compose.yml但我找不到很多资源,例如how to run Ubuntu on Docker。使用下面的方法在 Docker 上运行 Ubuntu 是否正确?

ifconfig让我感到困惑的一件事是为什么我在运行 Docker 的 Ubuntu 服务器上运行时无法获取 IP 地址?

Dockerfile

FROM ubuntu:16.04

RUN sudo apt-get update
RUN sudo apt-get install -y build-essential autoconf libtool 
RUN sudo apt-get install -y python-setuptools python-dev python3-dev
RUN sudo apt-get install -y python-pip python3-pip
RUN sudo apt-get install -y python-virtualenv unixodbc-dev libffi-dev git
...

docker-compose.yml

version: '3'

services:
  ubuntu:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
     - "8000:8000"
    container_name: dev_ubuntu
...

答案1

第一个错误是认为 Docker 镜像/容器类似于虚拟机。它们有相似之处,但并不完全相同,坦率地说,并不是很相似。

实际上,Docker 并不是用来运行操作系统的。它用于在封闭(隔离)环境中运行单个进程。容器使用与主机相同的内核。

当您创建 Docker 镜像时,FROM ubuntu您将使用一些预先创建的层来启动镜像,这些层会引入您可以在 Ubuntu 服务器上找到的标准文件系统和包的某些部分。

然后添加您自己的附加层,添加运行程序/进程所需的二进制文件和文件。

图像会(通常但不是强制性的)有一个CMD命令或ENTRYPOINT运行某些东西的命令。

每一行Dockerfile都是一个命令,指示 Docker 如何创建镜像。每行/命令都会产生一个新层。要安装软件包,您可能需要执行以下操作:

FROM ubuntu:16.04
RUN apt-get -qq update && \
    apt-get -y install build-essential autoconf libtool && \
    apt-get install -y python-setuptools python-dev python3-dev && \
    apt-get install -y python-pip python3-pip && \
    apt-get install -y python-virtualenv unixodbc-dev libffi-dev git && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

这会让你的图像变得更小。

然后您将需要实际运行一些操作......

CMD python

然后你就可以构建你的图像了:

docker build -t myimage .

并使用它...

docker run --rm -it myimage

ifconfig不起作用,因为二进制文件不在镜像中。这实际上没有必要,因为您无法从容器内部管理网络。

因此,您似乎正在制作一个容器来构建一些代码。运行容器时,您需要将包含代码的目录挂载到容器内。我不知道您在工作站或服务器上运行的是什么操作系统,因此我将参考此帖子获取更多信息:https://stackoverflow.com/questions/41485217/mount-current-directory-as-a-volume-in-docker-on-windows-10/41489151#41489151

假设您正在使用命令进行构建make,您可以执行以下操作:

docker run --rm -it -v $(pwd):/usr/src/project myimage make

这将需要一行来Dockerfile创建工作目录/usr/src/project

WORKDIR /usr/src/project

如果您运行docker上述命令行,将会发生什么情况?它将从名为myimage(前面显示的 build 命令)的映像创建一个容器,将当前所在的目录挂载为/usr/src/project新容器内。make在容器内运行该命令,然后退出。该--rm参数告诉 Docker 在运行完成后不要保留容器。-it参数的意思是interactivetty

如果你只是想要访问某个 shell,以便可以以make临时方式手动运行或其他命令,你也可以这样做:

docker run --rm -it -v $(pwd):/usr/src/project myimage /bin/bash

这将从图像创建容器myimage并运行bash。由于bash不退出并且您有参数-it,因此您将在容器的提示符下执行任何您想做的事情。

请记住,您在容器内修改的任何文件都不会被保留,下次启动时将恢复为默认状态。当然,目录中的任何文件都/usr/src/project将在您的本地硬盘上进行修改,因为这是从该硬盘安装的。

相关内容