1. 背景

我们常常会基于某个 image 来启动一个 container,在这个 container 中我们可能会执行某些操作,比如创建一个文件,但是当这个 container 退出以后,如果我们以同一个的 image 启动了另一个 container,在这个 container 中是看不到之前那个 container 创建的文件的。如果想让后面的 container 看到之前那个 container 创建的文件,就要把之前那个 container 保存成一个镜像,然后基于这个镜像来启动后面的那个 container。

2. Create Image from Container

举个简单的例子:(假设我们都是以root权限操作)

docker run -i -t centos:7.3.1611 bash /bin/bash

该命令执行完我们就基于 centos:7.3.1611 启动了一个 container,在这个 container 中我们通过 bash 来与之前的 container 交流,同时,这条命令执行完我们会看到命令提示符变成了:

后面的 a64e7edccf38 就是这个 container 的 ID,接着我们可以在这个 container 中创建一个文件,如下:

echo -e "Hello, world." >/root/test.c

然后我们退出这个 container(执行 exit),并通过以下命令来将这个 container 保存成一个镜像:

docker commit  a64e7edccf38 centos:new_change

接着我们可以以这个镜像来启动另一个 container,如下:

docker run -i -t centos:new_change  /bin/bash

在该 containe r中我们可以找到之前创建的 test.c 文件,如果我们以原来的 centos:7.3.1611 来启动后一个 container,是找不到 test.c 的。

3. Docker Galaxy Container

基于前面的知识,我们现在对基于 shenweiyan/galaxy-dev:latest 镜像的 container 进行中文化处理,并打包成 image,提交到阿里云 docker 镜像中心。
关于 shenweiyan/galaxy-dev:latest 镜像,这里需要说明两点:

  • shenweiyan/galaxy-dev:latest 镜像来源于 bgruening/galaxy-stable 基础镜像:docker tag bgruening/galaxy-stable:latest shenweiyan/galaxy-dev:latest

  • bgruening/galaxy-stable:latest 详细信息,请参考:https://github.com/bgruening/docker-galaxy-stable

3.1. 登陆,安装 node

bgruening/galaxy-stable(v17.09) 默认的 node 版本为 v0.10.25,该版本在使用 make client 静态文件打包的时候会出错,因此需要先升级 node。

1. 获取正在运行的 Galaxy container

$ docker ps
CONTAINER ID        IMAGE                          COMMAND              CREATED             STATUS              PORTS                                                                                              NAMES
79f2b6d67c6a        shenweiyan/galaxy-dev:latest   "/usr/bin/startup"   20 hours ago        Up About a minute   443/tcp, 8800/tcp, 9002/tcp, 0.0.0.0:10021->21/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp   sharp_poincare

2. 进入运行中的 Galaxy container

$ docker exec -it 79f2b6d67c6a bash
root@79f2b6d67c6a:/galaxy-central# which node
/usr/bin/node

root@79f2b6d67c6a:/galaxy-central# node -v
v0.10.25

3. 源码安装升级 node

root@79f2b6d67c6a:/galaxy-central# cd /export/tool_deps/
root@79f2b6d67c6a:/export/tool_deps# mkdir source local
root@79f2b6d67c6a:/export/tool_deps# cd source

# node-v9.2.0 源码下载
root@79f2b6d67c6a:/export/tool_deps/source# wget https://nodejs.org/download/release/latest-v0.12.x/node-v0.12.18.tar.gz
root@79f2b6d67c6a:/export/tool_deps/source# tar zvxf node-v0.12.18.tar.gz

# node-v0.12.18 源码编译安装(非常耗时间)
root@79f2b6d67c6a:/export/tool_deps/source# cd node-v9.2.0
root@79f2b6d67c6a:/export/tool_deps/source/node-v0.12.18# ./configure --prefix=/export/tool_deps/local/node-v0.12.18
root@79f2b6d67c6a:/export/tool_deps/source/node-v0.12.18# make
root@79f2b6d67c6a:/export/tool_deps/source/node-v0.12.18# make install

# 更改默认 node
root@79f2b6d67c6a:/export/tool_deps/source/node-v0.12.18# mv /usr/bin/node /usr/bin/node.bak
root@79f2b6d67c6a:/export/tool_deps/source/node-v0.12.18# mv /usr/bin/npm /usr/bin/npm.bak
root@79f2b6d67c6a:/export/tool_deps/source/node-v0.12.18# ln -s /export/tool_deps/local/node-v0.12.18/bin/* /usr/local/sbin/node

# 确认默认 node、npm 版本
root@79f2b6d67c6a:/export/tool_deps/source/node-v0.12.18# node -v
v0.12.18
root@79f2b6d67c6a:/export/tool_deps/source/node-v0.12.18# npm -v
2.15.11

3.2. Galaxy 中文配置

Galaxy 默认的中文配置位于 <galaxy_root>/client/galaxy/scripts/nls/zh,不同的中文翻译可自行修改该目录下的 locale.js 文件进行配置。

Galaxy 部分中文翻译,请参考:https://github.com/istevenshen/galaxy/blob/dev/client/galaxy/scripts/nls/zh/locale.js

3.3. 打包静态文件

root@79f2b6d67c6a:/export/tool_deps/source/node-v0.12.18# su galaxy
galaxy@79f2b6d67c6a:/export/tool_deps/source/node-v0.12.18$ cd /galaxy-central/
galaxy@79f2b6d67c6a:/galaxy-central$ node -v
v0.12.18

galaxy@79f2b6d67c6a:/galaxy-central$ make client
cd client && npm install
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.2 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

added 851 packages in 72.496s
cd client && node_modules/grunt-cli/bin/grunt
Running "check-modules" task

Running "uglify:target" (uglify) task
>> 231 sourcemaps created.
>> 231 files created.

Running "webpack" task
bundling webpack apps for production...

...

Running "less:dist" (less) task
>> 7 stylesheets created.

Running "clean:clean" (clean) task
>> 1 path cleaned.

Done, without errors.

# 退出 Galaxy container
galaxy@79f2b6d67c6a:/galaxy-central$ exit
exit
root@79f2b6d67c6a:/usr/local/source/node-v0.12.18#
exit

3.4. 停止 Galaxy container

# 执行停止操作前,请先确保 Galaxy container 已经退出,这一点非常重要

# 查看运行中的 Galaxy container
$ docker ps
CONTAINER ID        IMAGE                          COMMAND              CREATED             STATUS              PORTS                                                                                              NAMES
79f2b6d67c6a        shenweiyan/galaxy-dev:latest   "/usr/bin/startup"   21 hours ago        Up 33 minutes       443/tcp, 8800/tcp, 9002/tcp, 0.0.0.0:10021->21/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp   sharp_poincare

# 停止 Galaxy container
$ docker stop 79f2b6d67c6a
79f2b6d67c6a

3.5. 保存 container 为新镜像

# 保存镜像
$ docker commit 79f2b6d67c6a shenweiyan/galaxy-new
sha256:5629bfe51267105800600b8150ecbdd0d3b9bcd489893ec033034418da329129

3.6. 运行 galaxy-new 新镜像

# 查看所有镜像
$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
shenweiyan/galaxy-new   latest              5629bfe51267        About an hour ago   2.46GB
shenweiyan/galaxy-dev   latest              d603aeb08687        22 hours ago        2.22GB

# 查看正在运行的 container
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

# 基于新镜像,启动 container
$ docker run -d -p 11080:80 -p 11021:21 -p 11022:22 -v /data/docker/galaxy-data/:/export/ shenweiyan/galaxy-new:latest
7dfe36b780e37612548509d900cf0fbd403c16117e3aa211d9147b04d257a8f0

# 查看正在运行的 container
$ docker ps
CONTAINER ID        IMAGE                  COMMAND              CREATED             STATUS              PORTS                                                                                              NAMES
CONTAINER ID        IMAGE                          COMMAND              CREATED             STATUS              PORTS                                                                                              NAMES
7dfe36b780e3        shenweiyan/galaxy-new:latest   "/usr/bin/startup"   14 seconds ago      Up 13 seconds       443/tcp, 8800/tcp, 9002/tcp, 0.0.0.0:11021->21/tcp, 0.0.0.0:11022->22/tcp, 0.0.0.0:11080->80/tcp   wizardly_lichterman

最后,浏览器打开 “http://服务器ip:110080”  看到基于 galaxy-new 的中文版 Docker Galaxy(Tools 栏没有中文处理):

4. 阿里云镜像提交

4.1. 将镜像推送到 aliyun registry

详细的阿里云 Docker 镜像上传请参考:http://blog.shenweiyan.cn/post/Docker-%E9%95%9C%E5%83%8F%E4%B8%8A%E4%BC%A0%E5%88%B0%E9%98%BF%E9%87%8C%E4%BA%91,这里只记录一下主要的上传操作。

# username 为阿里云 docker 账户,需要先注册
$ sudo docker login --username=1910866178@qq.com registry.cn-shenzhen.aliyuncs.com

# [ImageId], [镜像版本号]请你根据自己的镜像信息进行填写
$ sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/stevendev/galaxy-new:[镜像版本号]
$ sudo docker push registry.cn-shenzhen.aliyuncs.com/stevendev/galaxy-new:[镜像版本号]

TIP:注意您的网络环境
从阿里云 ECS 推送镜像时,可以选择走内网,速度将大大提升,并且将不会损耗您的公网流量。

如果您申请的机器是在经典网络,请使用 registry-internal.cn-shenzhen.aliyuncs.com 作为 registry 的域名登录, 并作为镜像名空间前缀。

如果您申请的机器是在 vpc 网络的,请使用 registry-vpc.cn-shenzhen.aliyuncs.com 作为 registry 的域名登录, 并作为镜像名空间前缀。

到这里,你的 Galaxy Docker 镜像已经上传完成,接下来可以把你的镜像分享给其他人,让他们部署使用或者在你的镜像基础上进行更深入的开发。

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

可视化生信分析利器 Galaxy 之 Docker 开发相关推荐

  1. 可视化生信分析利器 Galaxy 之 Docker 部署

    Galaxy Project(https://galaxyproject.org/)是很多年前在云计算背景下诞生的一个生物信息学可视化分析开源项目, 是目前生物医学研究领域最受欢迎的在线生物信息分析工 ...

  2. 从零开始用snakemake搭建完整的甲基化生信分析流程(第一章)基础篇

    从零开始用snakemake搭建完整的甲基化生信分析流程 阅读文章后的收获:专业的snakemake编程技能:甲基化分析pipeline 作者生物信息学硕士,6年生信分析师从业经验,快速响应读者问题, ...

  3. 生信分析平台使用指导

    生信分析平台打包在docker容器中,并制作出镜像,可以在评论区留言获取镜像. 1. 环境配置 鲲鹏服务器一台(或ARM64服务器一台) 安装docker(运行docker查看服务器是否已安装) 2. ...

  4. docker卸载命令_使用docker完成生信分析环境搭建

    生信开发人员最头疼的问题,可能就是平台搭建和软件安装了.部署和迁移上要费很大力气.本文讲述使用docker制作一个镜像,后续通过导入自己定制的镜像,复制文件完成分析流程的部署和迁移. 如何使用dock ...

  5. Docker,使生信分析更简单、可重复

    [摘要] 本文向生信领域的人推荐了Docker容器技术,它使得生物基因领域的生信处理流程跟简单,过程可以很容易的重复.有助于减轻负担,加速生命探索. 先抛一个主题:每一个跑生信分析的人都应该知道Doc ...

  6. 一览生信分析的各种工作环境—Linux子系统、双系统、虚拟机和Docker

    " 本文围绕计算机操作系统,概述了当下各种生信分析的工作环境." 一文掌握Conda软件安装:虚拟环境.软件通道.加速solving.跨服务器迁移 01 - Linux子系统 Wi ...

  7. 生信分析流程构建的几大流派

    导言 构建生信分析流程是生物信息学从业人员必备的技能之一,对该项能力的评估常常是各大公司招录人员的参考项目之一. 在进行 ngsjs 项目时,我做了一张示意图来表示一些高通量测序数据分析项目重现性的要 ...

  8. cluego使用说明_生信分析绘图神器,你值得拥有!

    GO和KEGG分析是最常用的生信分析方法,在SCI论文中也经常见到,那么你能想到的GO和KEGG分析结果的展示方法有哪些? 条形图? 条形图2? 饼状图? 表格? 相比于上面这些,这样的网络图展示起来 ...

  9. 图形化开放式生信分析系统开发- 1基本需求分析及技术实现

    图形化开放式生信分析系统开发- 1基本需求分析及技术实现 起因/背景 软件获取:到官网sliverworkspace.com免费下载个人版,最新版本 2.0.277363 几张图片 下面进入正题,以具 ...

最新文章

  1. 解决iOS微信H5支付跳转微信后不返回App问题(Swift-WKWebview)(转)
  2. 【文文殿下】数论一些经典结论
  3. 如何生成 Flink 作业的交互式火焰图?
  4. html5专著,参考文献专著
  5. mysql case默认_MySQL知识整理10.1—存储过程和函数
  6. 非标准语法;请使用 _一文读懂使用MCU SPI访问具有非标准SPI接口ADC的方法
  7. java 工厂化生产
  8. 安装了最新版本的java 用友nc打不开_用友NC系统常见问题解决方法
  9. Python300篇电子书
  10. 3.2 矩阵乘积的秩
  11. java 面试高频问题 java8新特性
  12. linux下查看opencv版本
  13. 真实面试经历:十面阿里,七面头条,六个Offer
  14. JAVA HTML 转 PDF
  15. 企业级网络突然变得很卡解决办法
  16. OFD格式文如何打开,可以转成PDF吗?
  17. 机器人系统常用仿真软件介绍和效果
  18. 高一计算机专业班主任工作总结,高一年级第一学期班主任工作总结
  19. 软件测试常用术语中、英文概述
  20. 花5分钟用Redis撸一个东京奥运会金牌排行榜

热门文章

  1. 对 Kafka 和 Pulsar 进行性能测试后,拉卡拉将消息平台统一换成了 Pulsar
  2. 警惕 Spring Boot Actuator 引发的安全问题
  3. Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis | 附实践清单
  4. 程序员的技能树,决定了一生职业的高度
  5. 扒一扒 JVM 的垃圾回收机制,拿大厂offer少不了它!
  6. 小程序海外也能做吗?小程序海外主体公司开发的案例
  7. 使用工具知乎点赞工具
  8. springboot全局异常处理器
  9. 多级反馈队列调度算法事例
  10. 软件开发环境-集成机制