zoukankan      html  css  js  c++  java
  • 使用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 <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

  • 相关阅读:
    浅析ES6中的iterator
    nodejs中的异步回调机制
    用好js与nodejs中的try...catch
    vscode设置html默认浏览器
    nodejs中相互引用(循环引用)的模块分析
    ES6—带默认值的函数参数及其作用域
    函数声明与函数表达式的区别
    let块级引起的闭包思考
    进程与线程
    angular(^4)-监控表格按键行为的问题
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/11967738.html
Copyright © 2011-2022 走看看