在WIN10上安装Docker
第一步:启用虚拟机平台和 Linux 子系统功能
以管理员权限启动 PowerShell,然后输入以下命令启用虚拟机平台:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
以管理员权限启动 PowerShell,然后输入以下命令启用 Linux 子系统功能:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
在以上每一步命令执行完之后,PowerShell 中可能会提示你重新启动计算机。按“Y”可以重新启动。
第二步:更新到WSL2
下载 WSL2 Linux kernel update package :https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
下载成功后双击安装。
然后再次使用管理员模式打开power shell,输入指令指定WSL版本为2.
wsl --set-default-version 2
What is WSL?
Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
第三步:选择并安装发行版Linux(此处用Ubuntu)
在power shell输入安装命令:
wsl --install -d Ubuntu
等待即可。。。。。。。???不对啊我要装的是docker怎么装成Ubuntu了???难道是习惯了。。
真正的第三步 :升级WIN10版本
好突然,只是装个软件而已竟然要升级系统。
参考官方文档https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v,启用hyper-V必须使用WIN10专业版。某宝10块钱搞个序列号,开始等升级。。。
第四步:使用 PowerShell 启用 Hyper-V
power shell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Hyper-V 让你可以在 Windows 上以虚拟机形式运行多个操作系统。
第五步:下载并安装docker
https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows
自动重启一次就完成安装了
镜像和容器
检查docker安装
使用 PowerShell运行以下命令,检查 Docker 是否正常安装:
docker info
最后出现几个warning,似乎不用管
镜像 image
将 Docker image下载到桌面
地址:https://cloud.tsinghua.edu.cn/d/ad22768345664924b202/?p=%2FDocker&mode=list
并且通过在 Power shell 中输入以下命令导入将镜像导入到 Docker 中。
docker load -i C:\Users\YUJIN\Desktop\bioinfo_PartI-PartII-PartIII1-3.tar.gz
导入成功后docker程序界面显示镜像:
点击run以后,cli长这样。。应该不是这么用的,因为看起来非常难用。不显示当前路径也没有alias,甚至不能tab补全代码。。。恐怖。
容器 container
创建运行本地镜像的容器
根据教程,用以下代码可以创建名为 bioinfo_tsinghua 的容器,但是我每次运行都会出现找不到镜像的提示
docker run --name=bioinfo_tsinghua -dt -h bioinfo_docker --restart unless-stopped -v ~/Desktop/bioinfo_tsinghua_share:/home/test/share bioinfo_tsinghua

最终还是Stack Overflow救我狗命,原来是没有定义标签。先用命令
docker image list
找到所有已安装的镜像信息,可以看到名字和标签:
然后确切指定名称和tag,运行教程所述命令(其实就是在末尾加了个:2
)
docker run --name=bioinfo_tsinghua -dt -h bioinfo_docker --restart unless-stopped -v ~/Desktop/bioinfo_tsinghua_share:/home/test/share xfliu1995/bioinfo_tsinghua:2
没有报错。看来成功了。
命令参数说明
docker run
:创建容器命令(代码如上)-d, --detach
:Run container in background and print container ID 在后台运行-t, --tty
:Allocate a pseudo-TTY。让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上-h, --hostname string
:Container host name 设置hostname--restart string
:Restart policy to apply when a container exits (default "no") 。此处string是unless-stopped,表示除非主动退出否则一直运行。-v, --volume list
:Bind mount a volume。意思是主机 (Windows)和docker容器(例如Linux)设置了一个文件夹同步,可以互传文件:Windows"~/Desktop/bioinfo_tsinghua_share"
== LINUX: "/home/test/share"
修改权限
在 Windows 10 Pro 上,我们在 Docker 中创建的 /home/test/share 归 root 所有,所以要将其改为归 test 用户所有。
docker exec -u root bioinfo_tsinghua chown test:test /home/test/share
容器的创建、终止和再启动
启动容器bash:
docker exec -it bioinfo_tsinghua bash
只用 -i
参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。
当 -i -t
参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。
如果从这个 stdin 中 exit,不会导致容器的停止。
回到power shell
任务完成后,输入 exit
即可回到 Power shell
查看容器运行情况
docker ps #查看当前正在运行的容器
docker ps -a #查看所有容器
docker images #查看所有镜像
删除容器
docker rm -f bioinfo_tsinghua
当误操作导致软件无法运行时,则删除容器重新创建,这样就能重新得到一个干净的容器。
解决docker镜像下载慢的问题
设置国内镜像
按照教程pull不下来镜像,先尝试设置一下国内的docker镜像。这里使用阿里云的镜像。
复制页面上的地址至下图的docker-setting-Docker Engine的文本框中
文本框中
重新尝试下载
输入命令:
docker run -t -i ubuntu:18.04 /bin/bash
成功下载
好神奇,竟然几十m就能运行Ubuntu了。
输入exit
退出容器
一点感想
之前听说过docker,隐约记得与conda有点相似,这次打开鲁志教授课题组的网页教材,第一章就是使用docker的教学。一开始不理解为什么一上来要教docker,毕竟我在之前的操作里从来没有用到过这个工具。
在把这部分教程学完以后,对docker有了一些浅显的理解。虽然对于配置生信工具来说,conda已经非常足够,但与conda的傻瓜式环境配置有所不同,docker的好处则是“便携”。当你把工具打包成docker镜像以后,那么在所有系统里都可以通过docker这个工具来使用,并且不需要额外的环境配置(应该是这样,我也不太确定)。并且令我惊讶的是,虽然在其他地方看到过docker对资源的使用效率极高
这样的溢美之词,但是实际看到还是感觉有点震撼的。
总之docker和conda各有千秋,在不同的情况下有各自的优势。希望以后能够好好利用这些神器,与他们和平共处(别虐我,球球了。卑微.jpg)。
参考:
鲁志课题组网页教材:https://lulab2.gitbook.io/teaching/part-i.-basic-skills/1.setup/1.1.docker#2.0.a-update-your-operating-system-to-win10-pro
网络博客:http://blog.itpub.net/26736162/viewspace-2677779/
《Docker 技术入门与实战》:https://yeasy.gitbook.io/docker_practice/introduction




