曲解したDockerの使い方
諸先輩方や前線に立っている方々の詳しい解説はとってもありがたいんですが,正直「DockerEngine」だの「仮想マシンとの違い」だの言われてもダルいんで私個人のDockerの使い方をまとめます.
やりたいこと
・新しいサーバの環境構築を楽にしたい
必要なもの
・Dockerがインストールされたサーバ
・Dockerfile(環境を作る設定ファイルのようなもの)
・requirements.txt(pythonのパッケージを指定するもの)
1.SudoなしでもDcokerコマンドが使えるように設定
# dockerグループを作って所属させます.
sudo groupadd docker
sudo gpasswd -a $USER docker
# dockerデーモンの再起動
sudo systemctl restart docker
再ログインで反映
2.何はともあれDockerfileとrequirements.txtを作ろう
mkdir ~/docker
cd docker/
# ここにDockerfileとrequirements.txtを作成
ls
>Dockerfile requirements.txt
Dockerfile
# dockerfile
# 基本となるイメージ(まあ適当にubuntuとか選んどきゃOK)
FROM ubuntu:18.04
# cuda使いたい場合
# FROM nvidia/cuda:11.0-base-ubuntu18.04
# PROXY
SHELL ["/bin/bash", "-l", "-c"]
ENV http_proxy "http://proxy:port/"
ENV https_proxy "https://proxy:port/"
# aptーgetでほしいソフト全部突っ込む
RUN apt-get update -y
RUN apt-get upgrade -y
RUN apt-get install -y vim python3 python3-pip nano curl
# 仮想環境の中にワーキングディレクトリを作る
RUN mkdir -p /home/work/
# pyhtonを使えるようにしておく
COPY ./requirements.txt /home/work/
RUN curl https://bootstrap.pypa.io/get-pip.py | python3
RUN pip3 install -r /home/work/requirements.txt
RUN echo "alias python='python3'" >> ~/.bashrc
RUN echo "alias pip='pip3'" >> ~/.bashrc
WORKDIR /home/work
requirements.txt
###### Requirements without Version Specifiers ######`
numpy
pandas
tqdm
ipdb
###### Requirements with Version Specifiers ######`
# バージョン指定するやつなんか適当に
3.仮想環境を作って使えるようにする
# imageを作る(時間かかる)
docker build -t [image] .
# imageからコンテナを作る
docker run --name [container] -d -t [image]
# cuda使いたい場合
docker run --gpus all --name [container] -d -t [image] --rm [image] bash
# ここまでで環境ができてる.
# コンテナを起動
docker start [container]
# コンテナに入る
docker exec -it [container] bash
# コンテナを停止
dicker stop [container]
# コンテナを再起動
dicker restart [container]
# コンテナ一覧
docker ps
# image一覧
docekr images
# コンテナを削除
docker rm [container]
# imageを削除
docker rmi [imageid]
4.別のサーバでimageを使う
# imageをsave
docker save [image] -o ./image.tar
file image.tar
# imageをload
docker load -i ./image.tar
docker images
# あとはコンテナを作って使えばOK
あとがき
以上です.
でもこれって正しい使い方なんですかね?
本職のエンジニアの前でこんな使い方したらマサカリでぶん殴られる可能性も高いんで,そこんところは自己責任でお願いします.