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で作成する
- Dockerfileを作成するディレクトリに移動する。(Dockerfileは原則1つのディレクトリに1つだけ保管し、ビルドに必要なファイル以外は同じディレクトリに入れない)
cd ~/Desktop
mkdir dockerfile
cd dockerfile
- Dockerfileを作成し、VSCで開く。
code dockerfile
- 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
でベースとなるイメージを指定する
RUN
、COPY
、ADD
によってDocker imageにLayerを追加RUN
でコマンドを実行(WORKDIR
でディレクトリを指定しない限りrootで実行される)COPY
、ADD
(tarを解凍)でDockerfileと同じフォルダにあるファイルをイメージに加える
CMD
でデフォルトコマンドを指定(原則Dockerfileの最後に記述)
ENV
で環境変数を設定する
- その他Tips
RUN
、COPY
、ADD
をする度にLayerが追加されるので&&
でコマンドをまとめる- 改行するときはバックスラッシュ(\)
- Dockerfileに追記して再度buildするときは、既存の
RUN
はできるだけ変更せずに、RUN
を足した方がbuild時間が短くなる(過去にbuildした時のLayerはローカルにcacheされているため)
DockerfileからDocker imageを作成する
docker build -t タグ .