Docker Hub 上のリポジトリにpushしてみる
Dockerイメージを作成し、Docker Hub 上のリポジトリにpush/pullしてみたので、
メモとして残しておきます。
参考
Dockerを使って機械学習の環境を作ろうとした話
https://qiita.com/penpenta/items/3b7a0f1e27bbab56a95f
上記を参考にして、Dockerfile、requirements.txtを準備しておく
Dockerfile
FROM python:3.8.0 RUN apt-get update \ && apt-get upgrade -y \ # imageのサイズを小さくするためにキャッシュ削除 && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ # pipのアップデート && pip install --upgrade pip # 作業するディレクトリを変更 WORKDIR /home/DeepLearning COPY requirements.txt ${PWD} # pythonのパッケージをインストール RUN pip install -r requirements.txt # 作業するディレクトリを変更 # コンテナの内部には入った際のディレクトリの位置を変更している WORKDIR /home/DeepLearning/src
requirements.txt
numpy pandas matplotlib scikit-learn
環境の準備
名前を付けて build
$ docker build --rm -t {イメージ名:タグ} {Dockerfileのパス} --rm : 構築に成功したら、全ての中間コンテナを削除 -t : '名前:タグ' 形式で名前とオプションのタグを指定
Dockerfile、requirements.txtをおいたディレクトリと同じ場所にcdで移動し、以下を実行
$ sudo docker build --rm -t deeplearning_env:latest .
確認
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE python 3.8.0 0a3a95c81a2b 3 weeks ago 932MB deeplearning_env latest 6a4aaef11001 7 minutes ago 1.33GB
Docker Hubにイメージをあげる
参考
自分で作ったDockerイメージを非公開環境にあげてみた
https://qiita.com/Eita11/items/60c65319ed092028a250
イメージをあげる前にタグ名をつける
$ docker tag イメージID ユーザー名/リポジトリ名:タグ名で実施 $ sudo docker tag 4e98e84b5951 username1/c21-repo:1.0
確認
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE username1/c21-repo 1.0 4e98e84b5951 24 minutes ago 1.87GB :
Dockerイメージをあげる
Docker Hubにアカウントを作成し、ブラウザからリポジトリを作成しておく
手元のLinux環境でdocker loginコマンドにてログインしておく
$ sudo docker login Username: username1 Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Login Succeeded
「docker push ユーザー名/リポジトリ名:タグ名」でコンテナをDocker Hubにpush
$ sudo docker push username1/c21-repo:1.0 The push refers to repository [docker.io/username1/c21-repo] cd1cbed40555: Pushed abf46b7b00f8: Pushed :
確認(pullしてみる)
docker Hubにあげたものをとってこれるか確認
ローカルにあるイメージを消す
$ sudo docker rmi -f 4e98e84b5951 Untagged: username1/c21-repo:1.0 Untagged: username1/c21-repo@sha256:2aa18aa8ed2670c3c3d28383dfbbcbda1d3c6add4ac8dab1aea1573e1c56a285 Untagged: username1/deeplearning_env:1.0 Deleted: sha256:4e98e84b595110b1065f5358805e0d1e5ef4c6407e7289ff791a99a706ee73d6 Deleted: sha256:49a72326fe0c72d89cea1833c0d5f21430f0dc6e13d243396f59babc697eda7a :
Docker Hubからpullする
$ sudo docker pull username1/c21-repo:1.0
確認
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE username1/c21-repo 1.0 4e98e84b5951 35 minutes ago 1.87GB python 3.8.0 0a3a95c81a2b 2 years ago 932MB
起動
$ sudo docker run --rm -it -v /home/user/create_docker_img:/home/DeepLearning username1/c21-repo:1.0 /bin/bash root@019fef5d7842:/home/DeepLearning/src#
--rm:コンテナから抜けるとコンテナを削除
-i:コマンドなどの入力情報をコンテナまで伝える(ないとコマンドの応答が返れないなどの影響がでる)
-t:コンソールの標準出力とコンテナの標準出力をつなげる
-v:ホストのファイルをコンテナにマウント {ホストのパス}:{コンテナのパス}
ここで打ち込んだコマンドが、コンテナ内で実行される
ホストのファイルをコンテナにマウントしているため、
ソースファイルなどはホスト側を参照すればよい
また、出力結果もホスト側に出力すればよい
# python3 --version Python 3.8.0
別のターミナルから起動しているコンテナ情報を確認
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 019fef5d7842 username1/c21-repo:1.0 "/bin/bash" 25 minutes ago Up 25 minutes cranky_saha