Thank you for reading this post, don't forget to subscribe!
Основные способы использования Docker:
- Автоматизация упаковки и развертывания приложений
- Создание собственных легковесных PaaS окружений
- Автоматизация тестирования и непрерывной интеграции/развертывания
- Развертывание и масштабирование веб-приложений, баз данных и сервисов бекенда
В то время как пакет Докер предоставляется по умолчанию как часть CentOS-7, это предусмотрено в хранилище EPEL для CentOS-6. Пожалуйста, обратите внимание, что это немного меняет инструкции по установке различных версий. Если вам потребуется последняя версия, вы всегда можете использовать самую последнюю версию и скачать его бинарный файл, который работает на ядре 3.8 или выше.
Эти инструкции работают для CentOS 6 и более поздних версий. Они, скорее всего, будут работать для других бинарных совместимых дистрибутивов EL6, таких как Scientific Linux, но они не были проверены.
Пожалуйста, обратите внимание, что из-за существующих ограничений Docker, он может работать только на 64-битной архитектуры.
Чтобы запустить Docker вам нужно CentOS6 или выше, с ядром версии 2.6.32-431 или выше.
[root@centos64 ~]# uname -a
Linux centos64 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Пожалуйста, обратите внимание, что это для CentOS-6, этот пакет является частью дополнительных пакетов для Enterprise Linux (Epel), по этому нужно подключить EPEL репозиторий.
Пакет docker-io обеспечивает установку Docker через Epel.
Также рекомендовано обновить ядро:
uname -r
=> 2.6.32-279.el6.x86_64
далее nano /etc/grub.conf
меняем default=0 указывая строку с новым ядром (отсчёт ведётся с нуля)
Если вы уже установили (не связанный) докер пакет, он будет конфликтовать с Docker-IO. Чтобы продолжить установку c Docker-IO, пожалуйста, удалите докер в первую очередь.
Далее, давайте установим docker-io пакет, который установит Docker:
yum install docker-io -y
Использование Docker
После установки Docker, вы должны будете запустить докер демон:
service docker start
Если вы хотите чтобы Docker запускался при загрузке вашей ОС, то выполните:
chkconfig docker on
Теперь давайте убедиться, что Докер работает. Сначала нужно получить последнюю версию CentOS образа:
docker pull centos
Чтобы скачать centos 6 воспользуйтесь следующей командой:
docker pull centos:centos6
это скачает образ ОС, так же можно скачать готовый контейнер с готовой программой ( например nginx, apache mysql и так далее), выполнив:
docker package_name
docker pull nginx
package_name — имя программы (готовый контейнер с программой).
если необходимо найти определённую сборку воспользуйтесь командой:
docker search
Получить список образов, которые есть на локальной машине:
# docker images
Остановить все контейнеры и потом удалить все контейнеры:
# docker stop $(docker ps -a -q)# docker rm $(docker ps -a -q)
Удалить образ
docker rmi
Сервис Docker
Управление сервисом Docker'а:
sudo service docker start|stop|restart|statussudo restart docker # алиас
Основные команды по работе с контейнерами
docker create
создать контейнер, но не запускать его
docker run
создать и запустить контейнер
docker stop
остановить контейнер
docker start
запустить существующий остановленный контейнер
docker restart
перезапустить контейнер
docker rm
удалить контейнер
docker kill
отправить сигнал SIGKILL контейнеру
docker attach
подключиться к работающему контейнеру
docker wait
блокировать команду и ждать, пока контейнер не остановится
Информация о контейнерах
docker ps
показать работающие контейнеры (или вообще контейнеры, если использовать дополнительные опции)
docker ps -a
показать ВСЕ контейнеры
docker inspect
показать всю информацию о контейнере, включая IP-адреса
docker logs
показать лог-вывод контейнера
В режиме tail -f:
docker logs -f
docker events
показать события контейнера
docker port
показать открытые наружу порты контейнера
docker top
показать процессы, работающие внутри контейнера
docker stats
показать статистику использования ресурсов контейнером
docker diff
показать изменённые файлы в файловой системе контейнера
Просмотреть конфигурацию контейнера в JSON-формате: docker inspect container_name
Просмотреть отдельную часть конфигурации/переменную: docker inspect -f '{{ .NetworkSettings.IPAddress }}' container_name
Все изменения в существующем вашем контейнере вы можете закоммитить в образ чтобы в будущем можно было воспользоваться им:
docker commit <id_контейнера> <имя_образа>
ВЫХОД ИЗ КОНТЕЙНЕРА БЕЗ ЕГО ОСТАНОВКИ:
CTRL+P+Q
Перенос образа на другой хост
Например, вы уже все настроили (все ваши приложение в Docker и так же закоммитили в образ), то после этого всего можно уже смело сохранить образ в файл для переноса на другой хост:
docker save имя_образа > ~/my_container_for_nransfer.tar
После чего необходимо скопировать данный архив (образ) на другой хост ( предположим через scp) и нужно после чего импортировать его в Docker.
docker load < /tmp/my_container_for_nransfer.tar
Создание контейнер-демона
Конечно, можно создавать и долго живущие контейнеры, подходящие для запусков приложений и сервисов. Такие контейнеры не имеют интерактивной сессии:
docker run --name container_name -d centos /bin/bash -c "while true; do echo hello world; sleep 1; done"
container_name – имя контейнера.
Можно посмотреть, что происходит внутри вашего контейнера используя:
docker logs <container_name>
Если необходимо остановить ваш контейнер, то воспользуйтесь:
$ docker stop <container_name>
Чтобы запустить ваш контейнер выполните:
docker start <container_name>
выполнение цикла while продолжится в контейнере.
Чтобы посмотреть детали вашего контейнера используйте:
docker inspect <container_name>
Для удаления вашего контейнер, используйте:
docker rm <container_name>
Создаем (прописываем) имя хоста в своем контейнерe:
docker run -t -i --hostname=ubuntu-box debian /bin/bash
Так же можно добавить параметр который добавит корректное имя вашего контейнера (я рассказывал это вверху).
Положить/достать данные в контейнер
Если Вы хотите скопировать данные в контейнер или извлечь из него что то:
docker cp <путь_к_данным_на_хосте> <container_name>:<путь>
Например нужно скачать с контейнера некоторый файл и положить его в домашнюю директорию:
docker cp bcfa1008952e:/etc/nginx/nginx.conf /home/captain/
bcfa1008952e -это ИД самого контейнера
Можно подмонтировать папку хоста в контейнер при создании:
docker run -v /tmp:/root -t -i <имя_образа>
/tmp – это путь к папке на вашем хосте.
/root – путь к папке на вашем сервере.
Так вы легко можете работать с данными из контейнера с данными на хосте и исключить необходимость копирования данных в обе стороны.
Как пробросить порт в созданном контейнере Docker?
iptables -t nat -A DOCKER -p tcp --dport 8002 -j DNAT --to-destination 192.168.103.193:80
Замечание: Нужно стартануть тот контейнер на котором нужно пробросить порт и запускаем команду что выше. Она откроет порт «80» на 192.168.103.193 ИП.
ПРИМЕР.
Я поставлю уже готовый контейнер только с одной программой — nginx:
docker run --name some-nginx -p 192.168.103.189:8080:80 -v /some/content:/var/nginx/docker.localhost.localdomain:ro -d nginx
192.168.103.189 — IP адрес виртуальной машины.
8080 — это порт на котором будет работать nginx.
80 — это порт на котором работает докер.
Если не указать IP адрес, то он будет слушать все ИП адреса.
Установка Docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
Docker Compose упрощает жизнь если у вас больше одного контейнера. С помощью одного, а иногда нескольких файлов, мы описываем какие контейнеры запускать, их настройки и связи между контейнерами. Начиная со второй версии docker compose поддерживает наследование и можно с его помощью описывать разные конфигурации для разных окружений. команды не только похожи на команды от docker, они и предоставляют аналогичный функционал.
Единственная разница состоит в том, что применяются они не к отдельному контейнеру, а ко всей группе, определенной в конфигурационном файле docker-compose.yml
- Команды для работы с образами: save, search, images, import, export, tag, history…
- Команды для взаимодействия с пользователем: attach, exec, run -i, login, wait
Отдельно стоит запомнить команду docker-compose up. Она представляет собой упрощенный вызов docker-compose build && docker-compose run
Команды Docker Compose
Рассмотрим команды, которые поддерживает Docker Compose.
Команда docker-compose работает на уровне каталога. На одной машине можно иметь несколько групп контейнеров; для этого нужно создать отдельный каталог и отдельный файл docker-compose.yml для каждого контейнера.
Вы уже запускали команду docker-compose up и остановили процесс при помощи комбинации CTRL-C. Это выводит в окно терминала отладочные сообщения. Однако в среде производства инструмент docker-compose должен работать как сервис. Для этого достаточно добавить опцию –d:
docker-compose up -d
Эта команда запускает docker-compose в фоновом режиме.
Чтобы просмотреть группу контейнеров Docker (и запущенных, и отключенных), используйте следующую команду:
docker-compose ps
К примеру, вывод может иметь такой вид (этот вывод сообщает, что контейнер helloworld_my-test_1 отключен):
Name Command State Ports
-----------------------------------------------
helloworld_my-test_1 /hello Exit 0
Состояние запущенных контейнеров – Up:
Name Command State Ports
---------------------------------------------------------------
nginx_nginx_1 nginx -g daemon off; Up 443/tcp, 80/tcp
Чтобы остановить все контейнеры Docker в группе конкретного приложения, выполните следующую команду в каталоге, в котором находится файл docker-compose.yml, при помощи которого был запущена группа Docker:
docker-compose stop
Примечание: Также можно использовать команду docker-compose kill.
Иногда Docker хранит информацию во внутреннем томе. Чтобы вернуть среду в её исходное состояние, нужно использовать команду rm, которая удаляет все контейнеры, созданные группой:
docker-compose rm
Если запустить эту команду в другом каталоге (не в том, в котором хранится контейнер Docker и yml-файл), команда вернёт ошибку:
Can't find a suitable configuration file in this directory or any parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml, fig.yml, fig.yaml
Ниже приведён пример подобного файла.
# Версия docker-compose
version: '2'
# Список наших сервисов (контейнеров)
services:
nginx:
# используем последний стабильный образ nginx
image: nginx:latest
# маршрутизируем порты
ports:
- "8000:80"
# монтируем директории, слева директории на основной машине, справа - куда они монтируются в контейнере
volumes:
- ./hosts:/etc/nginx/conf.d
- ./www:/var/www
- ./logs:/var/log/nginx
# nginx должен общаться с php контейнером
links:
- php
php:
# у нас свой образ для PHP, указываем путь к нему и говорим что его надо собрать
build: ./images/php
# этот образ будет общаться с mysql
links:
- mysql
# монтируем директорию с проектами
volumes:
- ./www:/var/www
mysql:
image: mariadb
ports:
- "3306:3306"
volumes:
- ./mysql:/var/lib/mysql
# задаем пароль для root пользователя
environment:
MYSQL_ROOT_PASSWORD: secret
pma:
# используем последний стабильный образ phpmyadmin
image: phpmyadmin/phpmyadmin
restart: always
links:
- mysql:mysql
ports:
- 8183:80
environment:
# прописываем название нашего MySQL хоста
PMA_HOST: mysql
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: secret
Создадим/запустим контейнер с Centos 6 (если образ предварительно не был скачан, то Docker сам автоматически его скачает с Docker public registry)
docker run -dit --name apache_php53 --hostname="apache_php53" -p 8053:8053 centos6 /bin/bash
docker run [опции] образ [команда]
--name Имя контейнера вместо ID
-w Указать рабочую директорию (--workdir)
-e Установить переменную окружения в контейнере
-u Пользователь:группа под которым должен быть запущен контейнер
-v Смонтировать в контейнер файл или каталог хост-системы
-d – запускать контейнер в фоновом режиме
-p Пробросить порт(ы) контейнера - <порт хост-системы>:<порт контейнера> (--publish=[])
--entrypoint Заменить дефолтную команду из ENTRYPOINT файла Dockerfile
-t - запускать контейнер в интерактивном режиме
-i - выделить tty-терминал, который требуется для присоединения к контейнеру
--hostname – установить имя хоста внутри контейнера
Создание/построение образа из Dockerfile
Создадим образ с Ubuntu 16.04, который впоследствии может быть использован для создания контейнера. Для этого создадим Dockerfile, в котором пропишем необходимые инструкции
# mkdir -p /root/ubuntu16.04 && cd /root/ubuntu16.04
# nano Dockerfile
# This is a comment
FROM ubuntu:16.04
MAINTAINER Eugene Kamenev <username@mydomain.com>
RUN apt-get update && apt-get install -y apache2
Формат Dockerfile имеет вид
INSTRUCTION statement
Комментариям предшествует символ #
Название инструкции пишутся с большой буквы
В Dockerfile были использованы следующие инструкции
FROM - определяет какой источник использовать для нашего образа – устанавливаем Ubuntu 16.04
MAINTAINER – имя и E-mail лица, обслуживающего этот образ
RUN - команды, которые необходимо выполнить внутри образа – обновляемый локальный кеш пакетов и устанавливаем Apache
CMD указывает, какую команду необходимо запустить, когда контейнер запущен. В отличие от команды RUN указанная команда исполняется не во время построения образа, а во время запуска контейнера.
CMD ["/bin/bash", "-l"]
Важно помнить, что вы можете перегрузить команду CMD, используя docker run.
ENTRYPOINT
Часто команду CMD путают с ENTRYPOINT. Разница в том, что вы не можете перегружать ENTRYPOINT при запуске контейнера.
ENTRYPOINT ["/usr/sbin/nginx"]
При запуске контейнера параметры передаются команде, указанной в ENTRYPOINT.
docker run -d trukhinyuri/static_web -g "daemon off"
Можно комбинировать ENTRYPOINT и CMD.
ENTRYPOINT ["/usr/sbin/nginx"]
CMD ["-h"]
В этом случае команда в ENTRYPOINT выполнится в любом случае, а команда в CMD выполнится, если не передано другой команды при запуске контейнера. Если требуется, вы все-таки можете перегрузить команду ENTRYPOINT с помощью флага --entrypoint.
WORKDIR
С помощью WORKDIR можно установить рабочую директорию, откуда будут запускаться команды ENTRYPOINT и CMD.
WORKDIR /opt/webapp/db
RUN bundle install
WORKDIR /opt/webapp
ENTRYPOINT ["rackup"]
Вы можете перегрузить рабочую директорию контейнера в рантайме с помощью флага -w.
USER
Специфицирует пользователя, под которым должен быть запущен образ. Мы можем указать имя пользователя или UID и группу или GID.
USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group
Вы можете перегрузить эту команду, используя глаг -u при запуске контейнера. Если пользователь не указан, используется root по-умолчанию.
VOLUME
Инструкция VOLUME добавляет тома в образ. Том — папка в одном или более контейнерах или папка хоста, проброшенная через Union File System (UFS).
Тома могут быть расшарены или повторно использованы между контейнерами. Это позволяет добавлять и изменять данные без коммита в образ.
VOLUME ["/opt/project"]
В примере выше создается точка монтирования /opt/project для любого контейнера, созданного из образа. Таким образом вы можете указывать и несколько томов в массиве.
ADD
Инструкция ADD добавляет файлы или папки из нашего билд-окружения в образ, что полезно например при установке приложения.
ADD software.lic /opt/application/software.lic
Источником может быть URL, имя файла или директория.
ADD http://wordpress.org/latest.zip /root/wordpress.zip
ADD latest.tar.gz /var/www/wordpress/
В последнем примере архив tar.gz будет распакован в /var/www/wordpress. Если путь назначения не указан — будет использован полный путь включая директории.
COPY
Инструкция COPY отличается от ADD тем, что предназначена для копирования локальных файлов из билд-контекста и не поддерживает распаковки файлов:
COPY conf.d/ /etc/apache2/
ONBUILD
Инструкция ONBUILD добавляет триггеры в образы. Триггер исполняется, когда образ используется как базовый для другого образа, например, когда исходный код, нужный для образа еще не доступен, но требует для работы конкретного окружения.
ONBUILD ADD . /app/srcONBUILD RUN cd /app/src && make
______________________________________________________
ПРИМЕРЫ
Ставим apache и php версию 5,3
качаем образ базовый:
[root@centos64 ~]# docker search centos6
[root@centos64 ~]# docker pull centos:6
проверяем:
[root@centos6 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 6 c5c4288a6477 8 weeks ago 193.9 MB
создадим контейнер:
docker run -d --restart=always --name apache_php53 --hostname=apache_php53 -p 8053:8053 -v /etc/httpd/conf.d/docker53:/etc/httpd/conf.d/ -v /var/www/:/var/www/ centos:6
5685827b5a0759e2f25e3e6df85b443d49f361becd0516dd13ce79bf7a5e285a
-d – запускать контейнер в фоновом режиме
-t - запускать контейнер в интерактивном режиме
-i - выделить tty-терминал, который требуется для присоединения к контейнеру
--restart=always - автозапуск
--name apache_php53 - Имя контейнера вместо ID
--hostname – установить имя хоста внутри контейнера
-p Пробросить порт(ы) контейнера - <порт хост-системы>:<порт контейнера>
-v Смонтировать в контейнер файл или каталог хост-системы
дополнительно:
(
-w Указать рабочую директорию (--workdir)
-e Установить переменную окружения в контейнере
-u Пользователь:группа под которым должен быть запущен контейнер
)
проверим:
[root@centos64 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5685827b5a07 centos:6 "/bin/bash" 25 seconds ago Up 24 seconds tcp, 0.0.0.0:8053->8053/tcp apache_php53
подключимся и произведём установку:
docker attach apache_php53
yum -y install httpd mod_ssl
chkconfig httpd on
sed -i 's|Listen 80|Listen 8053|' /etc/httpd/conf/httpd.conf
sed -i 's|#ServerName www.example.com:80|ServerName www.example.com:8053|' /etc/httpd/conf/httpd.conf
yum install php php-common php-gd php-mysql php-xml php-mbstring -y
[root@apache_php53 ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
Ставим apache и php версию 5,4
docker run -dti --restart=always --name apache_php54 --hostname=apache_php54 -p 8054:8054 -v /etc/httpd/conf.d/docker54:/etc/httpd/conf.d/ -v /var/www/:/var/www/ centos:6
29d8fa0214c99f50c476ac5b442c77384d0df56e19bd6a349a95c34f10033972
docker attach apache_php54
yum install wget httpd mod_ssl -y
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpmwget http://rpms.famillecollet.com/enterprise/remi-release-6.rpmrpm -Uvh epel-release-6-8.noarch.rpm remi-release-6.rpm yum install yum-utilsyum-config-manager --enable remi-php54yum install php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-fileinfo
sed -i 's|Listen 80|Listen 8054|' /etc/httpd/conf/httpd.conf
sed -i 's|#ServerName www.example.com:80|ServerName www.example.com:8054|' /etc/httpd/conf/httpd.conf
[root@apache_php54 ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
добавим стандартный виртуалхост:
[root@centos64 ~]# cat /etc/httpd/conf.d/docker53/tt.ru.conf
<VirtualHost *:8053>
ServerAdmin webmaster@tt.ru
DocumentRoot /var/www/user1/site/tt.ru
ServerName tt.ru
ServerAlias www.tt.ru
ErrorLog /var/www/user1/logs/tt.ru.error.log
CustomLog /var/www/user1/logs/tt.ru.access.log common
</VirtualHost>
[root@centos64 ~]# cat /etc/httpd/conf.d/docker54/tt.ru.conf
<VirtualHost *:8054>
ServerAdmin webmaster@tt.ru
DocumentRoot /var/www/user1/site/tt.ru
ServerName tt.ru
ServerAlias www.tt.ru
ErrorLog /var/www/user1/logs/tt.ru.error.log
CustomLog /var/www/user1/logs/tt.ru.access.log common
</VirtualHost>
правим конфиг файл nginx
[root@centos64 ~]# cat /etc/nginx/conf.d/tt.ru.conf
server {
listen 80;
server_name tt.ru www.tt.ru;
access_log /var/www/user1/logs/tt.ru.nginx.access.log combined;
error_log /var/www/user1/logs/tt.ru.nginx.error.log error;
client_max_body_size 5m;
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 4;
gzip_min_length 1024;
gzip_types text/css text/plain text/json text/x-js text/javascript text/xml application/json application/x-javascript application/xml application/xml+rss application/javascript;
gzip_vary on;
gzip_http_version 1.0;
gzip_disable msie6;
location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|swf|js|html|htm|)$ {
root /var/www/user1/site/tt.ru;
}
location / {
proxy_pass http://127.0.0.1:8054;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Set-Cookie;
}
}
если понадобится версия 5.3 нужно скорректировать строку:
proxy_pass http://127.0.0.1:8054; на proxy_pass http://127.0.0.1:8053;
Сохраняем образы:
[root@centos64 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29d8fa0214c9 centos:6 "/bin/bash" 30 minutes ago Up 30 minutes 0.0.0.0:8054->8054/tcp apache_php54
4b27322086ce centos:6 "/bin/bash" 39 minutes ago Up 39 minutes 0.0.0.0:8053->8053/tcp apache_php53
[root@centos64 ~]# docker commit -m "apache_php53" -a "polzovatel root" 4b27322086ce apache_php53
99fe1159d2770df097f7131484bcb265a0478b3b9a971146f55b8e8e081226ce
[root@centos64 ~]# docker commit -m "apache_php54" -a "polzovatel root" 29d8fa0214c9 apache_php54
f09737b4700a597597c40f143e88ac9304ea2236e06ba3795e1dd332cd4e2775
[root@centos64 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
apache_php54 latest f09737b4700a 7 seconds ago 684.2 MB
apache_php53 latest 99fe1159d277 53 seconds ago 619.3 MB
centos 6 fe05c7caac05 21 months ago 497.2 MB
-m – сообщение,которое будет информировать других пользователей о том, какие изменения были сделаны(аналогично опции -m
при использовании систему управления версиями)
-a - автор коммита
4b27322086ce – ID-контейнера
apache_php53 – имя нового Docker-образа
Теперь эти образы можно использовать при запуске/создании контейнера:
docker run -dti --restart=always --name apache_php54 --hostname=apache_php54 -p 8054:8054 -v /etc/httpd/conf.d/docker54:/etc/httpd/conf.d/ -v /var/www/:/var/www/ apache_php54 /bin/bash
Соберём теже 2 образа, но через dockerfile
1ый образ:
cat Dockerfile
FROM centos:6
MAINTAINER mid
RUN yum -y install httpd mod_ssl \
&& yum -y install php php-common php-gd php-mysql php-xml php-mbstring
EXPOSE 8053
ENV HOSTNAME apache_php53
ENV NAME apache_php53
VOLUME ["/etc/httpd/conf.d/", "/var/www/"]
ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]
соберём командой:
docker build -t apache_php53 .
apache_php53 - название образа
соберём второй образ, для этого создадим отдельную директорию и поместим туда dockerfile
cat 2/dockerfile
FROM centos:6
MAINTAINER mid
RUN yum -y install wget \
&& wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm \
&& wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm \
&& rpm -Uvh epel-release-6-8.noarch.rpm remi-release-6.rpm \
&& yum -y install yum-utils \
&& yum-config-manager --enable remi-php54 \
&& yum -y install php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-fileinfo \
&& sed -i 's|Listen 80|Listen 8054|' /etc/httpd/conf/httpd.conf \
&& sed -i 's|#ServerName www.example.com:80|ServerName www.example.com:8054|' /etc/httpd/conf/httpd.conf
EXPOSE 8054
ENV HOSTNAME apache_php54
ENV NAME apache_php54
VOLUME ["/etc/httpd/conf.d/", "/var/www/"]
ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]
соберём командой:
docker build -t apache_php54 2/
2/ это директория в которой находится второй dockerfile
apache_php54 - название образа
проверим
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
apache_php54 latest d1babfafff06 6 seconds ago 643.6 MB
apache_php53 latest 2be5d3645433 7 minutes ago 578.9 MB
centos 6 fe05c7caac05 21 months ago 497.2 MB
ОШИБКИ
Если при запуске docker-compose получаем ошибку вида:
ERROR: The Docker Engine version is less than the minimum required by Compose. Your current project requires a Docker Engine of version 1.10.0 or greater.
то понижаем версию composer:
1 2 |
curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose |