コマンド編
カレントディレクトリにあるDockerfileからaというイメージを生成
$ docker build . -t a
aというイメージからbというコンテナを作成してラン
$ docker run -it -d --name bcd a
作ったbcdというコンテナの中に入る
個人的には.bash_profileやPATHをみる目的で使うことが多い
$ docker exec -it bcd bash
デバッグ編
find . -name "requirements.txt"
ls -la | grep hoge
実際に作ったDockerfile
Dockerfile...
FROM --platform=linux/x86_64 ubuntu:20.04
WORKDIR /work
SHELL ["/bin/bash", "-c"]
RUN apt list --upgradable
RUN apt update
RUN apt install -y build-essential libffi-dev libssl-dev zlib1g-dev liblzma-dev libbz2-dev libreadline-dev libsqlite3-dev git wget
RUN git clone https://github.com/yyuu/pyenv.git ~/.pyenv
# pyenv
ENV PYENV_ROOT /root/.pyenv
ENV PATH $PYENV_ROOT/bin:$PATH
ENV PATH $PYENV_ROOT/shims:${PATH}
# Install Python and set default
RUN pyenv install 3.7.4
RUN pyenv global 3.7.4
# Install pipenv
RUN pip install pipenv
RUN pipenv install \
flake8 \
jupyter \
jupyterlab \
kaggle \
matplotlib \
numpy \
pandas \
pep8 \
scikit-learn \
scipy \
seaborn \
signate \
sympy \
xgboost \
Pillow
備考
- aptを使うのはよくないらしい。
- 今の認識だとbash_profileをビルド時に読み込めないっぽいのでENV命令を使う必要がありそう
- pyenvのglobal,localの挙動よくわからん
- pipfile,pipfile.lockを使えばもっと簡潔なディレクトリ構成になりそう
【pyvenv】
- .pyvenv/versions/3.8.10/binの下にあるpipコマンドなどを使用している
- localを指定すると実行したディレクトリ内だけでPythonのバージョンが固定される
- globalは、フォルダを超えてそのバージョンが使われる
localはフォルダごとにバージョンを変えたい場合に使用できます。
globalは、すぐに起動して確認したい場合などで、標準で入っていてほしいバージョンを指定します。
アプリケーションであればlocalを指定しているほうが、外のバージョンが変わった際に悩まずに済みます。