色々とハマったのでメモっておきます。
ファイル内のコメント(#)で説明を書いてます。
インストールしているもの:
python3, git, ansible, jupyter notebook, ubuntuの日本語化パッケージ(公式のubuntuイメージはそのままだと日本語ファイルが文字化けしたので)
gitは、対象機器からコンフィグを採取してファイルにした時、社内サーバに立てたGitLabに簡単に保管できるようにするため入れてます。
Dockerfile
FROM ubuntu:latest
MAINTAINER your_name
# イメージ容量の肥大を抑えるため、RUNはなるべく一つにまとめる。
# set -xを最初に書く事でコメントをshellに表示できるのでDockerのビルドプロセスを確認しやすい
RUN set -x && \
apt-get update && \
: "python3, pip, ubuntuの日本語化パッケージ, gitをインストールする" && \
apt-get install -y \
language-pack-ja-base language-pack-ja \
git \
python3-pip && \
locale-gen ja_JP.UTF-8 && \
: "ansibleとjupyter notebookをインストールする" && \
python3 -m pip install --upgrade pip && \
python3 -m pip install ansible && \
python3 -m pip install jupyter
# 日本語の扱いを可能にするための環境変数
ENV LANG ja_JP.UTF-8
これで確か、だいたい1GBくらいのイメージが出来上がった。
Buildコマンドについて
Proxy環境下では、Proxy認証のための値を渡してやらないとRUNで書いたものが実行できません。 そのため、--build-argオプションを使って対処します。また、今回はansible-basicというイメージ名にしました。
docker build --build-arg \
http_proxy=http://yourname@password:port \
--build-arg https_proxy=http://yourname@password:port -t ansible-basic .
ちなみに
jupyter notebookをDockerから使いたい場合は、イメージをrunする時にポートの指定が必要です。 以下はその例。docker run -p 8080:8080 -it --name test01 ansible-basic:latest /bin/bash
上記のコマンドでコンテナを作成した場合、またrootユーザーのままJupyter notebookを起動する場合はコマンドは以下のようになる。
jupyter notebook --port 8080 --ip=0.0.0.0 --allow-root
上記のコマンドでアドレスが出力されるので、ブラウザに打ち込んで以下のように書き変える。ex.)http://abcabcabchash:8080/hogehoge...
→http://ホストのIPaddress:8080/hogehoge...
これで見れるはず。
------後記------
データセンターに設置してある機器にAnsibleを使いたい、という時、データセンターの外から
SSHの許可がない場合はデータセンタへの持ち込み用PCにAnsible環境を入れて作業する事になるかと思います。
そんな時、各PCごとに環境構築するのは非常に手間がかかるし、また色んな人が毎回微妙に異なる環境を構築すると管理も大変になってしまうので、Dockerを使って用意することにしました。
Vagrant or Docker で迷いましたが、Ansibleでの作業が終われば手軽に削除が可能なのと、素早く環境を立てられる理由からDockerを選定しました。