Меню Рубрики

Docker compose volumes windows

Docker compose volumes

Основное предназначение Docker в быстром разворачивании окружения на любой машине из готовых образов, которые можно дорабатывать. Контейнер — временная структура, все изменения выполненные в нем существуют пока существует сам контейнер. На диске данные не сохраняются если они не вынесены в постоянную структуру — volume.

Для примера возьмем с dockerhub инструкцию для образа с wordpress, в немного измененном виде будем использовать ее.

Проект будет представлять собой сайт на wordpress с базой данных MySQL.

Сразу создадим каталоги под сайт и базу на хост машине. За счет биндинга они будут связаны с контейнерами

На машине должны быть установлены сам Docker и docker-compose. Создаем docker-compose.yml

В файле 2 сервиса. Структура типовая, 80 порт из контейнера пробрасывается на порт 8080 хост машины. Используются стандартные образы с dockerhub.

Для каждого контейнера заданы блоки volumes:

/home/site:/var/www/html для сайта

/home/site/db:/var/lib/mysql для базы данных

Они определяют, что данные из временной структуры — контейнера будут сохраняться на хост машине.

Содержимое /var/www/html в /home/site, содержимое /var/lib/mysql в/home/site/db

Эта информация будет изменена при жизни контейнера и останется на хост машине после его удаления.

docker-compose -f docker-compose.yml up -d

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bf264537c63d wordpress «docker-entrypoint.s…» About a minute ago Up About a minute 0.0.0.0:8080->80/tcp home_wordpress_1
ae9cd7efb0a8 mysql:5.7 «docker-entrypoint.s…» About a minute ago Up About a minute 3306/tcp, 33060/tcp home_mysql_1

Они успешно стартовали, с хоста обращаться к сервису можно только по порту 8080, на который пробрасываются запросы.

netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 851/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1049/master
tcp 0 0 91.226.83.234:10010 0.0.0.0:* LISTEN 31694/docker-contai
tcp6 0 0 . 8080 . * LISTEN 24286/docker-proxy
tcp6 0 0 . 22 . * LISTEN 851/sshd

В браузере обратившись к IP адресу серверу и порту 8080 можно запустить установку CMS, затем попасть в административный раздел.

Внесем минимальные изменения в структуру перового поста. Поменяем заголовок «Hello World» на «Hello Docker» и единственное существующее по-умолчанию предложение.

Пересоздадим существующую структуру

Going to remove home_wordpress_1, home_mysql_1
Are you sure? [yN] y
Removing home_wordpress_1 … done
Removing home_mysql_1 … done

Контейнеров нет, с ключем -a выводятся все контейнеры, в т.ч. незапущенные

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Файлы при этом сохранены на диске

db readme.html wp-blog-header.php wp-config-sample.php wp-includes wp-login.php wp-signup.php
index.php wp-activate.php wp-comments-post.php wp-content wp-links-opml.php wp-mail.php wp-trackback.php
license.txt wp-admin wp-config.php wp-cron.php wp-load.php wp-settings.php xmlrpc.php

Также как и содержимое /var/lib/mysql из контейнера

auto.cnf ca.pem client-key.pem ibdata1 ib_logfile1 performance_schema public_key.pem server-key.pem wordpress
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 mysql private_key.pem server-cert.pem sys

При обращении к тому же URL:8080 сейчас будет возникать ошибка — веб-сервер, являющийся частью контейнера не работает.

Запускаем контейнеры через docker-compose вновь

docker-compose -f docker-compose.yml up -d

Creating home_mysql_1
Creating home_wordpress_1

Сейчас можно убедиться в том, что сайт вновь стал открываться и контент отображается в том же виде. При старте информация из docker-compose.yml считалась.

Были задействованы те же каталоги, что использовались ранее, с имеющимися данными.

Читайте про управление контейнерами вручную. В docker compose volumes задаются в файлы, при ручном создании контейнера их можно указывать с ключем -v.

Источник

Запускаем docker compose в Windows

Docker-compose — это утилита, позволяющая запускать одновременно несколько контейнеров, используя при этом единый файл конфигурации всего стека сервисов, нужных вашему приложению. Например, такая ситуация: запускаем node.js webapp, которому нужна для работы mongodb, compose выполнит build вашего контейнера с webapp (традиционный Dockerfile) и перед его запуском запустит контейнер с mongodb внутри; так же может выполнить линк их между собой. Что крайне удобно как в разработке, так и в CI самого приложения. Так сложилось, что Windows пользователи были обделены возможностью использовать столько удобное средство, ввиду того, что официальной поддержки данной ОС все еще нет. А python версия для *nix не работает в окружении windows cmd, ввиду ограничений консоли Windows.

Для того, чтобы запустить docker-compose, мы можем использовать консольную оболочку Babun. Это, так сказать, «прокаченный» форк cygwin.

Итак, рецепт запуска docker-compose в Windows из консоли babun такой:

280MB!) и устанавливаем сам babun, узнать больше об этой оболочке можно на ее домашней странице babun.github.io;
2. Распаковываем архив (после установки полученную папку можно удалять);
3. Запускаем файл install.bat и ждем, пока пройдет установка;
4. После в открывшемся окне babun введем команду:

И убедимся, что у нас самая последняя версия оболочки (далее все команды выполняются только внутри оболочки babun);
5. Если вам не нравится дефолтный shell babun (используется zsh), его можно изменить на bash. Для этого вводим:

6. Теперь нам нужно установить те самые зависимости Python, которых так не хватает docker-compose. Для этого выполним следующие команды по очереди:

7. Теперь мы готовы установить сам docker-compose:

Если все прошло успешно, увидим:

Если же вы получили ошибку, error python fcntl или сообщение о не найдом файле docker-compose, попробуйте найти файл docker-compose в папках /usr/local/bin, /usr/sbin и подобных, затем можно сделать симлинк на /bin/. либо добавить в системный PATH недостающий путь.

Для правильной работы docker-compose нужно иметь уже настроенное окружение консоли для работы с docker-machine или boot2docker, а так же сам клиент docker должен быть доступен в системном PATH. О том, что такое docker, docker-machine и как с ними работать отлично рассказывает официальная документация.

Для входа в окружение нашего хоста докера, запущенного в docker-machine, нужно выполнить:

Либо тоже самое для boot2docker:

Проверить правильность работы клиента docker можно так:

Если получаем список контейнеров или просто заголовки таблицы, значит, все ок!

Источник

Volume binding using docker compose on Windows

I recently upgraded my Docker Toolbox on Windows 10, and now my volume mounts no longer work. I’ve tried everything. Here is the current mount path:

I receive an invalid bind mount error.

4 Answers 4

2. execute following command

Set path in docker compose file as shown below

File copied to windows

I think you have to set COMPOSE_CONVERT_WINDOWS_PATHS=1 , see here.

It seems you are using an absolute path located inside C:\Users dir, that didn’t work for me too, if you are using Docker-Toolbox see below.

Overview

Forwarding the ./ relative path in volumes section will automatically get resolved by docker-compose to the directory containing docker-compose.yml file (for example, if your project is in %UserProfile%/my-project then ./:/var/www/html gets /c/Users/my-name/my-project:/var/www/html ).

The problem is that currently (using DockerToolbox-19.03.1 ) only the /c/Users directory gets shared with the Virtual-Machine (toolbox puts docker itself in the VM, which means it has no access to your file system, except mounted shared-directories).

Conclusion

So, basically placing your project there ( C:\Users\YOUR_USER_NAME ) should make ./ work. But not even that worked for me, and we ended up with below _prepare.sh script:

Usage:

  • Place a copy of it beside each project’s docker-compose.yml file.
  • Run it each time the system is turned on (simply double-click it or its shortcut).
  • Done! relative paths should now work even if your project is in another drive (far away and outside of C:\Users dir).

Note:

  • With a little edit, it should work without docker-compose being required.
  • Consider running docker system prune to free disk-space (or simply add docker system prune —force to the above script, on a new line right after mount command).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Docker bash windows 10
  • Docker application port windows
  • Dock для windows как в mac os
  • Dnx fastboot mode windows
  • Dns суффикс подключения windows 7