假設本地 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 <hannibal@a-team.com>") -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
轉自:https://blog.csdn.net/qq_27469517/article/details/100928433