Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>vagrant chef shell puppet salt ansible docker devops virtual alpine}} ====== Docker ====== {{https://habrastorage.org/files/67f/73a/551/67f73a551a254c19854adf3b4665a7bb.png?300}} ====== Установка ====== ===== Ubuntu ===== <code bash> $ 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 </code> ===== Debian ===== <code bash> $ 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-compose-plugin -y </code> ====== Docker ====== <code bash> $ sudo groupadd docker $ sudo usermod -aG docker $USER $ newgrp docker </code> ====== UI ====== * https://github.com/DockStation/dockstation :!: * https://github.com/felixgborrego/simple-docker-ui :!: * https://github.com/docker/kitematic * https://github.com/bcicen/ctop * https://github.com/portainer/portainer * https://github.com/kubernetes/kubernetes ===== Использование ===== * [[Dockerfile]] * [[docker-compose.yml]] ==== Работа с образами / Images ==== <note important>Для справки \\ <code bash> $ docker image </code></note> === Вывести список образов === <code bash> $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE yii2_php latest 6a950c96e01d 23 hours ago 159MB </code> === Удалить образ === <code bash> $ docker image rm 6a950c96e01d </code> === Удалить все образы === <code bash> $ sudo docker rm -f $(sudo docker ps -a -q) $ sudo docker rmi -f $(sudo docker images -q) </code> === Анализировать образ === <code bash> $ docker image inspect 6a950c96e01d [ { "Id": "sha256:6a950c96e01de12b463f1fce232b48f530c487c2d7af5fef2e59c693c21c8af1", "RepoTags": [ "yii2_php:latest" ], "RepoDigests": [], "Parent": "sha256:a0883c ... } </code> === Избавляемся от неиспользуемых образов === <code bash>$ docker image prune</code> === Список образов === <note tip>Алиас к <code bash>$ docker images</code></note> <code bash> $ 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 </code> === Получение образов === <note tip>Для справки \\ <code bash> $ docker save vorobev4/mule-runtime-ee:v3-4.4.0 > /tmp/mule-runtime-ee.tar </code></note> === Установка образа === <note tip>Для справки \\ <code bash> $ docker load /tmp/mule-runtime-ee.tar </code></note> ==== Работа с контейнерами / Containers ==== <note important>Для справки \\ <code bash> $ docker $ docker exec --help </code></note> === Запуск контейнера === <note important>Необходим Dockerfile</note> <code bash>$ docker up</code> === Список запущеных контейнеров === <code bash> $ 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 </code> === Подсоеденение к контейнеру === <note tip>Проверить предварительно на наличие запрашиваемой оболочки. В alpine по умолчанию нет bash</note> <code bash> $ sudo docker exec -i -t a50423920e0d /bin/bash $ sudo docker exec -i -t a50423920e0d /bin/sh </code> ==== Запустить контейнер ==== <code bash>$ docker start a50423920e0d</code> ==== Остановить контейнер ==== <code bash>$ docker stop a50423920e0d</code> ==== Пребить контейнер ==== <code bash>$ docker kill a50423920e0d</code> ===== Использование docker-composer.yml ===== <note important>Для справки \\ <code bash> $ docker-compose $ docker-compose exec </code></note> <hidden docker-composer.yml> <code yaml> version: '2' services: mariadb: build: ./provision/mariadb restart: always environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: skringo MYSQL_USER: skringo MYSQL_PASSWORD: skringo ports: - '3306:3306' expose: - '3306' volumes: - './logs/mysql:/var/log/mariadb' redis: build: ./provision/redis restart: always environment: - REDIS_VERSION=4.0.9 ports: - '6379:6379' expose: - '6379' redis-commander: container_name: redis-commander hostname: redis-commander image: rediscommander/redis-commander:latest build: . restart: always environment: - REDIS_HOSTS=local:redis:6379 ports: - 8081:8081 nginx: build: ./provision/nginx restart: always links: - php volumes: - './:/app' - './provision/nginx/etc/conf.d/yii2.advanced.template:/etc/nginx/conf.d/site.template' - './logs/nginx:/var/log/nginx' environment: - NGINX_VERSION=1.13.12-1~stretch - NGINX_HOST=skringo.loc - NGINX_PORT=80 ports: - '80:80' command: 'sh -c "envsubst \"`env | awk -F = ''{printf \" $$%s\", $$1}''`\" < /etc/nginx/conf.d/site.template > /etc/nginx/conf.d/default.conf && nginx -g ''daemon off;''"' elasticsearch: build: ./provision/elasticsearch restart: always ports: - '9200:9200' expose: - '9200' environment: - ELASTICSEARCH_VERSION=5.6.9 - JAVA_ALPINE_VERSION=8.151.12-r0 - JAVA_VERSION=8u151 - LANG=C.UTF-8 - cluster.name=docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms1g -Xmx1g" ulimits: memlock: soft: -1 hard: -1 mem_limit: 1g kibana: build: ./provision/kibana links: - elasticsearch ports: - '5601:5601' php: build: ./provision/php/7.1 restart: always links: - mariadb - redis - elasticsearch ports: - '9001:9000' expose: - '9000' - '9001' environment: - PHP_IDE_CONFIG=serverName=skringo.loc volumes: - './:/app' - './provision/php/7.1/xdebug.ini:/etc/php7/conf.d/xdebug.ini' - './logs/php7:/var/log/php7' - './logs/php7/xdebug:/tmp/xdebug_log' networks: default: external: name: nginx-proxy </code> </hidden> ==== Подсоеденение к контейнеру ==== <code bash>$ docker-compose exec php /bin/sh</code> Где php название используемого сервиса / services ==== Запуск с использованием локального конфига ==== <code bash>$ docker-compose -f docker-compose.yml -f docker-compose-local.yaml up -d</code> ==== Сети ==== === Сетевые драйверы === **bridge**: сетевой драйвер по умолчанию. Если вы не указываете драйвер, это тип сети, которую вы создаете. Мостовые сети обычно используются, когда ваши приложения работают в автономных контейнерах, которые должны взаимодействовать. **host**: для автономных контейнеров, удаляет сетевую изоляцию между контейнером и Docker-хостом. Хост доступен только для служб swarm в Docker версии 17.06 и выше. **overlay**: overlay сети соединяют несколько демонов Docker вместе и позволяют сервисам Swarm связываться друг с другом. Вы также можете использовать overlay сети для облегчения связи между сервисом Swarm и автономным контейнером. Или между двумя автономными контейнерами на разных демонах Docker. Эта стратегия устраняет необходимость выполнять маршрутизацию на уровне ОС между этими контейнерами. **macvlan**: сети Macvlan позволяют назначать MAC-адрес контейнеру, делая его физическим устройством в вашей сети. Демон Docker направляет трафик в контейнеры по их MAC-адресам. Использование драйвера macvlan иногда является лучшим выбором при работе с устаревшими приложениями. Приложениям, которые ожидают прямого подключения к физической сети, а не маршрутизации через сетевой стек хоста Docker. **none**: для этого контейнера отключит все сети. Обычно используется в сочетании с пользовательским сетевым драйвером. Ни один не доступен для swarm услуг === Установка === <code bash> $ 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 </code> === Использование === <code bash> $ 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 </code> === Аанализ сетей === <code bash> $ docker network inspect bridge $ docker network inspect nginx-proxy $ docker network ls </code> ====== Особенности работы с MAC OS ====== Все контейнеры в MAC OS находятся в виртуальной машине qcow2 и находятся по адресу /Users/mirocow/Library/Containers/com.docker.docker/Docker.qcow2 * где mirocow имя вашего пользователя <note tip>Для MacOs устанавливается в отдельную виртуальную машину. К которой можно законектится с помощью tty. \\ **screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty**</note> ====== Автоматический запуск контейнеров в Debian ====== ===== System V ===== nano /etc/init.d/portainer <code bash> #!/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 </code> ===== System D ===== nano /etc/systemd/system/portainer.service <code bash> [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 </code> ====== Проблемы и их решения ====== ==== Circular import between fpm and nginx ==== Возникает при циклическом связывании контейнеров (2-ух сторонее связывание) В качестве решенияпроблемы, на данный момент, можно воспользоваться прокси сервером/контейнером docker-grand-ambassador <code yaml> 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" </code> ==== ERROR: Couldn't connect to Docker daemon - you might need to rundocker-machine start default` ==== скорее всего вам потребуется сделать следующее: <code bash>$ docker-machine create --driver=xhyve dev --xhyve-experimental-nfs-share</code> ====== Компоненты ====== * [[https://docs.docker.com/|Docker]] * [[https://hub.docker.com/|Репозитории]] - Репозитории Dokerfile - ов * [[https://docs.docker.com/compose/|docker-compose]] - Компановщик контейнеров * [[https://docs.docker.com/machine/|docker-machine]] - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера. * [[https://www.docker.com/products/docker-toolbox|Docker Toolbox]] - Комплект необходимых программ для Windows или MacOs (Внимание!!! ставит VirtualBox ) * [[https://www.weave.works/products/weave-scope/|Weave Scope]] - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров. * [[https://github.com/google/cadvisor|cAdvisor]] - Система мониторинга за контейнерами * [[https://dockstation.io/|DockStation]] - Отличный клиент для работы с docker-compose, docker-composer.yml :!: ====== Репозитории ====== * https://hub.docker.com/r/mirocow/yii2-dockerfile :!: * https://hub.docker.com/ * https://github.com/topics/docker-images * https://github.com/topics/moby * https://github.com/laradock/laradock * https://github.com/topics/moby * https://github.com/topics/docker-swarm ====== Документация / Статьи ====== * [[system:docker:xdebug]] * http://docker.crank.ru/ :!: * [[https://habr.com/post/261415/|Свой облачный хостинг за 5 минут. Часть 1: Ansible, Docker, Docker Swarm]] * [[http://habrahabr.ru/post/262397/|Свой облачный хостинг за 5 минут. Часть 2: Service Discovery]] * [[https://habr.com/post/264269/|Свой облачный хостинг за 5 минут. Часть 3: Consul, Registrator, Consul-Template]] * [[https://habrahabr.ru/post/277699/|о технологии]] * https://habrahabr.ru/post/253877/ :!: * https://habrahabr.ru/post/309556/ :!: * http://ru.stackoverflow.com/questions/tagged/docker-compose * https://habrahabr.ru/post/263083/ * https://blog.amartynov.ru/docker-mysql/ * http://onedev.net/post/579 * https://dou.ua/lenta/articles/vagrant/ * https://ast.rocks/blog/docker-create-container * https://xakep.ru/2015/06/04/docker-faq/ * http://dotsandbrackets.com/quick-intro-to-docker-compose-ru/ * https://toster.ru/q/200627 * http://devacademy.ru/posts/ustanovka-i-ispol-zovaniie-docker-compose-na-ubuntu-14-04/ * https://ast.rocks/blog/docker-orchestration * https://docs.docker.com/docker-for-mac/#uninstall-or-reset * https://habr.com/ru/post/333874/ * https://linux-notes.org/rabota-s-tomami-volumes-v-docker/ ====== Ссылки ====== {{topic>[docker]}} СохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal