标签: jupyter notebook

  • openEuler2309中通过docker-compose部署Anaconda3且运行jupyter notebook服务

    openEuler是国内基于Linux内核比较成熟完善的国产操作系统。Anaconda3是一个集合了python语言及其各项科学计算、人工智能开发的完整开发平台,而jupyter notebook是anaconda3下非常好用的一款多用途开发调试平台。

    docker工具是业界最通用的容器工具,而docker-composse是docker官方提供的自动化容器管理与使用工具,可以让我们方便的管理使用容器技术。

    假设我们的openEuler已安装完毕,网络已调试完成,且可以连接互联网。

    1、安装docker

    yum install docker

    在上面的命令执行完成后docker应该就下载安装好了。

    2、检查docker是否安装成功

    docker  --version

    执行这个命令系统会显示安装好的docker的版本。我的电脑显示为:

    3、让docker服务开机自启动

    systemctl enable docker   
    systemctl start docker

    运行完这两个命令docker服务就加入了系统自启动列表,且我们已启动了docker服务。我们可以通过下面的命令检查docker服务运行状态:

    systemctl status docker

    在我的电脑上运行结果如下:

    出现上面的提示表示docker服务已正常。

    4、更改docker访问仓库

    因为国内政策原因,docker默认的存储库因内已访问不正常,需要修改docker配置,将存储库改为国内的镜像仓库。

    在/etc/doker目录下创建一个daemon.json文件,文件内容如下:

    {  
      "registry-mirrors": ["https://docker.m.daocloud.io"] 
    }  
    

    5、安装docker-compose工具

    yum install docker-compose

    安装完成后可以输入下面的命令确认工具是否安装成功:

    docker-compose --version

    正常情况下电脑会显示如下:

    6、建立anaconda-jupyter系统文件夹。

    我将anaconda-jupyter相关配置文件及数据文件夹放在/home/wcs/目录下。

    mkdir /home/wcs/anaconda-jupyter
    

    7、建立docker-compose.yml文件

    进入/home/wcs/anaconda-pupyter文件夹,在此目录下建立docker-compose.yml文件,文件内容如下:

    version: '3.3'
    
    services:
      jupyter:
        image: continuumio/anaconda3:latest  # Anaconda3基础镜像
        container_name: anaconda_jupyter
        ports:
          - "8888:8888"                       # 映射端口
        volumes:
          - ./notebooks:/home/jovyan/work    # 持久化数据
        environment:
          JUPYTER_TOKEN: "your_token"    # 可选,设置访问令牌
          
        command: >
          /bin/bash -c "source activate root &&
          /opt/conda/bin/jupyter-notebook
          --ip=0.0.0.0 --allow-root --no-browser --NotebookApp.token='${JUPYTER_TOKEN:-}'   --notebook-dir=/home/jovyan/work"
        restart: unless-stopped

    8、利用docker-compose命令启动容器

    docker-compose命令启动时会从当前目录下读取docker-compse.yml配置从而启动相对应的容器,因此我们需要先进入我们的/home/wcs/anaconda-pupyter目录。

    cd /home/wcs/anaconda-pupyter
    docker-compose up -d

    执行完上面的命令后,docker会下载对应的容器映像,待下载完成后就会正确运行此容器。

    9、查看运行的容器

    docker ps

    系统显示如下:

    当系统显示上述信息时,anaconda3和jupyter notebook服务已正常运行了,它工作端口为8888,但此时还无法从别的电脑上访问这个服务,因为系统防火墙未开放相关的端口。

    10、从防火墙开启tcp/8888端口

    firewall-cmd  --permanent --zone=public --add-port=8888/tcp

    执行完这个命令后,我们从其它电脑上即可以访问这个服务器上的jupyter notebook服务了。

    在浏览器中输入相对应的网址http://192.168.0.19:8888/即可访问了。

    11、为jupyter notebook访问服务加上密码,保证系统安全性。

    在上面的jupyter中我们执行下面的python代码生成一个密码。

    from notebook.auth import passwd  
    print(passwd('your_password'))

    执行这个python代码显示如下:

    上面生成的一串argon2的加密字符串即是您设定密码”your_password”的加密码。将这串字符复制出来。

    在我们前面的docker-compose.yml文件夹中创建一个.env的环境变量设定文件(注意文件名前面的“.”)。文件内容如下:

    JUPYTER_PASSWORD=argon2:$argon2id$v=19$m=10240,t=10,p=8$2c/omfN42cqdjIHwCeJHPg$ccMenyCzQPuqGlgqKwSaVYlBE5Cp0zbygvs47t/osbE

    你可能会说环境变量设定不是一般都是在yml的environment:这个小节么?是的,一般情况是这样,但是我们的加密码字符串中有类似于”$”这样的yaml特珠字符串,会造成yml文件解析错误,所以才要加入.env这个外置环境变量设置文件。这个问题也让我困扰了很久。

    12、关闭现在的容器,修改docker-compose.yml,加入jupyter的访问密码。

    docker-compose down
    

    修改docker-compose.yml,修改后的文件内容如下:

    version: '3.3'
    
    services:
      jupyter:
        image: continuumio/anaconda3:latest  # Anaconda3基础镜像
        container_name: anaconda_jupyter
        ports:
          - "8888:8888"                       # 映射端口
        volumes:
          - ./notebooks:/home/jovyan/work    # 持久化数据
        environment:
          JUPYTER_TOKEN: "js12345678"    # 可选,设置访问令牌
          JUPYTER_PASSWORD: ${JUPYTER_PASSWORD}   #可选,读取.env文件中的JUPYTER_PASSWORD环境变量
    
        command: >
          /bin/bash -c "source activate root &&
          /opt/conda/bin/jupyter-notebook
          --ip=0.0.0.0 --allow-root --no-browser --NotebookApp.token='${JUPYTER_TOKEN:-}'  --NotebookApp.password='${JUPYTER_PASSWORD}' --notebook-dir=/home/jovyan/work"
        restart: unless-stopped
    

    再次启动容器后,再访问这个网址后就需要用密码才能正确访问了。

    docker-compose up -d

    访问时需要密码:

    13、将此容器设定为一个系统服务,随系统开关机可以自动启动。

    在/home/wcs/anaconda-jupyter/文件夹下建立一个anaconda-jupyter.service文件

    文件内容如下:

    [Unit]  
    Description=Docker Compose anaconda-jupyter  
    After=docker.service  
    Requires=docker.service  
    
    [Service]  
    Restart=always  
    WorkingDirectory=/home/wcs/anaconda-jupyter/
    ExecStart=/usr/bin/docker-compose up  
    ExecStop=/usr/bin/docker-compose down  
    
    [Install]  
    WantedBy=multi-user.target
    

    文件建立好后,执行下面的操作:

    cp /home/wcs/anaconda-jupyter/anaconda-jupyter.service /usr/lib/systemd/system
    systemctl enable anaconda-jupyter.service

    这样即完成了全部的安装。