可视化生信分析利器 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
随着智能驾驶技术在新车上逐步普及,车辆研发阶段需要做大量的实车测试工作,当前的测试方式主要是路采实车数据后,按标准和法规进行测试场景提取和测试数据分析.调查显示绝大部分智能驾驶研发厂商 ...
随机推荐
- 从零开始学Java系列之如何使用记事本编写java程序
前言 在上一篇文章中,壹哥给大家介绍了Java中的标识符及其命名规则.规范,Java里的关键字和保留字,以及Java中的编码规范. 我们在之前编写案例时,使用的开发工具都是windows自带的txt记 ...
- Java面试——不安全的集合类
Java 中有许多的集合,常用的有List,Set,Queue,Map. 其中 List,Set,Queue都是Collection(集合),List<String>中<>的内 ...
- 2PC(两阶段提交)【XA 与 Seata方案】
更多内容,前往 IT-BLOG 一.概述 2PC(two phase commit protocol,2PC)即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase).提 ...
- GLM:通用语言模型
ChatGPT已经火了一段时间了,国内也出现了一些平替,其中比较容易使用的是ChatGLM-6B:https://github.com/THUDM/ChatGLM-6B ,主要是能够让我们基于单卡自己 ...
- cs 保研经验贴 | 综合面试题库
绝大部分夏令营都需要面试:如果幸运的话,稍微问几个问题就结束了:不幸的话,可能要抓住你做项目.读论文.复现.做 pre 等等. 这篇博客适用于幸运的情况:绝大部分学校的面试题库,都是彼此重合的,并且一 ...
- python入门教程之十七进程、线程和协程
进程 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次 ...
- etcd/raft选举源码解读
ETCD-raft笔记 0. 引言 该篇博客基于etcd v3.5.7版本,首先会简单介绍etcd/raft对Raft选举部分的算法优化,然后通过源码分析etcd/raft的选举实现. 1. etcd ...
- 1.封装PageHelper实现分页
前言 这几天想着动手将一些技术融合到项目中,昨天思考了会儿,想起了我与亲戚的对话:我说:"我想将若依项目完整的实现一遍",亲戚给我反馈到"你没必要完整复现若依项目,而且你 ...
- 用Abp实现找回密码和密码强制过期策略
@ 目录 重置密码 找回密码 发送验证码 校验验证码 发送重置密码链接 创建接口 密码强制过期策略 改写接口 Vue网页端开发 重置密码页面 忘记密码控件 密码过期提示 项目地址 用户找回密码,确切地 ...
- 快速上手Linux核心命令(一):核心命令简介
前言 众所周知,Linux在服务器中占用不可替代的位置.大多数互联网公司,服务器都是采用的Linux操作系统.而Linux是一个主要通过命令行来进行管理的操作系统.只有熟练掌握Linux核心命令,在使 ...