Dockerのコンテナをプロキシ環境下で動かそうとしたら色々苦労し、
それをまたプロキシの外でも動かそうとしたら色々面倒だったので書き留めようと思います。
Dockerfileで設定
やっぱり基本はDockerfile。
最初の一歩はこんな感じ
FROM node:argon
MAINTAINER micu
# set proxy
ENV http_proxy http://proxy.example.com:8888/
ENV https_proxy http://proxy.example.com:8888/
EXPOSE 8000
CMD ["npm", "start"]
しかしこれでは常に同じプロキシサーバにアクセスすることになる。
同じ環境でしか使わないならいいけど、本番サーバにデプロイするとかなったら都合が悪い。
なので引数で渡すようにしてみる。
FROM node:argon
MAINTAINER micu
# set proxy
ARG http_proxy
ARG https_proxy
ENV http_proxy $http_proxy
ENV https_proxy $https_proxy
EXPOSE 8000
CMD ["npm", "start"]
これでdocker build
するときに引数で渡してやればそのプロキシサーバが設定される。
そのコマンドは
docker build --build-arg http_proxy=http://proxy.example.com:8888/ --build-arg https_proxy=http://proxy.example.com:8888/ .
はっきり言って長い。
こんなの毎回打ち込みたくないし、そもそもホストマシンとコンテナでプロキシが違うことなんてまずないだろうに、
いちいちコンテナ用にプロキシのURLを入力するのはどうかと思う。
ホストの環境変数から直接渡す
というわけで、ホストの環境変数を使ってdocker build
を行うスクリプトを組んでみる
# !/bin/sh
name=$1
echo http_proxy:${http_proxy}
echo https_proxy:${https_proxy}
echo image_name:${name:-${USER}/myapp}
docker build --no-cache=true\
--build-arg http_proxy=${http_proxy}\
--build-arg https_proxy=${https_proxy}\
-t ${name:-${USER}/myapp}\
.
ついでにイメージ名も勝手に適当なのをつけてくれるように