Поиск…


параметры

параметр подробности
--вытащить Убедитесь, что базовое изображение ( FROM ) обновлено до создания остальной части файла Docker.

Создание изображения из файла Docker

После того, как у вас есть файл Docker, вы можете создать образ из него с помощью docker build . Основная форма этой команды:

docker build -t image-name path

Если ваш файл Docker не называется Dockerfile , вы можете использовать флаг -f чтобы указать имя файла Dockerfile для сборки.

docker build -t image-name -f Dockerfile2 .

Например, чтобы создать образ с именем dockerbuild-example:1.0.0 из Dockerfile в текущем рабочем каталоге:

$ ls
Dockerfile Dockerfile2

$ docker build -t dockerbuild-example:1.0.0 .

$ docker build -t dockerbuild-example-2:1.0.0 -f Dockerfile2 .

Дополнительную информацию о дополнительных параметрах и настройках см. В документации по использованию docker build докеров .

Общей ошибкой является создание файла Docker в домашнем каталоге пользователя ( ~ ). Это плохая идея, потому что во время docker build -t mytag . это сообщение появится в течение длительного времени:

Загрузка контекста

Причиной является демон docker, пытающийся скопировать все файлы пользователя (как домашний каталог, так и его подкаталоги). Избегайте этого, всегда указывая каталог для файла Docker.

Добавление файла .dockerignore в каталог сборки является хорошей практикой . Его синтаксис подобен файлам .gitignore и гарантирует, что только .gitignore файлы и каталоги будут загружены в качестве контекста сборки.

Простой файл Dockerfile

FROM node:5

Директива FROM указывает изображение, с которого нужно начинать. Можно использовать любую допустимую ссылку на изображение .

WORKDIR /usr/src/app

Директива WORKDIR устанавливает текущий рабочий каталог внутри контейнера, что эквивалентно запуску cd внутри контейнера. (Примечание: RUN cd не изменит текущий рабочий каталог.)

RUN npm install cowsay knock-knock-jokes

RUN выполняет заданную команду внутри контейнера.

COPY cowsay-knockknock.js ./

COPY копирует файл или каталог, указанные в первом аргументе из контекста сборки ( path переданный docker build path ) к местоположению в контейнере, указанном вторым аргументом.

CMD node cowsay-knockknock.js

CMD указывает команду для выполнения, когда изображение выполняется, и команда не указана. Его можно переопределить, передав команду на docker run .

Есть много других инструкций и опций; см. ссылку Dockerfile для полного списка.

Разница между ENTRYPOINT и CMD

Существует две директивы Dockerfile для указания, какую команду запускать по умолчанию в построенных изображениях. Если вы укажете только CMD то докер выполнит эту команду, используя стандартную ENTRYPOINT , которая является /bin/sh -c . При запуске встроенного образа вы можете переопределить любую или оба точки входа и / или команды. Если вы укажете оба, то ENTRYPOINT указывает исполняемый файл вашего контейнерного процесса, а CMD будет предоставлен в качестве параметров этого исполняемого файла.

Например, если ваш Dockerfile содержит

FROM ubuntu:16.04
CMD ["/bin/date"]

Затем вы используете директиву ENTRYPOINT по умолчанию /bin/sh -c и run /bin/date с этой точкой входа по умолчанию. Команда вашего процесса контейнера будет /bin/sh -c /bin/date . После запуска этого изображения оно будет по умолчанию распечатывать текущую дату

$ docker build -t test .
$ docker run test
Tue Jul 19 10:37:43 UTC 2016

Вы можете переопределить CMD в командной строке, и в этом случае он выполнит указанную вами команду.

$ docker run test /bin/hostname
bf0274ec8820

Если вы укажете директиву ENTRYPOINT , Docker будет использовать этот исполняемый файл, а директива CMD задает параметры (параметры) по умолчанию. Поэтому, если ваш Dockerfile содержит:

FROM ubuntu:16.04
ENTRYPOINT ["/bin/echo"]
CMD ["Hello"]

Тогда запуск будет производить

$ docker build -t test .
$ docker run test
Hello

Вы можете предоставить различные параметры, если хотите, но все они будут запускать /bin/echo

$ docker run test Hi
Hi

Если вы хотите переопределить точку входа, указанную в вашем файле Docker (т. Е. Если вы хотите запустить другую команду, чем echo в этом контейнере), вам нужно указать параметр --entrypoint в командной строке:

$ docker run --entrypoint=/bin/hostname test
b2c70e74df18

Обычно вы используете директиву ENTRYPOINT чтобы указать на основное приложение, которое вы хотите запустить, и CMD на параметры по умолчанию.

Отображение порта в файле докеров

EXPOSE <port> [<port>...]

Из документации Докера:

Команда EXPOSE информирует Docker о том, что контейнер прослушивает указанные сетевые порты во время выполнения. EXPOSE не делает порты контейнера доступными для хоста. Для этого вы должны использовать флаг -p для публикации диапазона портов или флага -P для публикации всех открытых портов. Вы можете открыть один номер порта и опубликовать его извне под другим номером.

Пример:

Внутри вашего файла Docker:

EXPOSE 8765

Чтобы получить доступ к этому порту с главного компьютера, включите этот аргумент в команду docker run :

-p 8765:8765

ENTRYPOINT и CMD рассматриваются как глагол и параметр

Предположим, что у вас есть файл Dockerfile, заканчивающийся

ENTRYPOINT [ "nethogs"] CMD ["wlan0"]

если вы построите это изображение с помощью

docker built -t inspector .

запустите изображение, построенное с помощью такого файла Docker, с помощью команды, например

docker run -it --net=host --rm inspector

, nethogs будет контролировать интерфейс wlan0

Теперь, если вы хотите контролировать интерфейс eth0 (или wlan1, или ra1 ...), вы будете делать что-то вроде

docker run -it --net=host --rm inspector eth0

или же

docker run -it --net=host --rm inspector wlan1

Нажатие и вытягивание изображения в концентратор докеров или другой реестр

Локально созданные изображения могут быть перенесены в Docker Hub или на любой другой реко-сервер докеры, известный как реестр. Используйте docker login в docker login для входа в существующий аккаунт концентратора докеров.

docker login

Login with your Docker ID to push and pull images from Docker Hub.
If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: cjsimon
Password:
Login Succeeded

Указание имени сервера можно использовать в другом реестре докеров. Это также работает для частных или самостоятельных реестров. Кроме того, возможно использование внешнего хранилища учетных данных для обеспечения безопасности.

docker login quay.io

Затем вы можете пометить и вставить изображения в реестр, в который вы вошли. Ваш репозиторий должен быть указан как server/username/reponame:tag Опускание сервера в настоящее время по умолчанию - Docker Hub. (Реестр по умолчанию не может быть изменен другому провайдеру, и нет никаких планов по реализации этой функции.)

docker tag mynginx quay.io/cjsimon/mynginx:latest

Различные теги могут использоваться для представления разных версий или ветвей одного и того же изображения. Изображение с несколькими разными тегами отображает каждый тег в одном и том же репо.

Используйте docker images чтобы просмотреть список установленных изображений, установленных на вашем локальном компьютере, включая ваше недавно помеченное изображение. Затем используйте push, чтобы загрузить его в реестр и потянуть, чтобы загрузить изображение.

docker push quay.io/cjsimon/mynginx:latest

Все метки изображений можно вытащить, указав параметр -a

docker pull quay.io/cjsimon/mynginx:latest

Создание с использованием прокси

Часто при создании изображения Docker Dockerfile содержит инструкции, которые запускают программы для извлечения ресурсов из Интернета (например, wget чтобы вытащить двоичную сборку программы на GitHub).

Можно поручить Docker передать заданные переменные окружения, чтобы такие программы выполняли эти выборки через прокси:

$ docker build --build-arg http_proxy=http://myproxy.example.com:3128 \
               --build-arg https_proxy=http://myproxy.example.com:3128 \
               --build-arg no_proxy=internal.example.com \
               -t test .

build-arg - переменные окружения, доступные только во время сборки.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow