使用Anaconda3的Docker鏡像

原創

作者:你們大衛

假設本地 Ubuntu 服務器已經安裝好了Docker,這裏講述一下如何開始運行Anaconda3的Docker鏡像:

 

1. 搜索鏡像

搜索我們想要的anaconda鏡像:

docker search anaconda

 

 

2. 拉取鏡像

我們決定拉anaconda3官方鏡像,即 

continuumio/anaconda3 這個鏡像:

docker pull continuumio/anaconda3

注意,這個鏡像大小接近1GB,所以時間比較長。

 

3.運行鏡像,指定網絡端口

運行 anaconda3 鏡像的bash命令行,其中指定容器到宿主機的端口映射:

docker run -i -t -p 12345:8888 continuumio/anaconda3 /bin/bash

其中:

-i: 是  以交互模式運行容器,通常與 -t 同時使用;

-t: 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用;

-p: 指定端口映射,格式爲:主機(宿主)端口:容器端口

具體數字隨便寫的...

 

即可進入anaconda3的命令行。

 

 

4. 檢查Python的版本

python

 

當前是3.7.3版本

 

5. 查看已經安裝的庫

有兩種查看方法,pip 和 conda 均可

conda list
pip list

 

 

6. 安裝xgboost(或者其他包)

首先,原始鏡像應該是不帶xgboost的,測試一下:

(base) root@4e0533451e3a:/# python

Python 3.7.3 (default, Mar 27 2019, 22:11:17)

[GCC 7.3.0] :: Anaconda, Inc. on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import xgboost

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ModuleNotFoundError: No module named 'xgboost'

說明 xgboost 沒有被安裝,那按 ctrl+z 退出python環境,我們來安裝xgboost:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xgboost

順利安裝完畢,就可以調用 xgboost 了,如圖:

 

7. 給anaconda鏡像改名:

首先我們需要給容器重命名,爲了以後使用方便。

原來運行 anaconda鏡像 的容器名稱叫做 4e0533451e3a ,我們改名叫做AnacondaEnvironment。

docker rename cc432d1f6b13 AnacondaEnvironment

 

8. 重新運行改名後的鏡像:

docker start -i AnacondaEnvironment

測試是不是有xgboost:

root@hz-sjfx-test-199-138-5:~# docker start -i AnacondaEnvironment

(base) root@cc432d1f6b13:/# python

Python 3.7.3 (default, Mar 27 2019, 22:11:17)

[GCC 7.3.0] :: Anaconda, Inc. on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import xgboost

>>> xgboost.__version__

'0.90'

成功!

 

9. 在該容器中運行jupyter notebook:

之前我們已經指定了宿主機的端口和容器的端口相互映射,其中:

宿主機的端口是:12345

容器的端口是:8888

在容器中啓動 jupyter notebook:

jupyter notebook --port 8888 --ip 0.0.0.0 --allow-root

 

這時候複製:

http://127.0.0.1:8888/?token=a6b3189e8f96802b6d193475f0e30908c3a2e16816e1a444

並且把前面的127.0.0.1:8888(容器的ip和端口)改爲宿主機的ip和8888映射到宿主機的端口12345:

http://10.199.138.5:12345/?token=a6b3189e8f96802b6d193475f0e30908c3a2e16816e1a444

然後在本地瀏覽器中打開即可:

成功運行!

 

10. 把當前容器打包爲新的鏡像:

當前我們對原始的 anaconda3 鏡像做了一些改動:

  • 安裝了xgboost

  • 安裝了lightgbm

  • 隨意新建了一個ipynb文件

然後我們想把當前容器狀態打包爲新的鏡像,這樣以後我們就可以部署到其他地方了,而不用再安裝xgboost等等。

使用 docker commit 命令來將容器打包爲鏡像:

root@hz-sjfx-test-199-138-5:~# docker commit --help

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:

  -a, --author string    Author (e.g., "John Hannibal Smith <[email protected]>")

  -c, --change list      Apply Dockerfile instruction to the created image

      --help             Print usage

  -m, --message string   Commit message

  -p, --pause            Pause container during commit (default true)

 

我們的容器名字叫 id 是 cc432d1f6b13,所以:

docker commit -a "nimendavid" -m "nimendavid's first docker image based on Anaconda3 with xgboost and lightgbm" cc432d1f6b13 new_anaconda_xgboost

其中:

-a "nimendavid"   指的是作者

-m "nimendavid's......lightgbm"  指的是說明comment

cc432d1f6b13  指的是容器的短id,可以從命令行看出

new_anaconda_xgboost 指的是我們打包的新鏡像的名稱

 

現在應該就打包成功了。

11. 查看新鏡像:

docker image ls

 

 

我們可以看見第一條鏡像就是我們剛剛打包好的鏡像,有整整 3.05GB 大。

 

12. 將打包好的新鏡像上傳到 Docker Hub:

 

首先我們需要將這個新鏡像打上 tag,方便在公共服務器進行上傳:

docker tag new_anaconda_xgboost:latest nimendavid/machine_learning:v0.1

 

其中:

new_anaconda_xgboost:latest   

格式是 本地鏡像名稱:tag ,可以通過 docker image ls 查看

nimendavid/machine_learning:v0.1   

格式是 dockerhub用戶名/倉庫名:tag  ,需要自己有一個dockerhub賬號,v0.1就是自定義的版本號碼 

 

然後記得登錄在服務器上dockerhub,否則推送會報錯:

docker login

最後push本地鏡像到dockerhub即可,記得退出dockerhub的登錄:

 

推送還是比較慢的...耐心等待

登出 dockerhub:

docker logout

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章