概要
書籍「Pythonで学ぶ強化学習」のサンプルコードを実行可能な環境をdockerで構築 (GUI出力対応)を会社等のプロキシ環境で使う際の設定になります。
環境
Ubuntu 18.04
目指す環境
- python==3.5
- tensorflow==1.12.0
- docker内でグラフプロット等のGUI使用可能
- プロキシ環境で動作するコンテナ
下準備
1. dockerのインストール
書籍「Pythonで学ぶ強化学習」のサンプルコードを実行可能な環境をdockerで構築 (GUI出力対応)の1を参照
2. ホスト側のGUI表示用設定
書籍「Pythonで学ぶ強化学習」のサンプルコードを実行可能な環境をdockerで構築 (GUI出力対応)の2を参照
3. NVIDIAドライバーとnvidia-docker2のインストール(GPU使用の場合)
書籍「Pythonで学ぶ強化学習」のサンプルコードを実行可能な環境をdockerで構築 (GUI出力対応)の3を参照
4. dockerのプロキシ設定とsudoなし設定
docker pull等を実行できるようにdockerのプロキシ設定を行います。
あとsudoも使わなくていいように設定しておきます。
参考記事 : Ubuntu Docker インストールとproxyとsudo無し実行
5. DNSの設定
Ubuntuの場合、dockerコンテナのDNS設定はホスト側のDNS設定を引き継ぎます。
具体的にはホストの「/etc/resolve.conf」がコンテナ内にコピーされます。
この際にGUIの設定画面等で設定したホスト側のDNS設定やDHCPから配布された設定が「/etc/resolve.conf」に反映されていない場合があります。
以下のページを参考に、nameserverが自分自身を指定している場合(127.0.0.1など)の場合は設定を変更して下さい。
参考記事 : Ubuntu 16.10: /etc/resolv.confのnameserver 127.0.0.1を防ぐ
dockerの設定
6. Dockerfile
書籍「Pythonで学ぶ強化学習」のサンプルコードを実行可能な環境をdockerで構築 (GUI出力対応)と比べて②環境変数設定, ③apt.confの作成 を追加しています。これでコンテナ内のプロキシ環境変数とaptのプロキシを設定しています。
使用する際は「PROXY_ID」, 「PROXY_PASS」, 「PROXY_HOST」, 「PROXY_PORT」のoooを自分のプロキシの「認証ID」, 「認証パスワード」, 「サーバー名」, 「ポート番号」に変更します。
# GPUの場合
# FROM tensorflow/tensorflow:1.12.0-gpu-py3
# ①CPUの場合
FROM tensorflow/tensorflow:1.12.0-py3
COPY into_container/requirements.txt /root/
# ②環境変数設定
ENV PROXY_ID ooo
ENV PROXY_PASS ooo
ENV PROXY_HOST ooo
ENV PROXY_PORT ooo
ENV PROXY_SERVER http://"$PROXY_ID":"$PROXY_PASS"@"PROXY_HOST":"PROXY_PORT"
ENV http_proxy "$PROXY_SERVER"
ENV https_proxy "$PROXY_SERVER"
ENV ftp_proxy "$PROXY_SERVER"
ENV HTTP_PROXY "$PROXY_SERVER"
ENV HTTPS_PROXY "$PROXY_SERVER"
ENV FTP_PROXY "$PROXY_SERVER"
# ③apt.confの作成
RUN echo "Acquire::ftp::proxy \"""$PROXY_SERVER""\";" > /etc/apt/apt.conf \
&& echo "Acquire::fttp::proxy \"""$PROXY_SERVER""\";" >> /etc/apt/apt.conf \
&& echo "Acquire::fttps::proxy \"""$PROXY_SERVER""\";" >> /etc/apt/apt.conf
# ④パッケージインストール
RUN add-apt-repository -y ppa:jonathonf/vim \
&& apt-get update \
&& apt-get install -y git vim xterm sudo python3-tk \
&& pip3 install --upgrade pip \
&& pip3 install -r /root/requirements.txt
# ⑤ユーザーの切り替え
RUN groupadd -g 1000 developer && \
useradd -u 1000 -g 1000 --groups sudo --create-home --shell /bin/bash developer && \
echo 'developer:P@ssw0rd' | chpasswd
USER developer
WORKDIR /home/developer
7. ビルド
普通にビルドすればOKです。
docker build -t baby-steps-env .
8. コンテナ起動
書籍「Pythonで学ぶ強化学習」のサンプルコードを実行可能な環境をdockerで構築 (GUI出力対応)の5を参照
9. 実行
書籍「Pythonで学ぶ強化学習」のサンプルコードを実行可能な環境をdockerで構築 (GUI出力対応)の6を参照
7. 動作確認
コンテナ内のbashコンソールで
書籍「Pythonで学ぶ強化学習」のサンプルコードを実行可能な環境をdockerで構築 (GUI出力対応)の7を参照
8. Gitリポジトリ
Gitに今回紹介したソースをあげていますのでよければご利用ください。
Ubuntu用 : kinziro/baby-steps-ubuntu-env_on_docker_in_proxy
参考にさせて頂いたサイト
Ubuntu Docker インストールとproxyとsudo無し実行
Ubuntu 16.10: /etc/resolv.confのnameserver 127.0.0.1を防ぐ