Ubuntu

是否可以在 Docker 上執行 Ubuntu 伺服器?

  • October 5, 2019

我的團隊一直在 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
...

碼頭工人-compose.yml

version: '3'

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

第一個錯誤是認為 Docker 鏡像/容器類似於虛擬機。有相似之處,但它們並不相同,坦率地說,並不是很相似。

Docker 真的不是用來執行作業系統的。它用於在包含(隔離)環境中執行單個程序。容器使用與主機上相同的核心。

當您創建 Docker 鏡像時,FROM ubuntu您將使用一些預先創建的層來啟動您的鏡像,這些層會引入您可以在 Ubuntu 伺服器上找到的標准文件系統和包的某些部分。

然後添加您自己的附加層,添加執行程序/程序所需的二進製文件和文件。

圖像將(通常但不是強制性的)有一個CMD命令或ENTRYPOINT命令來執行某些東西。

a 中的每一行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

假設您正在使用 command 建構make,您可以這樣做:

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

這將需要在您的行中Dockerfile創建工作目錄/usr/src/project

WORKDIR /usr/src/project

如果您執行docker上面的命令行會發生什麼,它將從名為的映像創建一個容器myimage(前面顯示的建構命令),將您所在的目前目錄掛載到/usr/src/project新容器中。在容器內執行make命令,然後退出。該--rm參數告訴 Docker 一旦完成執行就不要保留容器。參數-it均值interactive和。tty

如果您只想訪問某個 shell,以便可以手動執行make或以臨時方式手動執行其他命令,您也可以這樣做:

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

這將從myimage圖像創建容器,然後執行bash. 因為bash不退出並且您有-it參數,所以您將在容器的提示符下執行您想做的任何事情。

請記住,您從容器內部修改的任何文件都不會被保留,並且下次您開始恢復預設狀態時。當然,/usr/src/project目錄中的任何文件都將在您的本地硬碟驅動器上進行修改,因為它是從它安裝的。

引用自:https://serverfault.com/questions/986848