Показать страницуИстория страницыСсылки сюда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}} | VIRTUAL MACHINES | CONTAINERS | | Virtual machines include the application, the necessary binaries and libraries, and an entire guest operating system -- all of which can amount to tens of GBs. | Containers include the application and all of its dependencies --but share the kernel with other containers, running as isolated processes in user space on the host operating system. Docker containers are not tied to any specific infrastructure: they run on any computer, on any infrastructure, and in any cloud. | ====== Установка ====== * https://www.docker.com/community-edition#/download :!: * https://store.docker.com/editions/community/docker-ce-desktop-mac :!: * https://docs.docker.com/engine/installation/linux/debian/ nano /etc/apt/sources.list <code> deb https://apt.dockerproject.org/repo debian-stretch main </code> ===== Использование ===== ==== Работа с образами / 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> $ 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> ==== Работа с контейнерами / Containers ==== <note important>Для справки \\ <code bash> $ docker $ docker exec --help </code></note> === Запуск контейнера === <note tip>Необходим 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> ====== Особенности работы с 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: Docker 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 portainer" "portainer" || true docker-compose $OPTS up $UPOPTS ;; stop) log_daemon_msg "Stopping portainer" "portainer" || true docker-compose $OPTS stop ;; reload) log_daemon_msg "Reloading portainer" "portainer" || true docker-compose $OPTS up $UPOPTS ;; restart) docker-compose $OPTS stop docker-compose $OPTS up $UPOPTS ;; *) log_action_msg "Usage: /etc/init.d/portainer {start|stop|restart|reload}" || 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 ====== Документация / Статьи ====== * 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 ====== Другие системы виртуализации ====== {{topic>[virtual]}} СохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal