可视化生信分析利器 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
随着智能驾驶技术在新车上逐步普及,车辆研发阶段需要做大量的实车测试工作,当前的测试方式主要是路采实车数据后,按标准和法规进行测试场景提取和测试数据分析.调查显示绝大部分智能驾驶研发厂商 ...
随机推荐
- Spring MVC 和 Struts 的区别是什么?
1. 拦截机制的不同 Struts2 是类级别的拦截,每次请求就会创建一个 Action,和 Spring 整合时 Struts2 的 ActionBean 注入作用域是原型模式 prototype, ...
- IDEA集成Gitee
配置Git 在设置里面点击Git,点击选择git安装目录下的bin目录下的git.exe,点击Test,出现版本号,证明配置成功. 配置码云 在设置里面按照下图步骤,即可成功配置码云 安装Gitee插 ...
- Defi开发简介
Defi开发简介 介绍 Defi是去中心化金融的缩写, 是一项旨在利用区块链技术和智能合约创建更加开放,可访问和透明的金融体系的运动. 这与传统金融形成鲜明对比,传统金融通常由少数大型银行和金融机构控 ...
- Java线程创建
程序.进程.线程 程序:指令和数据的有序集合,静态 进程:程序的一次执行过程,动态,系统分配资源的单位 线程:一个进程可以包含多个线程,一个进程至少有一个线程,线程是CPU调度的基本单位 线程创建 三 ...
- SpringBoot 整合 JDBC 实例
0.数据库表 CREATE DATABASE springboot; USE springboot; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_ ...
- vue自定义组件——split-pane
pre { overflow-y: auto; max-height: 500px } github地址: https://github.com/lxmghct/my-vue-components 组 ...
- MDC轻量化日志链路跟踪的若干种应用场景
"If debugging is the process of removing software bugs, then programming must be the process of ...
- Object o = new Object();
对象的创建过程: 1,申请内存,并初始化: 2,构造器初始化: 3,o指向对象. 对象在内存中的存储布局: 使用jol工具打印java对象在内存的存储布局: 其中,对象头的组成: 对象头包括Mark ...
- 从不均匀性角度浅析AB实验
作者:京东零售 路卫强 本篇的目的是从三个不均匀性的角度,对AB实验进行一个认知的普及,最终着重讲述AB实验的一个普遍的问题,即实验准确度问题. 一.AB实验场景 在首页中,我们是用红色基调还是绿色基 ...
- Tarjan学习笔寄
tarjan算法 参考博客: https://www.cnblogs.com/nullzx/p/7968110.html https://www.cnblogs.com/ljy-endl/p/1156 ...