É possível executar o Ubuntu server no Docker?

Minha equipe vem desenvolvendo nosso projeto no servidor Ubuntu 16.04 em execução no VirtualBox. À medida que novos desenvolvedores se juntam ao nosso projeto, é um grande incômodo para nós ajudá-los a criar um novo servidor Ubuntu no VirtualBox e instalar todas as dependências apenas para iniciar o projeto todas as vezes.

Decidimos resolver o incômodo com o Docker. Então, estou tentando executar nosso projeto no Ubuntu no Docker com o abaixo Dockerfile e docker-compose.yml, mas não consigo encontrar muitos recursos como how to run Ubuntu on Docker. Estou indo para a direção certa para executar o Ubuntu no Docker com o caminho abaixo?

Uma coisa com a qual estou confuso é por que não consigo obter o endereço ip quando executo ifconfig no meu servidor Ubuntu em execução no Docker?

Dockerfile

FROM ubuntu:16.04RUN sudo apt-get updateRUN sudo apt-get install -y build-essential autoconf libtool RUN sudo apt-get install -y python-setuptools python-dev python3-devRUN sudo apt-get install -y python-pip python3-pipRUN 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...

O primeiro erro é pensar que uma imagem/contêiner do Docker é semelhante a uma máquina virtual. Existem semelhanças, mas elas não são as mesmas e, francamente, não são realmente semelhantes.

Docker não é, realmente, para executar um sistema operacional. É para executar um único processo em um ambiente contido (isolado). O contêiner usa o mesmo kernel que o que está no host.

Quando você cria uma imagem Docker com FROM ubuntu você está iniciando sua imagem com algumas camadas pré-criadas que trazem algumas partes de um sistema de arquivos padrão e pacotes que você encontraria em um servidor Ubuntu.

Em seguida, você adiciona suas próprias camadas adicionais, adicionando binários e arquivos necessários para executar seu programa / processo.

A imagem (normalmente, mas não obrigatória) teria um CMD comando ou ENTRYPOINT comando para executar alguma coisa.

Cada linha em um Dockerfile é um comando instruindo Docker sobre como criar a imagem. Cada linha / comando resulta em mais uma camada. Para instalar pacotes, você provavelmente quer fazer algo assim:

FROM ubuntu:16.04RUN 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/*

Isso manterá sua imagem menor.

Então você precisará realmente executar algo...

CMD python

Então você pode construir sua imagem:

docker build -t myimage .

E usa-o...

docker run --rm -it myimage

ifconfig não funciona porque o binário não está na imagem. Não é realmente necessário, pois você não gerencia a rede de dentro do contêiner.

Então você parece estar fazendo um contêiner para construir algum código. Você gostaria de montar seu diretório com o código dentro do contêiner ao executá-lo. Não sei qual sistema operacional você executa em sua estação de trabalho ou servidor, então vou me referir a este post para obter mais informações: https://stackoverflow.com/questions/41485217/mount-current-directory-as-a-volume-in-docker-on-windows-10/41489151#41489151

Digamos que você esteja construindo com o comando make, você poderia fazer isso:

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

Isso exigiria uma linha em seu Dockerfile para fazer o dir de trabalho /usr/src/project:

WORKDIR /usr/src/project

O que acontecerá se você executar o docker a linha de comando acima é que ele criará um contêiner a partir da imagem chamada myimage (comando build mostrado anteriormente), monte o diretório atual em que você está /usr/src/project dentro do novo recipiente. Executar o make comando dentro do recipiente e, em seguida, sair. O --rm o parâmetro diz ao Docker para não manter o contêiner assim que terminar de funcionar. O -it parâmetros média interactive e tty.

Se você quisesse apenas ter acesso a algum shell para poder executar manualmente make ou outros comandos de forma ad-hoc, Você também pode fazer isso:

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

Isso criaria o contêiner a partir do myimage imagem e execução bash. Porque bash não sai e você tem o -it parâmetro, você estará no prompt do contêiner, onde poderá fazer o que quiser.

Lembre-se de que qualquer arquivo que você modificar de dentro do contêiner não será preservado e da próxima vez que você começar a voltar ao estado padrão. Claro que todos os arquivos do /usr/src/project diretório será modificado em seu disco rígido local como este é montado a partir dele.

No Linux, não use ’ ifconfig(net-tools), useip (iproute2) que tem mais recursos. o iproute2 existe há 20 anos e o Net-tools ’ é obsoleto e mal é mantido há 15 anos. linux - Should I quit using Ifconfig? - Server Fault