Dockerfileの管理

Dockerfileとは、Docker imageの構築手順がテキスト形式で保存されているファイルです。Dockerfileをビルド(build)することで簡単にDocker imageを作成できます。Dockerfileの中身の例は以下の通りです。

FROM ubuntu:latest
RUN apt update
RUN apt install -y python3

他人と環境を揃える方法は主に2つあります。

  • Docker imageを共有する
  • Dockerfileを共有する

Docker imageを共有する場合は、docker hub経由でimageをプル/プッシュしますが、アップロードに時間がかかったり、インストールされているソフトのバージョンを柔軟に変えれないデメリットがあります。一方で、Dockerfileはただのテキストファイルなので、メールで簡単に送ることができますし、ソフトのバージョンを変える時はDockerfileの中身を少し書き換えるだけで済みます。

DockerfileをGitBashで作成する

  1. Dockerfileを作成するディレクトリに移動する。(Dockerfileは原則1つのディレクトリに1つだけ保管し、ビルドに必要なファイル以外は同じディレクトリに入れない)
cd ~/Desktop
mkdir dockerfile
cd dockerfile
  1. Dockerfileを作成し、VSCで開く。
code dockerfile
  1. Dockerfileの中身を書いて保存する。以下は自分がよくベースにしている環境です。
FROM ubuntu:20.04

# aptのミラーサーバーをjpに設定する
RUN sed -i 's@http://archive.ubuntu.com@http://jp.archive.ubuntu.com@g' /etc/apt/sources.list

# 必要なパッケージをインストールする
RUN apt update && \
    apt upgrade -y && \
    apt install -y wget sudo

# Anacondaをインストールする
RUN wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh && \
    bash Anaconda3-2019.10-Linux-x86_64.sh -b -p /opt/anaconda3 && \
    rm Anaconda3-2019.10-Linux-x86_64.sh

# AnacondaのPATHを通す
ENV PATH $PATH:/opt/anaconda3/bin

# パイソンのライブラリを更新する
RUN pip install --upgrade pip

# jupyter labの起動をデフォルトコマンドにする
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--LabApp.token=''"]

Dockerfileの書き方

  • FROMでベースとなるイメージを指定する
  • RUNCOPYADDによってDocker imageにLayerを追加
    • RUNでコマンドを実行(WORKDIRでディレクトリを指定しない限りrootで実行される)
    • COPYADD(tarを解凍)でDockerfileと同じフォルダにあるファイルをイメージに加える
  • CMDでデフォルトコマンドを指定(原則Dockerfileの最後に記述)
  • ENVで環境変数を設定する
  • その他Tips
    • RUNCOPYADDをする度にLayerが追加されるので&&でコマンドをまとめる
    • 改行するときはバックスラッシュ(\)
    • Dockerfileに追記して再度buildするときは、既存のRUNはできるだけ変更せずに、RUNを足した方がbuild時間が短くなる(過去にbuildした時のLayerはローカルにcacheされているため)

DockerfileからDocker imageを作成する

docker build -t タグ .