EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

UbuntuとAnacondaを自動インストールしてPython環境を構築するDockerfile

Docker

Docker

  • 作者:Adrian Mouat
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2016/08/17
  • メディア: 単行本(ソフトカバー)

目次

背景・目的

前回の記事では、Dockerの基本的な
コマンドを学びながら、イメージや
コンテナの作成・起動などを実行
出来るようになりました。

www.eureka-moments-blog.com

前回は「docker commit」コマンド
でコンテナからイメージを作成する
方法を行いましたが、今回はもう
一つの方法である、「docker build」
コマンドで「Dockerfile」から
イメージを作成する方法を学んで
いきます。

Dcokerfileに記述したい内容

今回は、下記のようなインストール
処理をしながらUbuntuイメージを
作成するDockerfileを作成します。

  1. Ubuntu18.04のベースイメージを取得
  2. 「wget」, 「sudo」コマンドをインストール
  3. Anaconda(Python3.7)をインストール
  4. 別途必要なPythonのライブラリをインストールする

作成するための環境

Dockerfileを記述するのにPyCharmを
使用します。
www.jetbrains.com

Dockerfileの文法に合わせてコードを
ハイライトしてくれたり、入力補完
もしてくれるので便利です。
f:id:sy4310:20200219234632p:plain

1. Ubuntu18.04のベースイメージを取得

まずはベースとするUbuntu 18.04
のイメージを取得するために下記
のように記述します。

# pull ubuntu 18.04 as base image
FROM ubuntu:18.04

試しにこれでビルドしてみます。
f:id:sy4310:20200220225212p:plain
どうやら正常にビルド出来たようです。
「docker images」コマンドで
イメージ一覧を見てみましょう。
f:id:sy4310:20200220225604p:plain
ちゃんと指定した名前のイメージが
作られていますね。成功です。
続いて、このイメージからコンテナ
を起動・ログインしてみます。
f:id:sy4310:20200220231420p:plain
ちゃんとログイン出来ました。
今度はログアウトしてみます。
f:id:sy4310:20200220232106p:plain
コンテナとの接続が切れて、更に
コンテナが削除されている事が
分かります。
「docker run」コマンドのオプション
で--rmを付けると、ログアウトと同時
にコンテナを削除するようになります。
これにより、コンテナ起動時の処理が
おかしくなったとしても、すぐに元の
まっさらな状態に戻せます。

2. 「wget」, 「sudo」コマンドをインストール

前回の記事でも書いたように、今回の
Ubuntuイメージには「wget」や
「sudo」といったコマンドが入って
いません。なので、これらを自動で
インストールしてくれるようにします。
先述した分に加えて、Dockerfileの
記述はこちらのようになります。

# pull ubuntu 18.04 as base image
FROM ubuntu:18.04

# update packages
RUN set -x && \
    apt update && \
    apt upgrade -y

# install command
RUN set -x && \
    apt install -y wget && \
    apt install -y sudo

「apt install」コマンドのオプションで
-yを付ければ、Yes/Noの質問にYesで
答えてくれるので自動で先に進めます。

3. Anaconda(Python3.7)をインストール

これが今回のメインです。
こちらのサイトからインストーラを
「wget」コマンドでダウンロード
して、インストールを開始させる
ようにします。

www.anaconda.com

Dockerfileはこちらのように
記述します。

# pull ubuntu 18.04 as base image
FROM ubuntu:18.04

# update packages
RUN set -x && \
    apt update && \
    apt upgrade -y

# install command
RUN set -x && \
    apt install -y wget && \
    apt install -y sudo

# anaconda
RUN set -x && \
    wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh && \
    bash Anaconda3-2019.10-Linux-x86_64.sh -b && \
    rm Anaconda3-2019.10-Linux-x86_64.sh

# path setteing
ENV PATH $PATH:/root/anaconda3/bin

ここでただbashでインストーラ
を実行するだけだと、途中の[Y/n]
の部分から先に進まなくなって
しまうのですが、オプションで
「-b」を付ける事で全てデフォルト
のまま先に進めてくれるように
なります。
ちなみに、更にオプションで
「-p」を付ければインストール先
のディレクトリを指定する事が
出来ます。何もしなければroot
ディレクトリの直下に設定
されます。
インストール後に、ENVコマンドで
インストール先にパスを通す事も
忘れずにやっておきましょう。
イメージをビルドしてからコンテナ
を作成、起動し、このように
CondaやPythonのバージョンを
確認出来たらOKです。
f:id:sy4310:20200222115758p:plain

4. 別途必要なPythonのライブラリをインストールする

Anacondaだけではインストール
されないPythonのライブラリも
あるので、requirements.txtも
一緒に用意して、自動で
インストールするようにします。

# pull ubuntu 18.04 as base image
FROM ubuntu:18.04

# update packages
RUN set -x && \
    apt update && \
    apt upgrade -y

# install command
RUN set -x && \
    apt install -y wget && \
    apt install -y sudo

# anaconda
RUN set -x && \
    wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh && \
    bash Anaconda3-2019.10-Linux-x86_64.sh -b && \
    rm Anaconda3-2019.10-Linux-x86_64.sh

# path setteing
ENV PATH $PATH:/root/anaconda3/bin

# python library
WORKDIR /root
ADD requirements.txt /root
RUN pip install -r requirements.txt

# move to root directory
WORKDIR ../

GitHub

今回作成したDockerfileは、
こちらのGitHubリポジトリで
公開しています。

github.com

参考資料

Dockerfileの概要や書き方、メリット
などはこれらの記事を参考にさせて
いただきました。

kitsune.blog

qiita.com

qiita.com

github.com

www.atmarkit.co.jp

https://genzouw.com/entry/2019/07/24/143749

qiita.com