Базовые заметки про docker

Шпаргалка по командам докера

  • docker system prune - удалит остановленные контейнеры, все висячие образы и все неиспользуемые сети

контейнер

  • docker run имя_контейнера - запуск контейнера (можно указать образ:тэг, тогда поднимется новый контейнер)

    • -d - в фоновом режиме
    • --name название_контейнера - со своим названием контейнера
    • -p 8080:80 - проброска порта (портНаХостовойМашине:портКонтейнера)
    • -e MYSQL_ROOT_PASSWORD=123456 - пробрасывает переменные окружения внутрь контейнера
  • docker stop имя_контейнера - остановка контейнера (вместо имени можно указывать id)

  • docker rm имя_контейнера - удаление контейнера

  • docker exec -ti название_контейнера /bin/sh - заходим в запущенный контейнер

  • docker logs -f название_контейнера - посмотреть логи внутри контейнера

  • docker ps - отображает список запущенных контейнеров

    • -a - отображать все, в том числе и не запущенные контейнеры
  • docker inspect название_контейнера - показать данные контейнера (ip, пути к volumes и т.д.)

  • docker container prune - удаляет ВСЕ остановленные контейнеры.

images

  • docker build --tag название_образа . - сборка образа контейнера на базе Dockerfile (точка - текущий репозиторий)
  • docker images - выводит список образов верхнего уровня (образ внутри может использовать несколько других образов)
    • -a - выводит все образы на хост-машине
  • docker image rm название_образа - удаление образа
  • docker image prune -a - удалить ВСЕ образы, на которые не ссылается ни один существующий контейнер

docker-compose

  • docker-compose up - Создание/обновление и запуск контейнеров приложения (запуск из директории с файлом docker-compose.yml)
    • -d - в фоне
  • docker-compose start - запуск
  • docker-compose stop - остановка
  • docker-compose down - остановка и удаление
  • docker-compose logs -f - логи всех сервисов приложения

разное

  • docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v $PWD/portainer:/data portainer/portainer - web оболочка для управления докером

Dockerfile

Dockerfile — скрипт, который автоматически выполняет определенные действия или команды в базовом образе, для формирования нового образа.

Слои в итоговом образе создают только инструкции FROM, RUN, COPY и ADD (порядок важен!). Другие инструкции что-то настраивают (например — открыть какой-то порт и т.д.).

FROM - базовый образ. FROM php:7.2-apache
RUN – выполняет консольную команду в контейнере. apt-get install -y vim
ADD - добавляет файлы или папки из нашего билд-окружения в образ. ADD software.lic /opt/application/software.lic
COPY - отличается от ADD тем, что предназначена для копирования локальных файлов из билд-контекста и не поддерживает распаковки файлов COPY conf.d/ /etc/apache2/

VOLUME - монтирует директории хоста в директорию контейнера

Сначала создаем папку, в ней уже докерфайл. Созданная директория — билд-окружение, в которой Docker вызывает контекст или строит контекст. Docker загрузит контекст в папке в процессе работы Docker–демона, когда будет запущена сборка образа.

Смонтировать и пробросить порты (порт_хостовой:порт_докера) в докер файле нельзя, т.к. из него собирается образ, а образ должен быть универсальным и не должен привязываться к конкретной машине. Все это можно сделать в docker-compose.yml

docker-compose

Docker Compose используется для одновременного управления несколькими контейнерами, входящими в состав приложения.

Пример

Файловая структура

1
2
3
4
5
docker/
├── db/
├── docker-compose.yml
└── phpapache/
└── Dockerfile

Папка db монтируется к контейнеру БД, таким образом данные БД хранятся на хостовой машине, а не в контейнере.

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
FROM php:7.2-apache
RUN apt-get clean && apt-get update
# php.ini-production OR php.ini-development
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
RUN apt-get install -y \
vim \
nano \
tree \
mc \
git \
curl \

Флаг -y нужен чтобы подавлять одобрение на установку в консоле, без него выкенит ошибку.

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
version: '3.1'

services:

php_apache:
build:
context: .
dockerfile: ./phpapache/Dockerfile
restart: always
ports:
- 9990:80
volumes:
- /data/backups/testprdocker:/var/www/html

# Если файлы БД прокинуты в хвостовую машину, то при попытке сменить пароль
# (MYSQL_ROOT_PASSWORD: ******) ничего не изменится, так как файлы с настройками
# лежат на хостовой машине и после пересборке docker-compose эти файлы не меняются.
# Как вариант удалить все файлы в ./db =) тогда докер заново создаст их.

db:
image: mysql:5.6
restart: always
environment:
MYSQL_ROOT_PASSWORD: ******
volumes:
- ./db/conf:/etc/mysql/conf.d
- ./db:/var/lib/mysql
ports:
- 9991:3306

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

portainer:
image: portainer/portainer
command: -H unix:///var/run/docker.sock
restart: always
ports:
- 9993:9000
volumes:
- /var/run/docker.sock:/var/run/docker.sock

volumes - монтировать каталог хоста в контейнер (host : container)
portainer - это простое решение для управления Docker.


Полезные ссылки:

Поделиться