Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
system:docker [2018/06/23 04:18] – [Образы] mirocowsystem:docker [2025/01/22 18:24] (текущий) 192.168.1.104
Строка 1: Строка 1:
-{{tag>vagrant chef shell puppet salt ansible docker devops virtual}}+{{tag>vagrant chef shell puppet salt ansible docker devops virtual alpine}}
  
 ====== Docker ====== ====== Docker ======
Строка 5: Строка 5:
 {{https://habrastorage.org/files/67f/73a/551/67f73a551a254c19854adf3b4665a7bb.png?300}} {{https://habrastorage.org/files/67f/73a/551/67f73a551a254c19854adf3b4665a7bb.png?300}}
  
-| VIRTUAL MACHINES                                                                                                                                                  | CONTAINERS                                                                                                                                                                                                                                                                                                                 | 
-| {{https://www.docker.com/sites/default/files/WhatIsDocker_2_VMs_0-2_2.png?200}}                                                                                   | {{https://www.docker.com/sites/default/files/WhatIsDocker_3_Containers_2_0.png?200}}                                                                                                                                                                                                                                       | 
-| 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://docs.docker.com/engine/installation/linux/debian/ +===== Ubuntu =====
- +
-nano /etc/apt/sources.list +
-<code> +
- deb https://apt.dockerproject.org/repo debian-stretch main +
-</code>+
  
 <code bash> <code bash>
-$ apt autoremove --purge "lxc-docker*" "docker.io*docker-engine docker-compose +$ apt update && \ 
-apt install docker-engine docker-compose +apt install ca-certificates curl gnupg lsb-release -y && \ 
-$ docker run hello-world +mkdir -p /etc/apt/keyrings && \ 
-$ cd ./project/ +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ 
-docker-compose up+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> </code>
  
-  * Запуск производится от root +===== Debian =====
-  * [[system:docker#компаненты|docker]] - клиент для управления docker-engine +
-  * [[system:docker#компаненты|docker-engine]] - движок ситемы docker +
-  * [[system:docker#компаненты|docker-compose]] - Если установлен компоновщик/композитор, то контейнеры следует запускать docker-compose up +
-  * [[system:docker#компаненты|docker-machine]] - https://github.com/docker/machine +
- +
-=== Запуск от пользователя ===+
  
 <code bash> <code bash>
-sudo groupadd docker +apt update && \ 
-sudo gpasswd -${USER} docker +apt install ca-certificates curl gnupg lsb-release -y && \ 
-$ sudo service docker restart+mkdir -p /etc/apt/keyrings && \ 
 +curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && \ 
 +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" | 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
 </code> </code>
-==== Mac OS ==== 
  
-<code bash> +====== Docker ======
-$ brew install docker docker-machine docker-compose docker-machine-driver-xhyve +
-</code> +
-Подробнее: https://github.com/zchee/docker-machine-driver-xhyve +
-==== Установить последнюю версию ==== +
- +
-<note tip><code bash> +
-$ curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose +
-$ chmod +x /usr/local/bin/docker-compose +
-</code> +
-Работает с docker-compose.yml файлом</note> +
-Подробнее: https://docs.docker.com/compose/install/\\ +
-Пример: https://docs.docker.com/compose/gettingstarted/ +
-===== Настройка ===== +
- +
-==== Dockerfile ==== +
- +
-  * FROM — указывает название образа (image), который будет взят за основу. +
-  * ENV — устанавливает переменную среды +
-  * RUN — запустить команду в контейнере (все команды исполняются с полными правами в пределах контейнера) +
-  * ADD — добавить файл в контейнер +
-  * VOLUME — указать монтируемые директории (их можно монтировать на хост машину или на другие контейнеры) +
-  * EXPOSE — указать транслируемые порты (их можно транслировать на хост машину или на другие контейнеры) +
-  * CMD — запустить процесс (это и будет процесс, вокруг которого построен контейнер) +
- +
-  * [[system:vagrant:docker:Dockerfile]] +
-  * [[system:vagrant:docker:supervisord.conf]] +
-==== docker-compose ==== +
- +
-  * docker-compose - средство сборки и настройки контейнеров +
-    * docker-compose up - поднять контейнеры с учетом правил сборки docker-compose.yml +
-    * -d - Для запуска сервисов в фоне (for "detached" mode)+
  
 <code bash> <code bash>
-$ docker-compose config +sudo groupadd docker 
-$ docker-compose up+$ sudo usermod -aG docker $USER 
 +newgrp docker
 </code> </code>
  
-Отдельно стоит запомнить команду docker-compose up. Она представляет собой упрощенный вызов docker-compose build && docker-compose run+====== UI ======
  
-Сборочные контейнеры в связке с docker-compose удобно использовать в окружении разработчика, когда требуется, например, производить некоторые действия при изменении исходников.+  * 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
  
-<note tip>С docker-compose все просто, но есть нюансы. Использовать one shot контейнеры возможно только, если docker-compose up выполняется с опцией “-d”, в противном случае по завершении работы такого контейнера, compose останавливает все остальные контейнеры.</note> +===== Использование =====
  
-=== Рабочий процесс ===+  * [[Dockerfile]] 
 +  * [[docker-compose.yml]]
  
-Определение Dockerfile для каждого из сервисов +==== Работа с образами / Images ====
-Определение связей между сервисами при помощи [[system:docker:docker-compose.yml|docker-compose.yml]] +
-Запус системы при помощи docker-compose up+
  
-== Документация == 
  
-  * https://ast.rocks/blog/docker-orchestration+<note important>Для справки \\ <code bash> 
 +$ docker image 
 +</code></note>
  
-==== docker-compose-mixer ====+=== Вывести список образов ===
  
-Содержание конфигурационного docker-compose-mixer.yml файла по своей сути является небольшим конфигом, который описывает как именно два или более проектов будут стартовать вместе.  +<code bash> 
- +$ docker images 
-<note tip><code bash> +REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE 
-wget https://github.com/paunin/docker-compose-mixer/blob/master/dist/dc-mixer?raw=true -O /usr/local/bin/docker-compose-mixer +yii2_php                     latest              6a950c96e01d        23 hours ago        159MB
-$ chmod +x /usr/local/bin/docker-compose-mixer+
 </code> </code>
-Работает с docker-compose-mixer.yml файлом</note> 
  
-Решает проблемы:+=== Удалить образ ===
  
-  * Конфликты имен контейнеров c обновлением всего дерева конфигурации +<code bash> 
-  * Конфликты портов пробрасываемых на хост-машину +$ docker image rm 6a950c96e01d 
-  * Переопределение свойств сервиса +</code>
-  * Разрешение относительных путей +
-  * Удаление лишних или дублирующихся сервисов+
  
-Подробнее: https://habrahabr.ru/post/274581/+=== Удалить все образы ===
  
-==== docker-machine ====+<code bash> 
 +$ sudo docker rm -f $(sudo docker ps -a -q) 
 +$ sudo docker rmi -f $(sudo docker images -q) 
 +</code>
  
-В GitHub-репозитории Docker Machine можно найти три bash-сценария, которые упрощают работу команд docker и docker-machine. Они отвечают за выполнение команд и пользовательские настройки командной строки bash.+=== Анализировать образ ===
  
-=== Использование === 
- 
-== создания нового хоста == 
- 
-<code bash>$ docker-machine create --driver virtualbox machine-name</code> 
- 
-  * -d --driver задаёт драйвер ([[https://docs.docker.com/machine/drivers/|список доступных драйверов]]) 
-    * generic  
-    * [[https://github.com/zchee/docker-machine-driver-xhyve|xhyve]] - (Используется для MacOs) 
-    * virtualbox 
-    * [[https://github.com/Parallels/docker-machine-parallels|parallels]] 
- 
-**generic** 
 <code bash> <code bash>
-$ docker-machine create \ +$ docker image inspect 6a950c96e01d 
-  --driver generic \ +
-  --generic-ip-address=203.0.113.81 \ +    { 
-  --generic-ssh-key ~/.ssh/id_rsa \ +        "Id": "sha256:6a950c96e01de12b463f1fce232b48f530c487c2d7af5fef2e59c693c21c8af1", 
-  machine-name+        "RepoTags":
 +            "yii2_php:latest" 
 +        ], 
 +        "RepoDigests": [], 
 +        "Parent": "sha256:a0883c 
 +... 
 +}
 </code> </code>
  
-  * где machine-name - название создаваемой машины+=== Избавляемся от неиспользуемых образов ===
  
-== запустить ==+<code bash>$ docker image prune</code>
  
-<code bash>$ docker-machine start machine-name</code>+=== Список образов ===
  
-== выполнение команд на удаленном хосте ==+<note tip>Алиас к <code bash>$ docker images</code></note>
  
-<code bash>$ docker-machine ssh machine-name cat /etc/hosts</code>+<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>
  
-или подключится к удаленному хосту+=== Получение образов ===
  
-<code bash>$ docker-machine ssh machine-name</code>+<note tip>Для справки \\ <code bash> 
 +$ docker save vorobev4/mule-runtime-ee:v3-4.4.0 > /tmp/mule-runtime-ee.tar 
 +</code></note>
  
-== просмотреть список доступных хостов ==+=== Установка образа ===
  
-<code bash>$ docker-machine ls</code>+<note tip>Для справки \\ <code bash> 
 +$ docker load /tmp/mule-runtime-ee.tar 
 +</code></note>
  
-== получить подробную информацию о хосте ==+==== Работа с контейнерами / Containers ====
  
-<code bash>$ docker-machine inspect machine-name</code>+<note important>Для справки \\ <code bash> 
 +$ docker 
 +$ docker exec --help 
 +</code></note>
  
-== настройки соединения хоста==+=== Запуск контейнера ===
  
-<code bash>$ docker-machine config machine-name</code>+<note important>Необходим Dockerfile</note>
  
-== отображает IP-адрес хоста ==+<code bash>$ docker up</code>
  
-<code bash>$ docker-machine ip machine-name</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>
  
-<code bash>$ docker-machine stop machine-name</code>+=== Подсоеденение к контейнеру ===
  
-== удаление ==+<note tip>Проверить предварительно на наличие запрашиваемой оболочки. В alpine по умолчанию нет bash</note>
  
-<code bash>$ docker-machine rm machine-name</code>+<code bash> 
 +sudo docker exec --t a50423920e0d /bin/bash 
 +$ sudo docker exec -i -t a50423920e0d /bin/sh 
 +</code>
  
-== список удаленных хостов ==+==== Запустить контейнер ====
  
-<code bash>$ docker-machine ls</code>+<code bash>$ docker start a50423920e0d</code>
  
-=== Сценарии ===+==== Остановить контейнер ====
  
-== 1 Сценарий ==+<code bash>$ docker stop a50423920e0d</code>
  
-<code bash>$ wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O /etc/bash_completion.d/docker-machine-prompt.bash</code>+==== Пребить контейнер ====
  
-Чтобы завершить установку этого файла, нужно  установить пользовательское значение переменной PS1 в файле .bashrc. PS1 – это специальная переменная оболочки, которая используется для редактирования командной строки bash. Откройте файл:+<code bash>$ docker kill a50423920e0d</code>
  
-<code>nano ~/.bashrc</code>+===== Использование docker-composer.yml =====
  
-Этот файл содержит три строки, которые начинаются с PS1:+<note important>Для справки \\ <code bash> 
 +$ docker-compose 
 +$ docker-compose exec 
 +</code></note>
  
-<code>PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ +<hidden docker-composer.yml> 
-PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ +<code yaml> 
-PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"</code>+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'
  
-В конец каждой строки нужно вставить <text>$(__docker_machine_ps1 " [%s]")</text>. Должно получиться следующее:+networks: 
 +  default: 
 +    external: 
 +      name: nginx-proxy 
 +</code> 
 +</hidden>
  
-<code>PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__docker_machine_ps1 " [%s]")\$ ' +==== Подсоеденение к контейнеру ====
-PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(__docker_machine_ps1 " [%s]")\$ ' +
-PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$(__docker_machine_ps1 " [%s]")$PS1"</code>+
  
-Теперь имя активной машины будет отображаться в командной строке оболочки.+<code bash>$ docker-compose exec php /bin/sh</code> 
 +Где php название используемого сервиса / services
  
-== 2 Сценарий ==+==== Запуск с использованием локального конфига ====
  
-Второй сценарий называется docker-machine-wrapper.bash. Он добавляет к команде docker-machine подкоманду use, которая позволяет быстро переключаться между машинами DockerЧтобы загрузить этот сценарий, наберите:+<code bash>docker-compose -f docker-compose.yml -f docker-compose-local.yaml up -d</code>
  
-<code bash>$ wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O /etc/bash_completion.d/docker-machine-wrapper.bash</code>+==== Сети ====
  
-== Сценарий ==+==Сетевые драйверы ===
  
-Последний сценарий называется docker-machine.bashОн отвечает за завершение команд docker-machine.+**bridge**: сетевой драйвер по умолчанию. 
 +Если вы не указываете драйвер, это тип сети, которую вы создаете. 
 +Мостовые сети обычно используются, когда ваши приложения работают в автономных контейнерах, которые должны взаимодействовать.
  
-<code bash>$ wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O /etc/bash_completion.d/docker-machine.bash</code>+**host**для автономных контейнеров, удаляет сетевую изоляцию между контейнером и Docker-хостом. 
 +Хост доступен только для служб swarm в Docker версии 17.06 и выше.
  
-Чтобы активировать внесённые изменения, закройте и снова откройте терминал. Если вы находитесь в сессии SSH, закройте и снова откройте сессию. Теперь завершение команд docker и docker-machine включено+**overlay**: overlay сети соединяют несколько демонов Docker вместе и позволяют сервисам Swarm связываться друг с другом. 
-===== Контейнер =====+Вы также можете использовать overlay сети для облегчения связи между сервисом Swarm и автономным контейнером. 
 +Или между двумя автономными контейнерами на разных демонах Docker. 
 +Эта стратегия устраняет необходимость выполнять маршрутизацию на уровне ОС между этими контейнерами.
  
-==== О контейнере ====+**macvlan**: сети Macvlan позволяют назначать MAC-адрес контейнеру, делая его физическим устройством в вашей сети. 
 +Демон Docker направляет трафик в контейнеры по их MAC-адресам. 
 +Использование драйвера macvlan иногда является лучшим выбором при работе с устаревшими приложениями. 
 +Приложениям, которые ожидают прямого подключения к физической сети, а не маршрутизации через сетевой стек хоста Docker.
  
-<code bash> +**none**: для этого контейнера отключит все сети. 
-$ docker info+Обычно используется в сочетании с пользовательским сетевым драйвером. Ни один не доступен для swarm услуг
  
-Containers: 9 +=== Установка ===
- Running:+
- Paused:+
- Stopped:+
-Images: 28 +
-Server Version: 1.12.5 +
-Storage Driver: aufs +
- Root Dir: /var/lib/docker/aufs +
- Backing Filesystem: extfs +
- Dirs: 90 +
- Dirperm1 Supported: true +
-Logging Driver: json-file +
-Cgroup Driver: cgroupfs +
-Plugins: +
- Volume: local +
- Network: null overlay host bridge +
-Swarm: inactive +
-Runtimes: runc +
-Default Runtime: runc +
-Security Options: seccomp +
-Kernel Version: 3.16.0-4-amd64 +
-Operating System: Debian GNU/Linux stretch/sid +
-OSType: linux +
-Architecture: x86_64 +
-CPUs: 2 +
-Total Memory: 7.8 GiB +
-Name: nas.ztc +
-ID: 6JPA:SQDY:WJRJ:F2R7:NDTL:SIYE:Z6UK:AVIH:3EZS:7GJM:UCXZ:KPDU +
-Docker Root Dir: /var/lib/docker +
-Debug Mode (client): false +
-Debug Mode (server): false +
-Registry: https://index.docker.io/v1/ +
-WARNING: No memory limit support +
-WARNING: No swap limit support +
-WARNING: No kernel memory limit support +
-WARNING: No oom kill disable support +
-WARNING: No cpu cfs quota support +
-WARNING: No cpu cfs period support +
-Insecure Registries: +
- 127.0.0.0/+
-</code> +
- +
-==== Статус ====+
  
 <code bash> <code bash>
-$ docker stats +$ docker network create bridge-network 
- +$ docker network create --driver=bridge bridge-network 
-CONTAINER           CPU %               MEM USAGE / LIMIT   MEM %               NET I/O               BLOCK I/O             PIDS +$ docker network create -d overlay my-multihost-network 
-c8d1eb7a8f7a        0.02%               0 B / 0 B           0.00%               38.07 kB / 649.1 kB   258 kB / 0 B          0 +$ docker network create --driver overlay overlay_network 
-271073504ac9        0.10%               0 B / 0 B           0.00%               6.517 kB / 648 B      0 B / 4.096 kB        0 +$ 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 
-462c8942181f        0.00%               0 B 0 B           0.00%               7.701 kB / 648 B      0 B / 0 B             0 +$ docker network create nginx-proxy
-94e2422ce234        0.33%               0 B / 0 B           0.00%               22.98 MB / 558.9 kB   1.798 MB / 314.8 MB   0 +
-6a43329858d9        18.18%              0 B 0 B           0.00%               7.431 kB / 648 B      249.9 kB / 20.62 GB   0 +
-404d5b6bf024        0.08%               0 B / 0 B           0.00%               7.959 kB / 648 B      0 B / 0 B             0+
 </code> </code>
  
-==== Работа с контейнером ====+=== Использование ===
  
 <code bash> <code bash>
-$ docker exec -it security-mysql /bin/bash +$ docker run -it --name=test_brifge04 --net brifge04 centos:centos7 /bin/bash 
-$ docker exec -it security-mysql cat /etc/passwd+$ docker run -it --name=test_brifge04_2 --net brifge04 --ip=10.1.4.100 centos:centos7 /bin/bash
 </code> </code>
  
-==== Список контейнеров (запущенных и нет) ====+=== Аанализ сетей ===
  
 <code bash> <code bash>
-$ docker ps -a +$ docker network inspect bridge 
-CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS                   PORTS                                                NAMES +docker network inspect nginx-proxy 
-c8d1eb7a8f7a        teratek_web                         "/usr/bin/supervisord"   About an hour ago   Up 57 minutes            443/tcp, 0.0.0.0:80->80/tcp, 9000/tcp                security-web +docker network ls
-271073504ac9        stefobark/sphinxdocker              "sh -c '/bin/sleep 5 "   About an hour ago   Up 57 minutes            0.0.0.0:9306->9306/tcp, 0.0.0.0:9312->9312/tcp       security-sphinx +
-462c8942181f        imkulikov/docker-grand-ambassador   "/usr/bin/grand-ambas"   About an hour ago   Up 57 minutes                                                                 security-proxy +
-94e2422ce234        mvertes/alpine-mongo                "/root/run.sh mongod"    About an hour ago   Up 57 minutes            0.0.0.0:27017->27017/tcp, 0.0.0.0:28017->28017/tcp   security-mongo +
-6a43329858d9        mysql                               "docker-entrypoint.sh"   About an hour ago   Up 57 minutes            0.0.0.0:3306->3306/tcp                               security-mysql +
-404d5b6bf024        redis:alpine                        "docker-entrypoint.sh"   About an hour ago   Up 57 minutes            6379/tcp                                             security-redis+
 </code> </code>
  
-  * -a - Позволяет увидеть не запущенные контейнеры +====== Особенности работы с MAC OS ======
-  * -l - Выведет список недавно созданных контейнеров +
-  * где docker-grand-ambassador прокси для 2-ух направленной связи контейнеров +
-    * curl -L http://security-web/sphinx_yiic/products +
- +
-==== Остановка контейнера ==== +
- +
-<code> +
-$ docker stop 7d0eb5cd3b3b +
-</code> +
- +
-==== Удаление контейнера ==== +
- +
-<code bash> +
-$ docker rm 7d0eb5cd3b3b +
-</code>+
  
-===== Образы =====+Все контейнеры в MAC OS находятся в виртуальной машине qcow2 и находятся по адресу 
 +/Users/mirocow/Library/Containers/com.docker.docker/Docker.qcow2
  
 +  * где mirocow имя вашего пользователя
  
 <note tip>Для MacOs устанавливается в отдельную виртуальную машину. К которой можно законектится с помощью tty. \\ <note tip>Для MacOs устанавливается в отдельную виртуальную машину. К которой можно законектится с помощью tty. \\
 **screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty**</note> **screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty**</note>
-==== Поиск образов ==== 
  
-<code bash>$ docker search alpine</code>+====== Автоматический запуск контейнеров в Debian ======
  
-==== Загрузка образа в систему ====+===== System V =====
  
 +nano /etc/init.d/portainer
 <code bash> <code bash>
-$ docker pull alpine +#!/bin/sh
-$ docker pull alpine:latest +
-</code> +
-==== Чистые образы ====+
  
-  * https://hub.docker.com/_/busybox/ +### BEGIN INIT INFO 
-  * https://hub.docker.com/_/alpine/ +# Provides: portainer 
-  * https://hub.docker.com/_/debian/+# 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
  
-  * https://hub.docker.com/r/mvertes/alpine-mongo(mvertes/alpine-mongo) 78 MB +PROJECT_NAME=portainer 
-  * https://hub.docker.com/r/vinsonzou/alpine-mariadb/ (vinsonzou/alpine-mariadb) 48.7 MB +YAMLFILE=/var/lib/jenkins/workspace/portainer/docker-compose.yml 
-  * https://hub.docker.com/r/yobasystems/alpine-mariadb/ (yobasystems/alpine-mariadb) 47.9 MB +OPTS="-f $YAMLFILE -p $PROJECT_NAME" 
-  * https://hub.docker.com/r/jaskipper/alpine-mariadb/ (jaskipper/alpine-mariadb) 8.5 MB +UPOPTS="---no-recreate --no-build --no-deps"
-  * https://hub.docker.com/_/php/ (php, php:7.1-alpine, php:7-alpine, php:alpine, php:5.6-alpine, 5-alpine итд) +
-  * https://hub.docker.com/r/matriphe/alpine-php/ (matriphe/alpine-php:fpm, matriphe/alpine-php:cli, matriphe/alpine-php:fpm7) <50 MB +
-  * https://hub.docker.com/_/redis/ (redis:alpine) ~5 MB + redis +
-  * https://hub.docker.com/r/stefobark/sphinxdocker/ (stefobark/sphinxdocker) +
-  * https://hub.docker.com/_/nginx/ (nginx:alpine) ~5 MB + nginx +
-  * https://hub.docker.com/_/memcached/ (memcached:alpine) ~5 MB + memcached +
  
-==== Готовые сборки ====+. /lib/lsb/init-functions
  
-  * https://hub.docker.com/r/matriphe/alpine-nginx/ (matriphe/alpine-nginx) +case "$1" in 
-  * https://github.com/kost/docker-alpine (kost/docker-alpine+    start
-  * https://hub.docker.com/r/leanlabs/npm-builder/ (leanlabs/npm-builder) +        log_daemon_msg "Starting service portainer" "portainer" || true 
-  * https://hub.docker.com/r/imega/composer/ (imega/composer) 43 MB +        docker-compose $OPTS up $UPOPTS 
-  * https://hub.docker.com/r/leanlabs/kanban/ (leanlabs/kanban) Аналог Trello +        ;;
-==== Создание образа ====+
  
-<code bash> +    stop) 
-docker build -t image-name . +        log_daemon_msg "Stopping service portainer" "portainer" || true 
-</code>+        docker-compose $OPTS stop 
 +        ;;
  
-  * Где . папка, где расположен Dockerfile +    reload) 
-  * container-name - название создаваемого контейнера+        log_daemon_msg "Reloading service portainer" "portainer" || true 
 +        docker-compose $OPTS up $UPOPTS 
 +        ;;
  
-==== Вывод списка образов ====+    restart) 
 +        docker-compose $OPTS stop 
 +        docker-compose $OPTS up $UPOPTS 
 +        ;;
  
-<code bash> +    status) 
-$ docker images +        status=$(docker ps -aqf "name=${PROJECT_NAME}"
-</code>+        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
  
-<code bash> +exit 0
-$ docker run -d -p 80:80 -t image-name +
-$ docker run -d --publish 8080:80 -t image-name+
 </code> </code>
  
-  * 8080 - Порт хост машины +===== System D =====
-  * 80 - Порт контейнера +
-  * -i - откроет интерактивную оболочку контейнера (лучше не использова, а подключаться с помощью docker exec) +
-  * -t - название запускаемого контейнера+
  
  
-===== Пример управления контейнером из другого контейнера =====+nano /etc/systemd/system/portainer.service 
 +<code bash> 
 +[Unit] 
 +Description=Portainer service with docker-compose 
 +Requires=docker.service 
 +After=docker.service
  
-<code bash>$ docker run -v /var/run/docker.sock:/var/run/docker.sock \ +[Service] 
-       -v $(which docker):/bin/docker \ +Restart=always
-       -ti nachine_name</code>+
  
-===== Пространства =====+WorkingDirectory=/var/lib/jenkins/workspace/portainer/
  
-Применяется для монтирования пространств из внешних источниковК примеру virtualbox+# 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'
  
-  * https://docs.docker.com/engine/extend/plugins_volume/+# 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
-  * https://docs.docker.com/engine/extend/plugins_network/ +
- +
-===== Логирование ===== +
- +
-  * https://docs.docker.com/engine/admin/logging/overview/ +
- +
-====== Рецепты ====== +
- +
-  * [[system:docker:recepts:yii2]] +
-  * https://github.com/gusnips/vagrant-yii2 +
-  * https://github.com/trntv/yii2-starter-kit +
-  * https://github.com/highestgoodlikewater/yii2-appliance-docker-vagrant +
-  * https://github.com/acorncom/yii2-advanced-with-vagrant+
  
 +[Install]
 +WantedBy=multi-user.target
 +</code>
 ====== Проблемы и их решения ====== ====== Проблемы и их решения ======
  
-===== Circular import between fpm and nginx =====+==== Circular import between fpm and nginx ====
  
 Возникает при циклическом связывании контейнеров (2-ух сторонее связывание) Возникает при циклическом связывании контейнеров (2-ух сторонее связывание)
Строка 439: Строка 469:
 </code> </code>
  
-===== ERROR: Couldn't connect to Docker daemon - you might need to rundocker-machine start default` =====+==== 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> <code bash>$ docker-machine create --driver=xhyve dev --xhyve-experimental-nfs-share</code>
 +
 ====== Компоненты ====== ====== Компоненты ======
  
   * [[https://docs.docker.com/|Docker]]   * [[https://docs.docker.com/|Docker]]
 +  * [[https://hub.docker.com/|Репозитории]] - Репозитории Dokerfile - ов
   * [[https://docs.docker.com/compose/|docker-compose]] - Компановщик контейнеров   * [[https://docs.docker.com/compose/|docker-compose]] - Компановщик контейнеров
   * [[https://docs.docker.com/machine/|docker-machine]] - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.   * [[https://docs.docker.com/machine/|docker-machine]] - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.
Строка 451: Строка 483:
   * [[https://www.weave.works/products/weave-scope/|Weave Scope]] - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров.   * [[https://www.weave.works/products/weave-scope/|Weave Scope]] - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров.
   * [[https://github.com/google/cadvisor|cAdvisor]] - Система мониторинга за контейнерами   * [[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]]   * [[https://habr.com/post/261415/|Свой облачный хостинг за 5 минут. Часть 1: Ansible, Docker, Docker Swarm]]
   * [[http://habrahabr.ru/post/262397/|Свой облачный хостинг за 5 минут. Часть 2: Service Discovery]]   * [[http://habrahabr.ru/post/262397/|Свой облачный хостинг за 5 минут. Часть 2: Service Discovery]]
Строка 472: Строка 516:
   * https://ast.rocks/blog/docker-orchestration   * https://ast.rocks/blog/docker-orchestration
   * https://docs.docker.com/docker-for-mac/#uninstall-or-reset   * 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>[virtual]}}+{{topic>[docker]}}