Ответ 1
Windows Boot2Docker за корпоративным прокси
(Контекст: март 2015 г., Windows 7, за корпоративным прокси)
TL;DR; см. проект GitHub VonC/b2d
:
Клонировать его и:
- настроить
..\env.bat
послеenv.bat.template
, - добавьте псевдоним, который вы хотите в файле
profile
, - выполните
senv.bat
, затемb2d.bat
.
Затем вы находитесь в специально настроенной среде boot2docker
с:
- сеанс ssh, способный получить доступ к интернету за корпоративным прокси при вводе
docker search/pull
. - Dockerfiles может получить доступ к интернету за корпоративным прокси, когда они делают
apt-get update/install
, и вы набираетеdocker build
.
Установка и первые шаги
Если вы являетесь администратором своей рабочей станции, вы можете запустить boot2docker install в своей Windows.
В настоящее время он поставляется с:
- Boot2Docker 1.5.0 (Docker v1.5.0, Linux v3.18.5)
- Boot2Docker Management Tool v1.5.0
- VirtualBox v4.3.20-r96997
- msysGit v1.9.5-preview20141217
Затем, после установки:
- добавить
c:\path\to\Boot2Docker For Windows\
в%PATH%
- (один раз):
boot2docker init
-
boot2docker start
-
boot2docker ssh
- введите
exit
для выхода из сеанса ssh иboot2docker ssh
, чтобы вернуться: история команд, которые вы только что набрали, сохраняется. - если вы хотите закрыть виртуальную машину,
boot2docker stop
Фактически вы можете увидеть запуск или остановку виртуальной машины, если вы откроете графический интерфейс Virtual Box и введите сеанс cmd в DOS boot2docker start
или stop
.
Хосты и прокси: Windows = > Boot2Docker = > Контейнеры докеров
Главное, чтобы понять, что вам нужно управлять 2 HOSTS:
- Ваша рабочая станция Windows является хостом для Linux Tiny Core, выполняемая VirtualBox для определения и запуска контейнеров
(%HOME%\.boot2docker\boot2docker.iso
= >
.%USERPROFILE%\VirtualBox VMs\boot2docker-vm\boot2docker-vm.vmdk
), - Ваш boot2docker Linux Tiny Core - хост для ваших контейнеров, которые вы запустите.
В терминах прокси это означает:
- Ваш Windows-хост должен установить переменную среды
HTTP_PROXY
,HTTPS_PROXY
иNO_PROXY
(вы, вероятно, уже имеете их, и они могут использоваться, например, виртуальным ящиком для обнаружения новых версий Virtual Box) - Ваш Tiny Core Host должен установить
HTTP_PROXY
,HTTPS_PROXY
иNO_PROXY
(обратите внимание на случай, строчный в среде Linux) для:- служба docker, чтобы иметь возможность запрашивать/загружать изображения (например:
docker search nginx
).
Если не задано, следующийdocker pull
получит вамdial tcp: lookup index.docker.io: no such host
.
Это устанавливается в новом файле/var/lib/boot2docker/profile
: этоprofile
, а не.profile
. - учетная запись docker (устанавливается в
/home/docker/.ashrc
), если вам нужно выполнить любую другую команду (кроме докера), которая потребует доступа в Интернет) - любой файл Dockerfile, который вы создадите (или следующий
RUN apt-get update
получит вам, например,Could not resolve 'http.debian.net'
).
Это означает, что вы должны сначала добавить строкиENV http_proxy http://...
, перед любой командойRUN
, требующей доступа в Интернет.
- служба docker, чтобы иметь возможность запрашивать/загружать изображения (например:
Хороший NO_PROXY
для установки:
.company,.sock,localhost,127.0.0.1,::1,192.168.59.103
(с '.company
' доменное имя вашей компании, для внутренних сайтов)
Сохранение данных? Использовать общий доступ к папкам
Другой момент для понимания заключается в том, что boot2docker использует Tiny Core,... крошечный дистрибутив Linux (файл .iso - всего 26 МБ).
И Tiny Core не предлагает настойчивости (за исключением нескольких технических папок): если вы измените свой ~/.ashrc
со всеми вашими предпочтительными настройками и псевдонимом... следующий boot2docker stop / boot2docker start
восстановит первозданную среду Linux, с измененной версией.
Вы должны убедиться, что VirtualBox имеет Oracle_VM_VirtualBox_Extension_Pack, загруженный и добавленный в Virtual Box/File/Настройки/Расширение/добавление файла Oracle_VM_VirtualBox_Extension_Pack-4.x.yy-zzzzz.vbox-extpack
).
Поскольку задокументирован в boot2docker, у вас будет доступ (от вашего сеанса Siny Core ssh) до /c/Users/<yourLogin>
(т.е. %USERPROFILE%
разделяется виртуальным ящиком)
Перенаправление портов? Для контейнера и для VirtualBox VM
Конечным моментом для понимания является то, что порт не экспортируется по умолчанию:
- порты вашего контейнера не видны с вашего узла Tiny Core (например, вы должны использовать
-p 80:80
, чтобы открыть 80-й порт контейнера на 80-й порт сеанса Linux). - ваши порты Tiny Cort по умолчанию не экспортируются из виртуальной виртуальной машины: даже если ваш контейнер виден с Tiny Core, ваш браузер Windows не увидит его: http://127.0.0.1 не будет работать "
The connection was reset
".
Для первой точки docker run -it --rm --name my-apache-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
не будет работать без -p 80:80
в ней.
Для второй точки определите псевдоним doskey vbm="c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" $*
, а затем: - если Virtual Box 'boot2docker-vm
' еще не запущен, используется vbm modifyvm
- если Virtual Box 'boot2docker-vm
' уже запущен, используется vbm controlvm
Как правило, если я понимаю, во время сеанса boot2docker, что порт 80 недоступен из Windows:
vbm controlvm "boot2docker-vm" natpf1 "tcp-port80,tcp,,80,,80";
vbm controlvm "boot2docker-vm" natpf1 "udp-port80,udp,,80,,80";
Тогда и только тогда я могу получить доступ к http://127.0.0.1
Постоянные настройки: копируются в службу докеров и учетную запись docker
Чтобы легко использовать boot2docker
:
- создать в Windows папку
%USERPROFILE%\prog\b2d
- добавьте в него
.profile
(непосредственно в Windows, в%USERPROFILE%\prog\b2d
), с вашими настройками и псевдонимами.
Например (я изменил оригинал /home/docker/.ashrc
):
# ~/.ashrc: Executed by SHells.
#
. /etc/init.d/tc-functions
if [ -n "$DISPLAY" ]
then
`which editor >/dev/null` && EDITOR=editor || EDITOR=vi
else
EDITOR=vi
fi
export EDITOR
# Alias definitions.
#
alias df='df -h'
alias du='du -h'
alias ls='ls -p'
alias ll='ls -l'
alias la='ls -la'
alias d='dmenu_run &'
alias ce='cd /etc/sysconfig/tcedir'
export HTTP_PROXY=http://<user>:<pwd>@proxy.company:80
export HTTPS_PROXY=http://<user>:<pwd>@proxy.company:80
export NO_PROXY=.company,.sock,localhost,127.0.0.1,::1,192.168.59.103
export http_proxy=http://<user>:<password>@proxy.company:80
export https_proxy=http://<user>:<password>@proxy.company:80
export no_proxy=.company,.sock,localhost,127.0.0.1,::1,192.168.59.103
alias l='ls -alrt'
alias h=history
alias cdd='cd /c/Users/<user>/prog/b2d'
ln -fs /c/Users/<user>/prog/b2d /home/docker
(192.168.59.103 обычно является ip, возвращаемым boot2docker ip
)
Соединяя все вместе, чтобы запустить сеанс boot2docker: b2d.bat
- создайте и добавьте
b2d.bat
script в свой%PATH%
, который будет:- start
boot2docker
- скопируйте правильный профиль, как для службы
docker
(которая перезапускается), так и для учетной записи/home/docker
. - инициировать интерактивную сессию ssh
- start
То есть:
doskey vbm="c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" $*
boot2docker start
boot2docker ssh sudo cp -f /c/Users/<user>/prog/b2d/.profile /var/lib/boot2docker/profile
boot2docker ssh sudo /etc/init.d/docker restart
boot2docker ssh cp -f /c/Users/<user>/prog/b2d/.profile .ashrc
boot2docker ssh
Чтобы войти в новый сеанс boot2docker, с вашими настройками, определенными точно так, как вы хотите, просто введите:
b2d
И тебе хорошо идти:
Конечный результат:
- a
docker search xxx
будет работать (он будет пользоваться Интернетом) - любой
docker build
будет работать (он будет обращаться к интернету, если существуют директивыENV http_proxy
) - любой файл Windows из
%USERPROFILE%\prog\b2d
можно изменить прямо с~/b2d
.
Или вы действительно можете писать и изменять те же файлы (например, некоторые файлы Docker) прямо из сеанса Windows, используя ваш любимый редактор (вместоvi
)
И все это, за корпоративным брандмауэром.
Бонус: только http
Tuan добавляет в комментариях:
Возможно, мой прокси-сервер не разрешает https. Вот мой способ:
-
boot2docker ssh
убить процесс докера и - установите прокси
export http_proxy=http://proxy.com
, затем - начать докер с помощью
docker -d --insercure-registry docker.io