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

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注