Версию для 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
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 использует файлы с расширением 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
Каждый образ состоит из последовательности слоев. 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"]