【WSL】Docker镜像上传

【WSL】Docker镜像上传 1.安装WSL【学习记录】Docker初探(1)_docker wsl是什么-CSDN博客2.安装SDKMAN路径路径在wsl的ubuntu中可以直接进入windows中的文件夹原路径前面加上/mnt/如/mnt/d/demo/bio_pipeline安装curl -s https://get.sdkman.io | bash source /root/.sdkman/bin/sdkman-init.sh sdk version如果已经安装失败过卸载后重新安装sdkmanrm -rf /root/.sdkman curl -s https://get.sdkman.io | bash source /root/.sdkman/bin/sdkman-init.sh sdk version可以用SDKMAN来安装和管理各种 JDK 版本、Groovy、Scala、Maven 等工具。例如列出可用的 Java 版本sdk list java 安装某个 Java 版本sdk install java 17.0.12-tem以 Eclipse Temurin 17 为例 设置默认 Java 版本sdk default java 17.0.12-tem 查看帮助sdk help3.安装nextflow检查是否有java环境没有的话安装一下java -version sdk install java 17.0.12-tem下载并安装 Nextflow执行以下命令它会下载一个能自我安装的启动器文件curl -s https://get.nextflow.io | bash放home目录下并且加入环境# 创建用户本地 bin 目录 mkdir -p $HOME/.local/bin ​ # 移动 nextflow 文件 mv nextflow $HOME/.local/bin/ ​ # 将目录添加到 PATH echo export PATH$HOME/.local/bin:$PATH ~/.bashrc ​ # 重新加载配置 source ~/.bashrc查看是否安装成功nextflow -version4.python环境配置路径在wsl的ubuntu中可以直接进入windows中的文件夹如/mnt/d/demo/bio_pipeline更新系统安装软件# 更新软件包列表并升级已安装的包 sudo apt update sudo apt upgrade -y ​ # 安装 wget如果已经安装可以跳过 sudo apt install wget -y安装anconda然后选择pyhton版本在环境中安装python包同时也可以在anconda中安装nextflowwget https://repo.anaconda.com/archive/Anaconda3-2025.12-2-Linux-x86_64.sh ​ bash Anaconda3-2025.12-2-Linux-x86_64.sh ​ conda create -n nextflow_env python3.13.9常用shell命令# 查看内核版本和系统架构信息 uname -a # 查看已创建环境 conda env list # 创建 conda create -n nextflow_env python3.13.9 # 激活 conda activate nextflow_env # 生成文件 touch filename # vim写入 vim filename # 生成文件夹 mkdir 目录名 # 删除文件夹 # -r或 -R递归删除目录及其中所有内容 rm -r 目录名 # 安装和配置nextflow conda install -c bioconda nextflowWindows 换行符 (CRLF) 问题注意脚本第一行的#!/usr/bin/env python3后面多了一个\r导致系统找不到python3\r这个解释器sed -i s/\r$// bin/deg_analysis.py或者安装unix格式转换软件将脚本格式从 CRLF 转换为 LF# 安装 dos2unix sudo apt update sudo apt install dos2unix -y # 转换脚本文件 dos2unix bin/deg_analysis.py dos2unix bin/enrichment.py5.nextflow工作流运行一个自带的流程nextflow run hello写一个简单的示例nextflow流程nextflow流程由两部分组成1.process 流程名{}流程名自己取。{}里面是一次运行的代码可以将workflow{}中的多组参数分多次传入流程中重复运行process由三部分组成input/output/script2.workflow{}设置多组传入参数这里是从workflow{}分批次读入字符串作为val x 然后进行操作echo $x world! 关键是写script的操作3.然后workflow{}中设置需要分析的数据以Channel.of形式传入 sayHello | 进行展示view基础命令mkdir filenamecd filenametouch local_hello.nf构建一个.nf格式的脚本放入nextflow命令touch local_hello.nfvim local_hello.nf在nf中输入运行代码:wqcat local_hello.nfnextflow run local_hello.nfprocess sayHello { input: val x output: stdout script: echo $x world! } workflow { Channel.of(Bonjour, Ciao, Hello, Hola) | sayHello | view }示例项目/── bin/ # 运行脚本 │ ├── deg_analysis.py │ ├── enrichment.py ├── data/ # 示例数据 │ ├── counts1.txt │ └── meta1.txt └── runmain2.nf # Nextflow 流程脚本runmain2.nfnextflow.enable.dsl2 ​ process DEG { publishDir ./results, mode: copy, overwrite: true ​ input: tuple path(count_matrix), path(sample_info) ​ output: path deg_results.csv ​ script: deg_analysis.py \ --counts $count_matrix \ --meta $sample_info \ --out deg_results.csv } ​ process ENRICH { publishDir ./results, mode: copy, overwrite: true ​ input: path deg ​ output: path enrichment.csv ​ script: enrichment.py \ --deg $deg \ --out enrichment.csv } ​ workflow { // 输入通道 input_ch Channel.of( tuple( file(data/counts1.txt), file(data/meta1.txt) ) ) ​ // 运行 DEG得到 deg_results.csv 的通道 deg_ch DEG(input_ch) ​ // 将 deg_ch 传递给 ENRICH ENRICH(deg_ch) }运行conda activate nextflow_env nextflow run runmain2.nf6.上传docker hub结构/workspace/ ├── bin/ # 运行脚本 │ ├── deg_analysis.py │ ├── enrichment.py ├── data/ # 示例数据 │ ├── counts1.txt │ └── meta1.txt ├── runmain2.nf # Nextflow 流程脚本 └── environment.yml # 环境定义文件关键文件说明Dockerfile定义了如何从基础镜像构建出包含完整环境的镜像包括安装系统工具、SDKMAN、Java、Nextflow、Conda 环境并复制项目文件。environment.yml定义了 Conda 环境的依赖包pandas, scipy, requests 等通过 pip 安装 gseapy。runmain2.nf实现了 DEG → ENRICH 的线性流程是镜像默认运行的主脚本bin/ 下的 Python 脚本每个脚本对应一个 Nextflow 进程具有#!/usr/bin/env python3shebang 和可执行权限可直接被 Nextflow 调用。DockerfileFROM continuumio/miniconda3:latest WORKDIR /workspace ​ # 安装系统依赖 RUN apt-get update apt-get install -y --no-install-recommends \ curl \ wget \ procps \ unzip \ zip \ apt-get clean \ rm -rf /var/lib/apt/lists/* ​ # 单独安装 SDKMAN RUN curl -s https://get.sdkman.io | bash ​ # 单独安装 Java 21 RUN bash -c source /root/.sdkman/bin/sdkman-init.sh sdk install java 17.0.12-tem sdk default java 17.0.12-tem ​ # 设置 Java 环境变量 ENV JAVA_HOME/root/.sdkman/candidates/java/current \ PATH/root/.sdkman/candidates/java/current/bin:${PATH} ​ # 安装 Nextflow RUN curl -s https://get.nextflow.io | bash \ mv nextflow /usr/local/bin/ ​ # 创建 Conda 环境 COPY environment.yml /workspace/ RUN conda env create -f environment.yml ENV PATH/opt/conda/envs/nextflow_env/bin:${PATH} ​ # 复制项目文件 COPY bin/ /workspace/bin/ COPY data/ /workspace/data/ COPY runmain2.nf /workspace/ RUN chmod x /workspace/bin/*.py ​ CMD [/bin/bash]environment.ymlname: nextflow_env channels: - conda-forge - defaults dependencies: - python3.10 - pandas - scipy - requests - pip - pip: - gseapy - numpy容器构建和推送进入存放脚本的文件夹中运行docker build --no-cache -t sword950/nextflow-pipeline:v2 .构建成功后显示[] Building 551.4s (17/17) FINISHED推送镜像docker push sword950/nextflow-pipeline:v2注意事项work/目录在镜像构建时不会包含它们是在容器内运行 Nextflow 时动态生成并挂载或复制的。若需要持久化输出应在运行容器时通过-v将宿主目录挂载到容器内的/workspace/results