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
这样即完成了全部的安装。


发表回复