Инструкция FROM используется для указания Базазеркало, следующего за новым использовать зеркало. Если его нет локально,тогда по умолчанию он перейдет вDocker Hub
Указана загрузказеркало。FROMКоманда должна бытьDockerfile
первая команда в файле,После запуска процесса сборки,Докер будет основан на зеркалесоздать новое зеркало,Команда после FROM также будет основана на этом Базазеркало.
FROM Формат синтаксиса:
FROM или
FROM :или
FROM :
Изображение, указанное через FROM, может быть любым допустимым базовым изображением. FROM имеет следующие ограничения:
Dockerfile
середина第一条非注释命令Dockerfile
Создать несколько файловзеркалочас,FROM может появляться несколько раз. Просто предшествуйте каждой новой команде FROM,Запишите последний отправленный идентификатор зеркала.ltest
версия БазазеркалоВыполняйте определенные команды в процессе создания образа и создайте промежуточное изображение. Формат:
#формат оболочки
RUN
#exec формат
RUN ["executable", "param1", "param2"]
image
Выполните любую допустимую команду и отправьте результаты выполнения.。После выполнения и подачи команды,就встреча自动осуществлятьDockerfile
следующий винструкция.image
зеркало Настроитьстроить。--no-cache
параметр,нравиться:docker build --no-cache
。
CMD используется для указания команды, которая будет выполняться при запуске контейнера. CMD имеет следующие три формата:
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
Опустите exec-формат исполняемого файла. При таком способе записи параметры CMD считаются параметрами по умолчанию для ENTRYPOINT. В настоящее время ENTRYPOINT также должен быть в формате exec. Для конкретного использования в сочетании с ENTRYPOINT см. Примечание. Отличие от команды RUN: RUN выполняется при сборке и создает новый образ. CMD выполняется, когда контейнер запущен, и не выполняет никаких операций во время сборки.
LABEL используется для добавления метаданных к изображению. Метаданные указываются в виде пар ключ-значение:
LABEL = = = ...
При использовании LABEL для указания метаданных LABEL может указывать один или несколько фрагментов метаданных. При указании нескольких фрагментов метаданных разные метаданные разделяются пробелами. Рекомендуется указывать все метаданные с помощью директивы LABEL, чтобы избежать создания слишком большого количества промежуточных изображений. Например, укажите некоторые метаданные через LABEL:
LABEL version="1.0" описание="Это веб-сервер" by=«ИТ-расшифровка»
После указания, вы можете просмотреть его через Docker Inspect:
docker inspect /test
"Labels": {
"version": "1.0",
"description": «Это веб-сервер»,
"by": «ИТ-расшифровка»
},
Установите порт прослушивания для построенного образа, чтобы контейнер прослушивал во время выполнения. Формат:
EXPOSE [...]
#Например: EXPOSE 22 80 8443
Примечание. Эта информация о команде служит декларацией.,并不встреча自动完成端口映射。при запускеконтейнерчас需要использовать-P
,Docker主机встреча自动分配一个宿主机的临час端口转发到指定的端口;использовать-p
(Обратите внимание на капитализацию),Вы можете указать, какой локальный порт хоста будет сопоставлен.
Укажите переменные среды, которые будут использоваться последующими инструкциями RUN в процессе создания образа, а также будут существовать в контейнере, запускаемом образом.
ENV
ENV = =...
Формат следующий:
COPY <исходный путь>... <целевой путь>
COPY ["<исходный путь1>",... "<целевой путь>"]
Скопируйте исходный адрес localhost (для Dockerfile Относительный путь, файл или каталог каталога, в котором он расположен) до адреса назначения изображения. Если целевой путь не существует, он будет создан автоматически. При использовании локального каталога в качестве исходного рекомендуется использовать COPY.
Эта команда скопирует содержимое указанного исходного пути в путь назначения в контейнере. Формат и свойства инструкций ADD и COPY в основном одинаковы. Но некоторые функции добавляются на основе COPY. Например, исходным путем может быть URL-адрес. В этом случае механизм Docker попытается загрузить связанный файл по целевому пути.
При построении образа скопируйте файлы в контексте образа в формате:
ADD <исходный путь>... <целевой путь>
ADD ["<исходный путь>",... "<целевой путь>"]
ENTRYPOINT используется для настройки исполняемой программы для контейнера. То есть каждый раз, когда контейнер создается с использованием образа, программа, указанная в ENTRYPOINT, будет установлена в качестве программы по умолчанию. ENTRYPOINT имеет две формы:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
ENTRYPOINT и CMD очень похожи,Разница в том,проходитьdocker run
осуществлять的命令不встреча覆盖 ENTRYPOINT,иdocker run
命令середина指定的任何параметр,都встреча被当做параметр再次传递给 ENTRYPOINT。Dockerfile Входить можно только одному ENTRYPOINT Команда, если она указана несколько раз, предыдущие настройки будут перезаписаны и будет выполнена только последняя. ENTRYPOINT инструкция.
docker run
бегатьконтейнерчас指定的параметр都встреча被传递给 ENTRYPOINT , и покроет CMD 命令指定的параметр。нравиться,осуществлятьdocker run <image> -d
час,-d Параметры будут переданы в точку входа.
ХОРОШОпроходитьdocker run --entrypoint
重写 ENTRYPOINT Точка входа. Например: вы можете указать исполнителя контейнера следующим образом:
ENTRYPOINT ["/usr/bin/nginx"]
Полный код сборки:
FROM ubuntu:16.04
MAINTAINER MoeWah "admin@mao.sh"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hello World, Я контейнер \
> /var/www/html/index.html
ENTRYPOINT ["/usr/sbin/nginx"]
EXPOSE 80
Используйте сборку Docker для создания образа и укажите его как moewah/test:
docker build -t="moewah/test" .
После завершения сборки используйте moewah/test для запуска контейнера:
docker run -i -t moewah/test -g "daemon off;"
При запуске контейнера,насиспользовать Понятно-g "daemon off;"
,Этот параметр будет передан в ENTRYPOINT.,наконец вконтейнерсерединаосуществлять的命令为/usr/sbin/nginx -g "daemon off;"
。
VOLUME используется для создания точки монтирования, то есть добавления тома в контейнер, созданный на основе собранного образа:
VOLUME ["/data"]
Том может существовать в указанном каталоге в одном или нескольких контейнерах, которые могут обходить объединенную файловую систему и обладают следующими возможностями:
WORKDIR используется для установки рабочего каталога внутри контейнера:
WORKDIR /path/to/workdir
После установки рабочего каталога через WORKDIR последующие команды в Dockerfile, такие как RUN, CMD, ENTRYPOINT, ADD, COPY и т. д., будут выполняться в этом каталоге. Например, используйте WORKDIR, чтобы установить рабочий каталог:
WORKDIR /aWORKDIR bWORKDIR cRUN pwd
В приведенном выше примере pwd 最终将встречасуществовать/a/b/c
目录серединаосуществлять。существоватьиспользовать docker run бегатьконтейнерчас,Можетпроходить-w
параметр覆盖строитьчас所设置的工作目录。
Укажите имя пользователя или UID при запуске контейнера, и последующие инструкции RUN и другие также будут использовать указанный идентификатор пользователя. Формат синтаксиса:
USER daemon
При использовании USER для указания пользователя вы можете использовать имя пользователя, UID или GID или их комбинацию. Ниже приведены юридические обозначения:
USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group
Укажите некоторые параметры в зеркалеиспользовать (например, информацию о номере версии и т. д.).,这些параметрсуществоватьосуществлятьdocker build
命令час才以--build-arg=
Формат передан。Формат синтаксиса:
ARG [=]
docker build --build-arg site=moewah.com -t moewah/test .
При настройке текущего созданного зеркала в качестве Базазеркало другого зеркала,所осуществлять的创建操作инструкция.Формат синтаксиса:
ONBUILD [INSTRUCTION]
Например, Dockerfile использоватьнравиться下的内容创建Понятнозеркалоimage-A
:
[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]
Если на основе image-A При создании нового изображения новый Dockerfile серединаиспользоватьFROM image-A
Обозначение Базазеркало,встреча自动осуществлять ONBUILD Содержание инструкции эквивалентно добавлению двух инструкций в конце:
FROM image-A
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
использовать ONBUILD Инструкция к зеркалу,Рекомендуется указать это на этикетке.,例нравитьсяruby:1.9-onbuild
。
STOPSIGNAL используется для установки сигнала системного вызова, который будет отправлен для остановки контейнера:
STOPSIGNAL signal
Все сигналы должны иметь допустимые значения в таблице системных вызовов ядра, например: SIGKILL.
Укажите другие командыиспользовать shell по умолчанию, когда shell тип.
SHELL ["executable", "parameters"]
Значение по умолчанию:["/bin/sh","-c"]
。
Создайте рабочую среду Nginx
# Обозначение Базазеркало
FROM sameersbn/ubuntu:14.04.20161014
# Информация для сопровождающего
MAINTAINER moewah "admin@mao.sh"
# Настройки
ЕНВ RTMP_VERSION=1.1.10 \
NPS_VERSION=1.11.33.4 \
LIBAV_VERSION=11.8 \
NGINX_VERSION=1.10.1 \
NGINX_USER=www-data \
NGINX_SITECONF_DIR=/etc/nginx/sites-enabled \
NGINX_LOG_DIR=/var/log/nginx \
NGINX_TEMP_DIR=/var/lib/nginx \
NGINX_SETUP_DIR=/var/cache/nginx
# При установке переменной сборки она станет недействительной после создания зеркала.
ARG BUILD_LIBAV=false
ARG WITH_DEBUG=false
ARG WITH_PAGESPEED=true
ARG WITH_RTMP=true
# копировать локальные файлы в каталог контейнера
COPY setup/ ${NGINX_SETUP_DIR}/
RUN bash ${NGINX_SETUP_DIR}/install.sh
# скопировать локальный файл конфигурации в каталог контейнера
COPY nginx.conf /etc/nginx/nginx.conf
COPY entrypoint.sh /sbin/entrypoint.sh
# запустить команду
RUN chmod 755 /sbin/entrypoint.sh
# Разрешить указанные порты
EXPOSE 80/tcp 443/tcp 1935/tcp
# Укажите точку монтирования каталога веб-сайта
VOLUME ["${NGINX_SITECONF_DIR}"]
ENTRYPOINT ["/sbin/entrypoint.sh"]
CMD ["/usr/sbin/nginx"]
Создайте среду Tomcat
# Укажите Базазеркало на основе
FROM ubuntu:13.10
# Информация для сопровождающего
MAINTAINER moewah "admin@mao.sh"
# Командные операции зеркала
# Получите обновленный список ресурсов от APT
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list
# Обновление программного обеспечения
RUN apt-get update
# Install curl
RUN apt-get -y install curl
# Install JDK 7
RUN cd /tmp && curl -L 'http://download.oracle.com/otn-pub/java/jdk/7u65-b17/jdk-7u65-linux-x64.tar.gz' -H 'Cookie: oraclelicense=accept-securebackup-cookie; gpw_e24=Dockerfile' | tar -xz
RUN mkdir -p /usr/lib/jvm
RUN mv /tmp/jdk1.7.0_65/ /usr/lib/jvm/java-7-oracle/
# Set Oracle JDK 7 as default Java
RUN update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-7-oracle/bin/java 300
RUN update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-7-oracle/bin/javac 300
# Настройте систему
ENV JAVA_HOME /usr/lib/jvm/java-7-oracle/
# Install tomcat7
RUN cd /tmp && curl -L 'http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.tar.gz' | tar -xz
RUN mv /tmp/apache-tomcat-7.0.8/ /opt/tomcat7/
ENV CATALINA_HOME /opt/tomcat7
ENV PATH $PATH:$CATALINA_HOME/bin
# Скопируйте tomcat7.sh в каталог в контейнере.
ADD tomcat7.sh /etc/init.d/tomcat7
RUN chmod 755 /etc/init.d/tomcat7
# Expose ports. Укажите открытые порты
EXPOSE 8080
# Define default command.
ENTRYPOINT service tomcat7 start && tail -f /opt/tomcat7/logs/catalina.out
tomcat7.sh
командный файл
export JAVA_HOME=/usr/lib/jvm/java-7-oracle/
export TOMCAT_HOME=/opt/tomcat7
case $1 in
start)
sh $TOMCAT_HOME/bin/startup.sh
;;
stop)
sh $TOMCAT_HOME/bin/shutdown.sh
;;
restart)
sh $TOMCAT_HOME/bin/shutdown.sh
sh $TOMCAT_HOME/bin/startup.sh
;;
esac
exit 0
Прежде всего попытайтесь понять значение и эффект выполнения каждой инструкции, напишите несколько простых примеров для тестирования, а затем напишите формальный файл Dockerfile. Кроме того, официальный репозиторий Docker Hub предоставляет большое количество отличных образов и соответствующих файлов Docker. Прочитав их, вы можете научиться писать эффективные файлы Docker.