Первая ошибка - думать, что образ/контейнер Docker похож на виртуальную машину. Сходства есть, но они не одинаковы и, честно говоря, не очень похожи.
На самом деле Docker не предназначен для запуска операционной системы. Он предназначен для запуска одного процесса в замкнутой (изолированной) среде. Контейнер использует то же ядро, что и на хосте.
Когда вы создаете образ Docker с помощью FROM ubuntu вы начинаете свой образ с нескольких предварительно созданных слоев, которые содержат некоторые части стандартной файловой системы и пакетов, которые вы могли бы найти на сервере Ubuntu.
Затем вы добавляете свои собственные дополнительные слои, добавляя двоичные файлы и файлы, необходимые для запуска вашей программы / процесса.
Изображение будет (обычно, но не обязательно) иметь CMD команда или ENTRYPOINT команда для запуска чего-либо.
Каждая строка в Dockerfile это команда, инструктирующая Docker о том, как создать образ. Каждая строка/команда приводит к появлению еще одного слоя. Чтобы установить пакеты, вы, вероятно, захотите сделать что-то вроде этого:
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/*
Это уменьшит размер вашего изображения.
Тогда вам нужно будет действительно что-то запустить...
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 (команда сборки, показанная ранее), смонтируйте текущий каталог, в котором вы находитесь, как /usr/src/project внутри нового контейнера. Запустите программу make команда внутри контейнера, а затем выход. То --rm параметр сообщает Docker, чтобы он не оставлял контейнер рядом, как только он завершит работу. То -it параметры означают interactive и tty.
Если вы хотите просто иметь доступ к какой-либо оболочке, чтобы вы могли вручную запустить make или другие команды специальным образом, вы также можете сделать это:
docker run --rm -it -v $(pwd):/usr/src/project myimage /bin/bash
Это создало бы контейнер из myimage изображение и запустите bash. Потому что bash не завершается, и у вас есть -it параметр, вы окажетесь в подсказке контейнера, где вы можете делать все, что захотите.
Просто помните, что любой файл, который вы изменяете внутри контейнера, не будет сохранен, и в следующий раз вы вернетесь к состоянию по умолчанию. Конечно, любые файлы из /usr/src/project каталог будет изменен на вашем локальном жестком диске, поскольку он монтируется с него.