Инструменты пользователя

Инструменты сайта


docker

Docker

Установка

Версию для windows брать тута
Установка версии для linux - Debian 9.6.0 Ман с оффсайта

apt-get update # Тут все ясно
apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     software-properties-common # Ставим зависимости
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - # добавляем ключ
# Сравниваем отпечаток
apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22
# Добавляем в source.list
deb [arch=amd64] https://download.docker.com/linux/debian stretch stable
# Собственно устанавливаем сам docker
apt-get install docker-ce
# И проверяем
docker run hello-world
docker run -it ubuntu bash # Устанавливаем образ ubuntu и сразу заходим в ее шел
# Для проверки установим пакет
apt update
apt install mc

Про установку Docker Compose читать здеся

# Установка Docker Compose
curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# Делаем скрипт исполняемым
chmod +x /usr/local/bin/docker-compose
# Проверяем версию
docker-compose --version
# собственно на этом инсталляция окончена

Основные команды

docker run -it ubuntu bash
# Флаги -i и -t говорят docker о том, что нужно создать сеанс интерактивной работы на 
# подключаемом терминальном устройстве
# команда bash инициализирует командную оболочку bash
# Вывод всех контейнеров, включая остановленные
docker ps -a
# Запуск контейнера по имени
docker start gallant_shtern
# Просмотр запущенных контейнеров
docker ps
# Остановка контейнера по имени
docker stop  gallant_shtern
# Инициализируем новый контейнер с указанием имени хоста
docker run -h host-name -it ubuntu bash
# Получение информации о контейнере
docker inspect serene_aryabhata
# Фильтрация информации по IP
docker inspect serene_aryabhata | grep IPAddress
# Посмотреть список измененных файлов в контейнере
docker diff MyConteiner_name
# Просмотр событий внутри заданного контейнера
docker logs MyConteiner_name
# Для уничтожения контейнера надо использовать следующию команду
docker rm romantic_mendel
# Чтобы посмотреть ID всех остановленных контейнеров
docker ps -aq -f status=exited
# Удаление несколько контейнеров по ID
docker rm -v $(docker ps -aq -f status=exited)

C официального хаба берем нужный образ, а данном случае этот Копируем имя и запускаем командой

# флаг -d означает, что образ будет запущен в фоновом режиме
docker run -d httpd

Проброс портов

docker run -d -p 5001:80 httpd

Образы

# Посмотреть список образов
docker images

Создание образа

# Сначала создаем контейнер
docker run -it --name python_app --hostname python_app  ubuntu bash
# В созданном контейнере
apt update
apt-get install cowsay
ln -s /usr/games/cowsay /usr/bin/cowsay
# Далее превращаем контейнер в образ
docker commit python_app DockerUserName/AppSomeName
# Смотрим образы, наш образ DockerUserName/AppSomeName появился
docker images
# Запускаем свой образ
docker run DockerUserName/AppSomeName cowsay wtf
# Отправляем образ на DockerHub
docker login
docker push DockerUserName/cowsay_app

удаление образов

docker rmi NameImage
# Удаление пустых репозитариев <none>
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

DockerFile

Создаем файл с именем Dockerfile

FROM debian # определяет базовый образ ос
 
MAINTAINER AuthorName <post@gAuthor.name>
 
RUN apt-get update && apt-get install -y cowsay && ln -s /usr/games/cowsay /usr/bin/cowsay
 
ENTRYPOINT ["cowsay"]

Теперь можем создать образ выполнив команду в том же каталоге

# флаг -t отвечает за имя образа
docker build -t pinkythecat/myapp2 .
# Запускаем созданный образ
docker run DockerUserName/myapp2 TEST

Соединение контейнеров

Соединяем два контейнера, один с mariadb форк mysql, другой adminer, библиотека управлением бд.

# Устанавливаем контейнер с бд согласно инструкции на докер хабе
# databaseserver - имя которое даем контейнеру
# флаг -d запускает контейнер в фоновом режиме
docker run --name databaseserver -e MYSQL_ROOT_PASSWORD=P@$$w0rD -d mariadb
# Устанавливаем adminer, связь с бд осуществляется через --link databaseserver:db
docker run --link databaseserver:db -p 8080:8080 adminer

Docker-compose

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

# Узнаем версию docker и docker-compose
docker -v
docker-compose -v

создаем файл docker-compose.yml

# Инструкция для создания docker-compose смотрим на хабе разработчика контейнера
version: '3.1'

services:

  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

Запускаем данный файл с инструкцией

docker-compose up
# для запуска  в фоновом режиме используем флаг -d
docker-compose up -d

чтобы посмотреть контейнеры запущенные с помощью docker-compose выполняем следующую команду

docker-compose up -d

в ос win чтобы узнать адрес подключения созданных контейнеров используем команду

docker-machine ip default

А теперь чутка повеселее. Сейчас будем монстрячить docker-compose вместе с Dockerfile
добавляем ключ build, который сообщает, что образ для данного контейнера должен быть создан из Dockerfile расположенного в текущем каталоге. Каждое определение контейнера должно содержать либо ключ build либо ключ image

version: '3.1'

services:

  db:
    build: ./path
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

А вот и Dockerfiles

# для mariadb
mkdir db
FROM mariadb
# для adminer
mkdir adminer
FROM adminer

теперь пробуем запустить всю эту красоту

# перестроим наш проект
docker-compose build
# запускаем
docker-compose up

Тома

Тома Docker - это каталоги, которые не являются частью файловой системы конкретного контейнера. А представляют собой обычные каталоги, в файловой системе хоста. Но могут быть смонтированы как отдельные файловые системы внутри контейнера
Существует три разных способа инициализации томов.

Первый. Можно объявить том, при запуске контейнера с помощью флага -v. Любые файла которые сохранили в каталоге date, копируются на этот том.

docker run -v /data ubuntu

Можно проверить расположение данного тома в файловой системе хоста выполнив команду

docker inspect -f{{.Mounts}} containerName

Второй способ. С помощью инструкции VOLUME/data в файле Dockerfile. Результат будет тот же самый, что и при использование
ключа -v.
Третий способ. Состоит в расширение аргументов команды docker run с явным указанием используемого каталога

директория_на_хосте:в_контейнере
/path/to/data:data

Модифицируем предыдущий пример, добавим тома. В проекте создадим директорию, где будет содержатся бд - databases.

version: '3.1'

services:

  db:
    build: ./db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 1793
    volumes:
      - ./databases:/var/lib/mysql

  adminer:
    build: ./adminer
    restart: always
    ports:
      - 6080:8080

Удаляем предыдущий контейнер по имени сервиса в файле

docker-compose rm db

Пересобираем и перезапускаем

docker-compose build
docker-compose up

UnionFS

Каждый образ состоит из последовательности слоев. Docker использует Union File System для объединения этих слоев в единый образ. Эта файловая система позволяет файлам и директориям отдельных файловых систем, известных как ветки, быть прозрачно наложенными друг на друга, чтобы образовать единую файловую систему.

Чтобы посмотреть количество слоев в образе, выполним команду:

docker history ImageName

Для возможности посмотреть создаваемые слои, создадим контейнер из Dockerfile

FROM debian

MAINTAINER Vadim N <nevvad@gmail.com>

RUN apt-get update && apt-get install -y mc

ENTRYPOINT ["mc"]

На основе его, создадим образ

 docker build -t mctest .

Посмотрим его историю

docker history mctest:latest

Уменьшение размера образа при создание

FROM debian

MAINTAINER Vadim N <nevvad@gmail.com>

RUN apt-get update \
    && apt-get install -y mc \
    && rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["mc"]

Работа с сетью

Для того чтобы проверить какие сети имеются, выполним команду:

docker network ls


Где:

  • NETWORK ID — При создании сети, ей присваивается ID. Так это собственно индификатор сети.
  • NAME — Имя сети. Можно задать произвольное имя.
  • DRIVER — Используемый драйвер для созданной сети.
  • SCOPE — Где используется.
docker.txt · Последнее изменение: 2019/10/01 16:13 (внешнее изменение)