Это старая версия документа!
Docker
Установка
Ubuntu
$ apt update && \ apt install ca-certificates curl gnupg lsb-release -y && \ mkdir -p /etc/apt/keyrings && \ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \ apt update && \ apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
Debian
$ apt update && \ apt install ca-certificates curl gnupg lsb-release -y && \ mkdir -p /etc/apt/keyrings && \ curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && \ apt update && \ apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Docker
$ sudo groupadd docker $ sudo usermod -aG docker $USER $ newgrp docker
UI
Использование
Работа с образами / Images
$ docker image
Вывести список образов
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yii2_php latest 6a950c96e01d 23 hours ago 159MB
Удалить образ
$ docker image rm 6a950c96e01d
Удалить все образы
$ sudo docker rm -f $(sudo docker ps -a -q) $ sudo docker rmi -f $(sudo docker images -q)
Анализировать образ
$ docker image inspect 6a950c96e01d [ { "Id": "sha256:6a950c96e01de12b463f1fce232b48f530c487c2d7af5fef2e59c693c21c8af1", "RepoTags": [ "yii2_php:latest" ], "RepoDigests": [], "Parent": "sha256:a0883c ... }
Избавляемся от неиспользуемых образов
$ docker image prune
Список образов
$ docker images
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE yii2_php latest 6a950c96e01d 23 hours ago 159MB yii2_nginx latest 878bb2a77dfa 27 hours ago 23.2MB yii2_kibana latest e3f6594b57e1 27 hours ago 221MB yii2_elasticsearch latest 117a536c2655 27 hours ago 129MB yii2_redis latest 546a364104fd 27 hours ago 31.1MB yii2_mariadb latest 03ddc39bcf15 27 hours ago 204MB
Получение образов
$ docker save vorobev4/mule-runtime-ee:v3-4.4.0 > /tmp/mule-runtime-ee.tar
Установка образа
$ docker load /tmp/mule-runtime-ee.tar
Работа с контейнерами / Containers
$ docker $ docker exec --help
Запуск контейнера
$ docker up
Список запущеных контейнеров
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a50423920e0d yii2_php "/usr/sbin/php-fpm -F" 23 hours ago Up 23 hours 9001/tcp, 0.0.0.0:9001->9000/tcp yii2_php_1 fa24abd60049 yii2_nginx "sh -c 'envsubst \"`e…" 24 hours ago Up 24 hours 0.0.0.0:80->80/tcp yii2_n
Подсоеденение к контейнеру
$ sudo docker exec -i -t a50423920e0d /bin/bash $ sudo docker exec -i -t a50423920e0d /bin/sh
Запустить контейнер
$ docker start a50423920e0d
Остановить контейнер
$ docker stop a50423920e0d
Пребить контейнер
$ docker kill a50423920e0d
Использование docker-composer.yml
$ docker-compose
$ docker-compose exec
Подсоеденение к контейнеру
$ docker-compose exec php /bin/sh
Где php название используемого сервиса / services
Запуск с использованием локального конфига
$ docker-compose -f docker-compose.yml -f docker-compose-local.yaml up -d
Сети
Сетевые драйверы
bridge: сетевой драйвер по умолчанию. Если вы не указываете драйвер, это тип сети, которую вы создаете. Мостовые сети обычно используются, когда ваши приложения работают в автономных контейнерах, которые должны взаимодействовать.
host: для автономных контейнеров, удаляет сетевую изоляцию между контейнером и Docker-хостом. Хост доступен только для служб swarm в Docker версии 17.06 и выше.
overlay: overlay сети соединяют несколько демонов Docker вместе и позволяют сервисам Swarm связываться друг с другом. Вы также можете использовать overlay сети для облегчения связи между сервисом Swarm и автономным контейнером. Или между двумя автономными контейнерами на разных демонах Docker. Эта стратегия устраняет необходимость выполнять маршрутизацию на уровне ОС между этими контейнерами.
macvlan: сети Macvlan позволяют назначать MAC-адрес контейнеру, делая его физическим устройством в вашей сети. Демон Docker направляет трафик в контейнеры по их MAC-адресам. Использование драйвера macvlan иногда является лучшим выбором при работе с устаревшими приложениями. Приложениям, которые ожидают прямого подключения к физической сети, а не маршрутизации через сетевой стек хоста Docker.
none: для этого контейнера отключит все сети. Обычно используется в сочетании с пользовательским сетевым драйвером. Ни один не доступен для swarm услуг
Установка
$ docker network create bridge-network $ docker network create --driver=bridge bridge-network $ docker network create -d overlay my-multihost-network $ docker network create --driver overlay overlay_network $ docker network create --subnet 10.1.0.0/16 --gateway=10.1.0.1 --ip-range 10.1.4.0/24 --driver=bridge --label=host4networks brifge04 $ docker network create nginx-proxy
Использование
$ docker run -it --name=test_brifge04 --net brifge04 centos:centos7 /bin/bash $ docker run -it --name=test_brifge04_2 --net brifge04 --ip=10.1.4.100 centos:centos7 /bin/bash
Аанализ сетей
$ docker network inspect bridge
$ docker network inspect nginx-proxy
$ docker network ls
Особенности работы с MAC OS
Все контейнеры в MAC OS находятся в виртуальной машине qcow2 и находятся по адресу /Users/mirocow/Library/Containers/com.docker.docker/Docker.qcow2
- где mirocow имя вашего пользователя
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Автоматический запуск контейнеров в Debian
System V
nano /etc/init.d/portainer
#!/bin/sh ### BEGIN INIT INFO # Provides: portainer # Required-Start: $docker # Required-Stop: $docker # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Portainer Services ### END INIT INFO set -e PROJECT_NAME=portainer YAMLFILE=/var/lib/jenkins/workspace/portainer/docker-compose.yml OPTS="-f $YAMLFILE -p $PROJECT_NAME" UPOPTS="-d --no-recreate --no-build --no-deps" . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting service portainer" "portainer" || true docker-compose $OPTS up $UPOPTS ;; stop) log_daemon_msg "Stopping service portainer" "portainer" || true docker-compose $OPTS stop ;; reload) log_daemon_msg "Reloading service portainer" "portainer" || true docker-compose $OPTS up $UPOPTS ;; restart) docker-compose $OPTS stop docker-compose $OPTS up $UPOPTS ;; status) status=$(docker ps -aqf "name=${PROJECT_NAME}") if [ ! -z "${status}" ]; then echo "Already running ID: ${status}" fi ;; *) log_action_msg "Usage: /etc/init.d/portainer {start|stop|restart|reload|status}" || true exit 1 ;; esac exit 0
System D
nano /etc/systemd/system/portainer.service
[Unit] Description=Portainer service with docker-compose Requires=docker.service After=docker.service [Service] Restart=always WorkingDirectory=/var/lib/jenkins/workspace/portainer/ # Remove old containers, network and volumes ExecStartPre=/usr/bin/docker-compose -f /var/lib/jenkins/workspace/portainer/docker-compose.yml down -v ExecStartPre=-/bin/bash -c 'docker network rm docker_portainer_net' ExecStartPre=-/bin/bash -c 'docker ps -aqf "name=portainer" | xargs docker rm' # Compose up ExecStart=/usr/bin/docker-compose -f /var/lib/jenkins/workspace/portainer/docker-compose.yml up # Compose down, remove containers ExecStop=/usr/bin/docker-compose -f /var/lib/jenkins/workspace/portainer/docker-compose.yml down [Install] WantedBy=multi-user.target
Проблемы и их решения
Circular import between fpm and nginx
Возникает при циклическом связывании контейнеров (2-ух сторонее связывание) В качестве решенияпроблемы, на данный момент, можно воспользоваться прокси сервером/контейнером docker-grand-ambassador
fpm: build: ./build/fpm links: - ambassador:nginx nginx: build: ./build/nginx links: - ambassador:fpm ambassador: image: cpuguy83/docker-grand-ambassador volumes: - "/var/run/docker.sock:/var/run/docker.sock" command: "-name testapp_fpm_1 -name testapp_nginx_1"
ERROR: Couldn't connect to Docker daemon - you might need to rundocker-machine start default`
скорее всего вам потребуется сделать следующее:
$ docker-machine create --driver=xhyve dev --xhyve-experimental-nfs-share
Компоненты
- Репозитории - Репозитории Dokerfile - ов
- docker-compose - Компановщик контейнеров
- docker-machine - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.
- Docker Toolbox - Комплект необходимых программ для Windows или MacOs (Внимание!!! ставит VirtualBox )
- Weave Scope - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров.
- cAdvisor - Система мониторинга за контейнерами
- DockStation - Отличный клиент для работы с docker-compose, docker-composer.yml