はじめに
Docker Desktopが有償となり、その猶予期間が2022/01/31で終了しました。
残念ながら自社は無償利用の条件を満たさず、Docker Desktop Personalの利用を続けることができません。
無償利用の条件:
less than 250 employees AND less than $10 million in revenue
(250人未満の従業員と1,000万ドル未満の収益)
Pro, Team, Businessを契約し利用することも考えられますが、社内稟議を通すのは難しい。。
そこで別途Docker環境を用意する必要があります。
やりたいこと
- Windows10 PCでDockerを使う
- HTTPプロキシに対応する
やったこと
VirtualBox+Vagrantを利用し、Ubuntu上にDocker, Docker Composeをインストールしました。
ただ、インストールコマンドの実行が手間なので、VagrantfileのprovisionにDockerインストールのコマンドを記載しました。
これでコマンド実行さえ行えば自動的にDocker環境が作れるようになりました。
Githubリポジトリ
利用方法
1-1 事前にやること
- 環境変数の追加
変数名 | 値 |
---|---|
VAGRANT_PREFER_SYSTEM_BIN | 0 |
1-2 【プロキシ環境のみ】事前に必要なこと
- 環境変数の追加
- HTTP_PROXY, HTTPS_PROXY
変数名 | 値 |
---|---|
HTTP_PROXY | http://{user}:{password}@{proxyhost}:{port} |
HTTPS_PROXY | http://{user}:{password}@{proxyhost}:{port} |
-
PowerShellかcmd.exeを起動
-
vagrant-proxyconfのインストール
vagrant plugin install vagrant-proxyconf
1-3 事前に必要なこと
vagrant up
1-4 仮想環境(Ubuntu)にログイン
vagrant ssh
1-5 【プロキシ環境のみ】起動後に必要なこと
- /usr/lib/systemd/system/docker.serviceをコピーする
$ sudo cp /usr/lib/systemd/system/docker.service /etc/systemd/system/
- /etc/systemd/system/docker.serviceのExecStartより前の行にプロキシ情報を追記する
$ sudo vim /etc/systemd/system/docker.service
Environment="HTTP_PROXY=http://{user}:{password}@{proxyhost}:{port}/"
Environment="HTTPS_PROXY=http://{user}:{password}@{proxyhost}:{port}/"
# この↑に追記
ExecStart=# 略
- Dockerデーモンを再起動
$ sudo systemctl daemon-reload && sudo systemctl restart docker
2 動作確認
- これでDockerの実行ができるようになりました
$ docker run hello-world
その他参考情報
Dockerコンテナ上でpip installするとプロキシエラーが発生する
- プロキシ情報を渡してあげる必要があります
- 方法1 .envファイルを作成し、HTTP_PROXYの情報を記載する
- 方法2 OSの環境変数にHTTP_PROXYを定義する
方法1 envファイル例
- .envファイル
HTTP_PROXY=http://{user}:{password}@{proxyhost}:{port}/
方法1, 方法2共通
- requirements.txtファイル
fastapi
- docker-compose.ymlファイル
app:
build:
context: .
args:
- ARG_PROXY=${HTTP_PROXY}
volumes:
- .:/app
- Dockerfile
FROM python:3.10
ARG ARG_PROXY
ENV http_proxy $ARG_PROXY
ENV https_proxy $ARG_PROXY
# Install development environment in an image (1: install, 0: not)
ARG WITHDEV="0"
ENV LANG C.UTF-8
ENV TZ Asia/Tokyo
ENV PYTHONDONTWRITEBYTECODE 1
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt --proxy=${http_proxy}
vagrant upした時にdefault: SSH auth method: private keyで止まる
- 管理者権限でcmd.exeを起動
- 以下のコマンドを実行
bcdedit /set hypervisorlaunchtype off
(元に戻したい場合、bcdedit /set hypervisorlaunchtype auto)
- 以下のURLを参考に、Hyper-Vを無効にする
- PCの再起動を実施
vagrant boxの取得に失敗する1
VagrantfileのBoxイメージを変更する
before:
config.vm.box = "ubuntu/hirsute64"
after:
config.vm.box = "generic/ubuntu2104"
vagrant boxの取得に失敗する2
- boxファイルを直接ダウンロードする
- ダウンロードしたファイルをリネーム(hirsute-server.box)し、Vagrantfileがあるフォルダに移動する
- 以下のコマンドを実行し、手動でboxを追加
vagrant box add ./hirsute-server.box --name generic/ubuntu2104
vagrant up
Dockerで起動したサービスのポートにアクセスできない
- Vagrantfileのポート開放を行う: 例・・・8080の場合
Vagrant.configure("2") do |config|
config.vm.box = "generic/ubuntu2104"
config.vm.network "forwarded_port", guest: 8080, host: 8080, host_ip: "127.0.0.1"
vagrant sshするのが面倒くさい
PowerShellのエイリアスを設定しましょう。とてもおすすめです。
- 以下のファイルを開く(ファイルやフォルダが存在しない場合は作成)
- %USERPROFILE%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
- エイリアスを追加する
function vssh {
vagrant ssh -c "cd /vagrant_data; bash"
}
-
Microsoft.PowerShell_profile.ps1保存し、PowerShellを再起動する
-
以下のコマンドを実行する(vsshでvagrant sshが実行できるようになりました)
vssh
参考にさせていただいた記事
Vagrantの上にDockerを載せて開発環境を作成する
https://zenn.dev/jinwatanabe/articles/4f8e62aac86f386d799b