🧗‍♂️

Proxy 環境下でがんばる Docker for Windows チュートリアル

2021/01/28に公開1

Docker for Windows が起動しなくなったので、環境捨てて再インストールしたところ、チュートリアルなるものが表示されました。

せっかくなので Proxy 環境下でチュートリアルを完遂する方法についてまとめます。

0. Docker for Windows の Proxy 設定

まずはじめに、Docker for Windows 自身の Proxy 設定をします。
これをしないと Docker イメージの pull に失敗します。

  1. 表示されるウィンドウ上部の「⚙ (歯車)」ボタンをクリックする。
  2. 左メニューの「Resources」をクリックし、次のとおり Proxy 設定をする。
    • Manual proxy configuration: 有効にする
    • Web Server (HTTP): http://your-proxy-server.example.com:8080
    • Secure Web Server (HTTPS): http://your-proxy-server.example.com:8080
    • Bypass proxy settings for these hosts & domains: 必要に応じて,カンマ区切りで,指定
  3. 画面右下の「Apply & Restart」ボタンをクリックし、Docker for Windows を再起動する。

前準備はここまでとして、Docker for Windows チュートリアルをやっていきましょう!

1. First, clone a repository

git コマンドが使えるコンテナー alpine/git を起動し、指定されたリポジトリー https://github.com/docker/getting-started.git をクローンします。
その後、クローンしたリポジトリーをフォルダーごとカレントディレクトリ (このチュートリアルではユーザーホーム) にコピーします。

これは、ホスト PC (Windows) に git がインストールされていなくても、コンテナー側のコマンドを呼び出すことができるというチュートリアルのようです。

Proxy 環境下では、コンテナー内で実行する git コマンドに Proxy 設定を渡してあげないと、git clone 時に Proxy を超えられずに失敗します。

# 失敗時の出力結果
PS > docker run --name repo alpine/git clone https://github.com/docker/getting-started.git
Cloning into 'getting-started'...
fatal: unable to access 'https://github.com/docker/getting-started.git/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

Proxy を超えるため、-e オプションを使用し、環境変数 HTTP_PROXYHTTPS_PROXY を指定して、コンテナーを起動します。

# コンテナー "repo" を削除
PS > docker container rm repo

# "-e" オプションを使用し、Proxy を指定して実行
PS > docker run --name repo -e HTTP_PROXY=http://your-proxy-server.example.com:8080 -e HTTPS_PROXY=your-proxy-server.example.com:8080 alpine/git clone https://github.com/docker/getting-started.git

ユーザーホームディレクトリーを見てみると、getting-started フォルダーが作成されていることが確認できます。

次に進みましょう!

2. Now, build the image

ここでは、Docker イメージのビルドを実行しています。

ビルド時に、ベースとなる Docker イメージの pull には、Docker for Windows 自身に設定した Proxy 設定で対応できるのですが、Docker イメージをビルドする際に実行する RUN 命令などには、別途環境変数を設定する必要があります。

これに対応するには、ビルド実行時のみ環境変数を設定できる --build-arg オプションを使用します。

PS > # --build-arg オプションを使用して Proxy を指定する
PS > docker build --build-arg HTTP_PROXY=http://your-proxy-server.example.com:8080 --build-arg HTTPS_PROXY=http://your-proxy-server.example.com:8080 -t docker101tutorial .

次に進みましょう!

3. Run your first container

手順 2 で作成した Docker コンテナーを起動します。起動には docker run コマンドが使用されますので、手順 1 と同様に -e オプションを使用して環境変数を指定します。

PS > # -e オプションを使用して、Proxy 設定を指定する。
PS > # ウェルノウンポートに含まれる 80 番ポートではなく、適当なポート (例では 8080) ポートを指定する
PS > docker run -d -p 8080:80 --name docker-tutorial -e HTTP_PROXY=http://your-proxy-server.example.com:8080 -e HTTPS_PROXY=http://your-proxy-server.example.com:8080 docker101tutorial

コマンド実行後、ブラウザーで http://localhost:8080/ にアクセスし、Docker の Getting Started ページが表示されることを確認します。

4. Now save and share your image

最後のコマンドは、今回作成した Docker イメージを、Docker Hub (Docker イメージの中心的なリポジトリー) に登録するものですので、今回は省略します。

ちなみに、docker push コマンド自体は、Docker for Windows 自身に指定した Proxy があるので、特に追加手順なくコマンドが完了します。

まとめ

Proxy 環境下で Docker for Windows のチュートリアルを実行する方法についてまとめてみました。

Proxy 環境下での基本戦略は、環境変数 HTTP_PROXY, HTTPS_PROXY を指定して Proxy を超えます。

Docker コマンドにより指定する方法が変わってきますが、コンテナーを作成する場合は -e オプションを、コンテナーイメージを作成する場合は --build-arg オプションを使用することで Proxy を超えることができました。

まだ Docker を使ったことがない方は、この記事を参考に地獄のような Proxy 環境下での Docker ライフに頭から突っ込んでみませんか?🔥👿🔥

Discussion

hiszukhiszuk

PROXYには毎回やられています。
ENVにで設定してしまうと、後々コンテナ内から
他のサーバーにアクセスするときに厄介なことになり困っていました。

--build-arg は初めて聞きました。

勉強になります。次試してみたいです。