可视化生信分析利器 Galaxy 之 Docker 开发
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:latestbgruening/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 开发的更多相关文章
- LJN数理化生信奥队自传
LJN数理化生信奥队, 原名“LJN信奥队”,简称“ljnoit”. 联系方式: QQ:3046036317 QQ群:555088375 (Offical群) 701124785 (Vip群) 邮箱: ...
- linux文本分析利器awk
转 快速理解linux文本分析利器awk 原文链接 杜亦舒 性能与架构 awk是什么 如果工作中需要操作linux比较多,那么awk是非常值得学习的 awk是一个极其强大的文本分析工具,把文件逐行的读 ...
- 给Clouderamanager集群里安装可视化分析利器工具Hue步骤(图文详解)
扩展博客 以下,是我在手动的CDH版本,安装Hue. CDH版本大数据集群下搭建Hue(hadoop-2.6.0-cdh5.5.4.gz + hue-3.9.0-cdh5.5.4.tar.gz)(博主 ...
- 给Ambari集群里安装可视化分析利器工具Hue步骤(图文详解)
扩展博客 以下,是我在手动的CDH版本平台下,安装Hue. CDH版本大数据集群下搭建Hue(hadoop-2.6.0-cdh5.5.4.gz + hue-3.9.0-cdh5.5.4.tar.gz) ...
- 窗口、消息查看分析利器Spy++
Spy++ —— 窗口.消息查看分析利器 Spy++ —— 窗口.消息查看分析利器 2016年07月15日 00:25:22 阅读数:23170 1,简介 Microsoft Spy++是一个非常 ...
- Visual Studio Code和Docker开发asp.net core和mysql应用
Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...
- Mac结合Docker开发
Mac结合Docker开发 前几天在看Java并发实战时,在Mac上写了一个示例,结果运行后无法按照书本上运行.主要是有些命令,在Mac和Linux是有区别的,比如top, Mac上是不支持-Hp,意 ...
- Springboot整合MongoDB的Docker开发,其它应用也类似
1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...
- MySQL 几种调式分析利器
目录 pstack gdb strace perf pstack 获取堆栈信息 问题线程的定位 负载较低 mysql_pid=4522 pstack $mysql_pid>pstack.info ...
- 智能驾驶数据后处理分析利器—INTEWORK-VDA
随着智能驾驶技术在新车上逐步普及,车辆研发阶段需要做大量的实车测试工作,当前的测试方式主要是路采实车数据后,按标准和法规进行测试场景提取和测试数据分析.调查显示绝大部分智能驾驶研发厂商 ...
随机推荐
- Redis Cluster集群搭建及节点的添加、删除
系统性学习,移步IT-BLOG 一.什么是 Redis Cluster Redis 是在内存中保存数据的,而我们的电脑一般内存都不大,这也意味着 Redis 不适合存储大数据,适合存储大数据的是 Ha ...
- 【Visual Leak Detector】QT 中 VLD 输出解析(四)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 测试代码 3. 使用 32 bit 编译器时的输出 4. 使用 64 bit 编译器时的输出 5. 输 ...
- Rainbond的 Gateway API 插件制作实践
Gateway API 作为新一代的流量管理标准,对原有 Ingress 的扩展不规范.移植性差等问题做出了改进.从兼容K8s生态和优化网关体验出发,Rainbond 支持以插件的形式扩展平台网关能力 ...
- $\mathcal{Crypto}$ 共模攻击原理实现以及$\mathcal{CRT}$优化
\(\mathcal{共模攻击概述}\) 共模攻击是一种攻击 \(\mathcal{RSA}\) 加密的技术,当两个密文使用相同的 \(\mathcal{RSA}\) 公共模数时,攻击者可以使用中国剩 ...
- MarkdownStudy03JDK
卸载JDK 删除jdk文件夹 删除配置环境(计算机>属性>高级>系统变量中的JAVA_HOME和Path) 删除JAVA_HOME环境变量 删除path环境变量 用dos窗口查看是否 ...
- 【深入浅出 Yarn 架构与实现】6-1 NodeManager 功能概述
本节开始将对 Yarn 中的 NodeManager 服务进行剖析. NodeManager 需要在每个计算节点上运行,与 ResourceManager 和 ApplicationMaster 进行 ...
- 运行项目报错Cannot read property 'styles' of undefined
原因是安装依赖版本不对,以下是我的解决办法: 1.先删除项目中package-lock.json 文件 及node_modules文件(可使用rimraf指令删除node_modules,直接删文件很 ...
- 景顺长城基于 Apache APISIX 在金融云原生的生产实践
本文介绍了景顺长城在金融云原生架构演进中选择 APISIX 作为网关工具的技术细节,同时分享了使用 APISIX 的实践细节,并对 APISIX 的未来展望进行了探讨. 作者李奕浩,景顺长城信息技术部 ...
- 如何使用Webpack工具构建项目
起步 webpack 用于编译 JavaScript 模块.一旦完成 安装,你就可以通过 webpack CLI 或 API 与其配合交互.如果你还不熟悉 webpack,请阅读 核心概念 和 对比, ...
- Python OOP面向对象编程
OOP 思想: 以模块思想解决工程问题 面向过程 VS 面向对象 由面向过程转向面向对象 例子,我要开一个学校,叫XXX 讲师 学生 班主任 教室 学校 常用名词 OO:面向对象 OOA: 分析 OO ...