Создайте подобный сайт на WordPress.com
Начало работы

Docker. Часть 2. Dockerfile и Docker-compose

Как мы уже знаем, Docker-контейнер разворачивается из Docker-образа, а настройки Docker-образа хранятся в Dockerfile.

Создание Docker-контейнера на основе Dockerfile

  1. Создаём отдельную папку и переходим в неё: mkdir docker && cd docker
  2. Создаём Dockerfile: vi Dockerfile
#Укажем базовый образ ОС (будет поиск по DockerHub)
FROM ubuntu

#Указываем свои учётные данные при создании образа
MAINTAINER ALEXEY <ваш адрес почты>

#Укажем команды (устанавливаем cowsay и добавляем её в быстрый запуск)
RUN apt-get update && apt-get install -y cowsay && ln -s /usr/games/cowsay /usr/bin/cowsay

#Команда cowsay будет автоматически запускаться при обращении к контейнеру
ENTRYPOINT ["cowsay"]

3. Создаём Docker Image на основе Dockerfile: docker build -t tv1n94/ubuntu-cows-file .

4. Отправляем наш Docker Image в реестр DockerHub: docker push tv1n94/ubuntu-cows-file

5. Запускаем Docker контейнер на основе образа с DockerHub: docker run tv1n94/ubuntu-cows cowsay «WHATSAPP, BRO!»

vagrant@d10:~/docker$  docker run tv1n94/ubuntu-cows cowsay "WHATSAPP, BRO!"
Unable to find image 'tv1n94/ubuntu-cows:latest' locally
latest: Pulling from tv1n94/ubuntu-cows
e6ca3592b144: Already exists
534a5505201d: Already exists
990916bd23bb: Already exists
e1948d9d9063: Already exists
Digest: sha256:730e0ff5d4c1f0f97dec0cf0acd39c2e7ed2c75dea6a0ad4d80e2d2890445944
Status: Downloaded newer image for tv1n94/ubuntu-cows:latest
 ________________
< WHATSAPP, BRO! >
 ----------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
vagrant@d10:~/docker$

Соединение контейнеров между собой

Допустим у нас есть контейнер с базой данных и отдельный контейнер с СУБД управления. Давайте свяжем между собой 2 контейнера:

  1. Запускаем контейнер с БД (Через параметр -e можно указывать переменные контейнера. Укажем пароль root к MYSQL): docker run —name mariadb -e MYSQL_ROOT_PASSWORD=pass123456 -d mariadb

2. Запускаем контейнер Adminer и указываем, что БД находится в другом контейнере: docker run —link mariadb:db -p 1234:8080 -d adminer

Параметр —link отвечает за соединение с другим контейнером.

Для более удобного объединения контейнеров между собой используют Docker-compose.

Dokcer-compose — инструмент для создания и запуска многоконтейнерных приложений. В Compose контейнеры описываются специальным файлом docker-compose.yml (или .yaml)

Давайте создадим отдельную папку и добавим туда файл docker-compose.yml:

mkdir mydocker && cd mydocker

vi docker-compose.yml

# Use root/example as user/password credentials
#Версия файла. Нужно проверить, какая версия поддерживается докером
version: '3.1'


services:
  #имя контейнера
  db:
    #Образ из которого будет разворачиваться контейнер
    image: mariadb
    #Функция автоматическокго рестарта (no - никогда, on-failure - после
    #критической ошибки, always - рестарт в любом случае)
    restart: always
    #Дополнительные значения переменных (например пароль)
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    #Указываем папку, смонтированную из ОС (папка в ОС:папка в контейнере)
    volumes:
       - ./db:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
	#проброс порта (порт снаружи:порт внутри)
    ports:
      - 1234:8080

Параметр version отвечает за версию Docker-compose. С версией нужно быть внимательным, иногда в новой версии нет каких-то функций или добавляются новые. Проверить работу docker с версиями можно на официальном сайте docker, предварительно поняв, какая версия Docker установлена на вашем компьютере:

vagrant@d10-sysops:~/mydocker$ docker -v
Docker version 19.03.8, build afacb8b7f0
vagrant@d10-sysops:~/mydocker$ docker-compose -v
docker-compose version 1.25.5, build 8a1c60f6
vagrant@d10-sysops:~/mydocker$

В Docker-compose не должно быть TABов, можно использовать только пробелы.

Из Docker-compose можно ссылаться не только на образ, но и на Dockerfile, тогда вместо параметра IMAGE надо указать параметр BUILD. Одновременно нельзя использовать оба параметра для одного сервиса!

services:
  db:    
    build: ./db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456

В разделе build указана папка db, в ней должен быть файл docker-compose.yml. Файл описания может быть назван другим именем, но тогда в разделе build ещё нужно указать имя файла.

Тома Docker (volumes) — это папки операционной системы, которые смонтированы в Docker-контейнер. Могут быть смонтированы как отдельные файловые системы внутри контейнера. Если выключить контейнер, то данные в папке не пропадут.

Добавить volumes можно при запуске контейнера, например docker run -v /data ubuntu или в Dockerfile, указав параметр VOLUME /data

Основные команды docker-compose

Запуск образа на основе Docker-composedocker-compose up
Запуск образа Docker-compose в интерактивном режиме:docker-compose up -d
Просмотр запущенных контейнеровdocker-compose ps
Запрос адреса виртуальной машины на которой работает Docker (Работает только на Windows)docker-machine ip default
Останавливаем рабочий проектdocker-compose stop
Удаление образа dbdocker-copose rm db
Выполнение перестройки проекта (применение изменений)docker-copose build

UnionFS

Каждый образ состоит из нескольких слоёв. UnionFS объединяет все слои в контейнер. До запуска контейнера все слои находятся в режиме чтения.
При запуске контейнера появляется дополнительный слой чтение/запись, чтобы можно было вносить изменения. Если остановить контейнер, то слой чтение\запись удалится. Если нужно чтобы изменения сохранились, то необходимо сделать docker commit

Посмотреть историю изменения слоёв можно с помощью команды: docker history ubuntu-cows:latest

Самый простой способ уменьшить размер образа — это удалить ненужные слои(Сделать меньше шагов при формировании инструкций). Также если во время создания образа есть какие-то инструкции, который распаковывают архивы, то архив потом лучше удалять…

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

%d такие блоггеры, как: