统信uos20:利用docker部署python+jupyterlab开发环境

很多统信uos20计算机没有联网安装python开发环境的条件,但是工作中需要对数据进行分析处理,因而产生了离线部署python开发环境的想法。我首先下载了python3.11的源代码包,在uos中编译居然正常通过。但后续的麻烦来了:需要安装的库没法安装。尝试了一天,最终放弃。改用Docker方式部署,理由就不多解释了。

一、在uos中安装docker。我的系统是uos20 linux 4.19.0-arm64-desktop,CPU是FT-2000。在网上找到uos安装docker的方法:

1、在可上网的计算机上下载以下4个文件:

https://download.docker.com/linux/debian/dists/bullseye/pool/stable/arm64/docker-ce_20.10.23~3-0~debian-bullseye_arm64.deb


https://download.docker.com/linux/debian/dists/bullseye/pool/stable/arm64/docker-ce-cli_20.10.23~3-0~debian-bullseye_arm64.deb

 https://download.docker.com/linux/debian/dists/bullseye/pool/stable/arm64/containerd.io_1.6.24-1_arm64.deb

https://ftp.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.5.1-1+deb11u1_arm64.deb

2、将上述四个文件拷贝到uos的一个目录中,命令行进入该目录,用dpkg安装上述deb安装包。注意先安装libseccomp2_2.5.1-1+deb11u1_arm64.deb

dpkg -i libseccomp2_2.5.1-1+deb11u1_arm64.deb

也可以用下述命令:

dpkg -i *.deb
apt-get install -f

3、验证docker安装,如果命令正确返回,那么恭喜,我们可以继续进行下一步了。

docker version

二、利用github actions构建docker image

我的联网机上安装了windows docker destop,我本来想用这个docker创建一个arm64的运行镜像,但是因依赖包无法完成下载,始终无法成功,于是用githu action工作流完成docker image构建。

1、进入github帐号,建议一个新的仓库(如何访问github,请参考网络信息)。

2、在新仓库根目录下创建一个Dockerfile文件,内容如下:

# 使用官方的 Python 3.11 镜像作为基础镜像,确保选择 arm64 架构
FROM --platform=linux/arm64 python:3.11-slim-bullseye

# 安装 JupyterLab 和其他科学计算库
RUN python -m pip install --upgrade pip && \
     pip install --no-cache-dir ipython jupyterlab python-language-server python-lsp-server[all] \
     jupyterlab-lsp jupyterlab-language-pack-zh-CN numpy pandas matplotlib scipy \
    pillow pillow_heif pyright  openpyxl 
     
# 设置工作目录
WORKDIR /app

# 暴露 JupyterLab 的端口
EXPOSE 8888

# 启动 JupyterLab
CMD ["jupyter-lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root","--NotebookApp.token=''"]

3、在仓库根目录下新建.github/workflows目录,点击“Add file"->"Create new file"在弹出的窗口中,在文件名输入框中输入".github/workflows/build.yml",在文件内容中输入以下

   name: Build Docker Image
   on:
     workflow_dispatch:
      inputs:
        docker_image_name:
          description: '生成docker镜像的名称'
          required: true
          default: 'arm_python311'  # 设置默认的 Docker 镜像列表
        docker_image_var:
          description: '生成docker镜像的版本'
          required: true
          default: '3.0'  # 设置默认的 Docker 镜像列表

   jobs:
     build:
       runs-on: ubuntu-22.04
       steps:
         - name: Checkout
           uses: actions/checkout@v2

         - name: Set up QEMU
           uses: docker/setup-qemu-action@v3

         - name: Set up Docker Buildx
           uses: docker/setup-buildx-action@v2

         - name: Login to DockerHub
           uses: docker/login-action@v1
           with:
             username: ${{ secrets.DOCKER_USERNAME }}
             password: ${{ secrets.DOCKER_PASSWORD }}
 
         - name: Pull Docker Images and Package
           id: vars
           run: |
             image="${{ github.event.inputs.docker_image_name }}"
             var="${{ github.event.inputs.docker_image_var }}"
             build_image_name="github_act_${image}:${var}"
             echo build ${build_image_name}
             echo save ${build_image_name} to "${image//\//_}-image-arm64.tar"
             echo "save_image_tar=${image//\//_}-image-arm64.tar" >>$GITHUB_ENV 
             docker buildx build . --file Dockerfile \
             --platform linux/arm64/v8 \
             --tag ${build_image_name} \
             --load  
             # --output type=local,dest={{env.save_image_tar}}
             docker image list -a
             echo "build_image=${build_image_name}" >>$GITHUB_ENV
         
         - name: save docker image to tar
           run: |
             docker save -o ${{env.save_image_tar}} ${{env.build_image}}
             ls ${{ github.workspace }}

         #- name: Compress the TAR files
         #  run: | 
             # echo compress the "${{env.save_image_tar}}"
             # tar -czf github-act-images.tar.gz "${{env.save_image_tar}}"
             # ls ${{ github.workspace }}

         - name: Upload artifact
           uses: actions/upload-artifact@v4
           with:
             name: download_docker-images.tar
             path: ${{env.save_image_tar}}
             retention-days: 1  # 将保留天数设置为 1 天 最多可设置90天

         -  run: |
               ls ${{ github.workspace }}
               docker image list -a
         
         - name: Clean up the github local image
           run: |
              echo remove ${{env.build_image}}
              docker image rm ${{env.build_image}}
              
         - name: Clean up intermediate files
           run: |
             rm *-arm64.tar
             docker image list -a
             ls ${{ github.workspace }}

4、在仓库的首页上点击“Settings",在"Secrets and variables"下点击“Actios”, 在“Actions secrets and variables”页面中的“Repository secrets”中,新增两个变量,“DOCKER_PASSWORD”和“DOCKER_USERNAME”,填入你自己的docker用户名和登录密码。

5、点击仓库首页上的“Actions",点击"Build Docker Image",点击页面右侧"Run workflow",按要求填写镜像名称和版本。

6、工作流完成后,点击仓库首页上的”Actions",可看到成功运行完毕的工作流(绿色标识),点击完成的工作流,在工作流最后,点击下载压缩包download_docker-images.tar.zip。

三、安装并运行

1、将下载的压缩包拷贝到uos系统的目录中,解压缩后生成镜像的tar文件。执行:

docker load -i XXX_XXX.tar

 继续执行:

docker run -it --name python311 -p 8888:8888 -v you_local_folder:/app xxx.xxx:tag

其中you_local_folder替换成uos系统的工作目录,xxx.xxx:tag替换成导入的image。

2、在docker container窗口中,点击127.0.0.1:8888/lab相应的链接,找开jupyterlab页面。

3、uos浏览器不能正常显示jupyterlab页面。去360浏览器网站下载国内版本中,与本机匹配的浏览器版本,安装后,用其打开链接,显示正常。

四、遗留问题:

Docker文件中,并没有包含xeus-python这个支持jupyte debuger的库,原因是找不到对应匹配的版本。如何有方家能够解决jupyter debuger问题,请留言给出解决方案,不胜感谢。

写在最后,关于国产操作系统应用的开发,让我想起了曾经的90年代,在没有互联网的情况下,仍然有很多人,想方设法去开发自己的应用,比如曾经用debug编写的wps。在当前提倡推动国产操作系统应用生态发展壮大的形势下,国产操作系统应用开发环境的搭建应该不能像90年代那样自己折腾。应该考虑不同环境下,提供开发环境的不同安装方式,而不是局限于操作系统自身的线上应用商店。曾经的windows应用程序开发环境,有多少是通过离线方式安装到个人和学生的电脑上的呢?

你可能感兴趣的:(docker,python,jupyter,github,actions,workflow,统信uos20)