用 Docker 来解决 LinearDesign 的 GLIBC 版本过低问题
LinearDesign 介绍¶
LinearDesign 是一款用于优化 mRNA 设计的软件,旨在提高 mRNA 的稳定性和免疫原性。该项目由 He Zhang、Liang Zhang、Ang Lin 等研究人员开发,并已在 Nature杂志上发表相关研究成果。LinearDesign 通过算法优化 mRNA 序列,使其在保持高翻译效率的同时,具有更好的结构稳定性。
GitHub 地址:https://github.com/LinearDesignSoftware/LinearDesign
项目快速启动¶
确保你的系统满足以下依赖要求:
- Clang 11.0.0 或更高版本,或 GCC 4.8.5 或更高版本
- Python 2.7
- GLIBC≥2.29
glibc (GNU C Library) 是 GNU 发布的 C 标准运行库,是 Linux 系统中最底层、最核心的 API,几乎所有应用软件都依赖它。它主要负责封装 Linux 内核系统调用,并提供内存管理、字符串操作、文件操作等标准函数。
在 Ubuntu 18.04.6 LTS 中,GLIBC 最高只有 2.27,在不升级系统更新 GLIBC 风险太大,因此可以考虑用 Docker 的方式来解决 LinearDesign 的 GLIBC 版本过低问题。
构建 LinearDesign 的 Docker 镜像¶
编写 Dockerfile¶
# GUESSING....
# dfimage shenweiyan/lineardesign:1.0
# WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
# FROM shenweiyan/lineardesign:1.0
FROM ubuntu:jammy-20230425
ARG RELEASE
ARG LAUNCHPAD_BUILD_ARCH
LABEL org.opencontainers.image.ref.name=ubuntu
LABEL org.opencontainers.image.version=22.04
# ADD file:2fc6364d149eccc7f94ead482a0dcf24b0e44cc0d00ac6a2c1797776153e9608 in /
RUN apt-get update && apt-get install -y git
# Need to add Python2 (should be 2.7.18)
# https://linuxconfig.org/install-python-2-on-ubuntu-22-04-jammy-jellyfish-linux
RUN apt-get install -y python2
# Need to add GCC
# https://linuxconfig.org/how-to-install-gcc-the-c-compiler-on-ubuntu-22-04-lts-jammy-jellyfish-linux
RUN apt-get install -y build-essential
RUN apt-get clean
RUN git clone https://gitcode.com/bio-mirrors/LinearDesign.git /lineardesign # buildkit
RUN cd /lineardesign && make
RUN mkdir /mnt/data # buildkit
WORKDIR /lineardesign
VOLUME [/mnt/data]
CMD ["/bin/bash"]
构建镜像¶
$ docker build -t lineardesign:1.0 .
查看镜像¶
docker images
运行容器¶
可以使用下面的方式开启 docker 容器。
-
交互方式
这种方式,通过$ docker run -it -v /home/steven/data:/data lineardesign:1.0 bashexit退出容器后,容器被终止,可以通过docker ps -a来看终止状态的容器,可以通过docker rm <CONTAINER ID>删除终止状态的容器。 -
Daemon 方式,守护态运行
守护态运行运行的容器,在容器内$ docker run -d -it -v /home/steven/data:/data lineardesign:1.0 bashexit退出后,容器不会终止,可以使用docker exec -it <CONTAINER ID> bash再次进入容器。
这种方式可以让软件作为长时间服务运行,可通过ocker stop <CONTAINER ID>终止容器,通过ocker rm <CONTAINER ID>删除终止状态的容器。
将本地镜像推送到远程仓库¶
这是指把我们构建好的镜像 push 到 Docker Hub、阿里云 ACR、Harbor 等远程 Registry,这里我们 push 到 Docker Hub。
登录远程仓库¶
首次登录会提示输入用户名/密码或 Access Token。
# Docker Hub
docker login
# 阿里云 ACR
docker login registry.cn-hangzhou.aliyuncs.com
# 私有 Harbor
docker login harbor.yourcompany.com
为镜像打标签¶
远程仓库要求镜像名称格式为:<registry>/<namespace>/<repo>:<tag>。
# 推送到 Docker Hub(用户名:shenweiyan)
docker tag lineardesign:1.0 shenweiyan/lineardesign:1.0
# 推送到阿里云 ACR
docker tag lineardesign:1.0 registry.cn-hangzhou.aliyuncs.com/shen-lab/lineardesign:1.0
推送镜像¶
# 推送到 Docker Hub
$ docker push shenweiyan/lineardesign:1.0
The push refers to repository [docker.io/shenweiyan/lineardesign]
5f70bf18a086: Pushed
f307a02003d0: Pushed
67721cd40298: Pushed
593672012667: Pushed
52bfb0e9f36b: Pushed
5dd52f89c1a9: Pushed
8fb8ac00d103: Pushed
c90d82bb7e29: Pushed
b8a36d10656a: Pushed
1.0: digest: sha256:aa43b247010b964a9b3faf434409463df12002bd9ecf03b1d41bf55f74df988e size: 2204
# 推送到阿里云
$ docker push registry.cn-hangzhou.aliyuncs.com/shen-lab/lineardesign:1.0
验证推送¶
# 查看远程仓库(网页或 CLI)
# 或拉取测试:
docker pull shenweiyan/lineardesign:1.0
