Docker简介
在说Docker之前,还是得聊聊政治。
唯物史观认为历史是人民群众创造的。
尽管历史人物对历史的情节有一定影响,
但是究其根本,
英雄只能顺应历史潮流涌现,
也就是说是时势造就了英雄,而不是英雄造时势。
打个比方说,
假如朱元璋生活在一个衣食无忧的现在,
他还能去造反当皇帝么?
也许跟你我一样,
吃饱了混混论坛,刷刷抖音……
他没有动力去造反,
更没有机会当皇帝。
所以说:
要有时势,然后才会出英雄。
对于我们搞生物的,
理解起来也很简单,
有了培养基,菌就很容易长起来。
对于我们搞数据分析的人来说,
要创造一个环境,软件才能有用武之地。
Docker到底有什么用?
要想创建这么一个环境,很多时候就要用到Docker。
Docker的官方LOGO对docker的功能描述的很形象(图1),
一条船驮着一堆集装箱在海上航行。
这条大船就相当于我们的服务器,
这是一个大环境,
里面包括很多东西,
比如操作系统,存储空间,以及各种软件工具等等。
这些集装箱我们可以称之为一个个小环境,
每个小环境之间是彼此独立,
而小环境与大环境之间也是彼此独立的。
这种结构好处多多。
应用场景1:环境切换。
我打算在Linux服务器上装一个软件X,
但是软件X依赖的其他库和软件包非常多,
需要全部安装,
我不想在服务器的系统上装太多工具,这时候你就可以建立一个基于虚拟镜像系统的Docker来安装软件X。
应用场景2:系统切换。
当我想在装有Linux系统的服务器上运行Windows系统的软件X的时候,
我可以先获取一个Windows系统镜像,
然后基于此镜像创建一个Docker容器并挂载到真实目录地址,
在Docker的Windows环境下安装软件X,
这样就可以在Linux服务器中通过与Docker的Windows环境来运行软件X。
应用场景3:移植。
比如说我在Docker环境中写好并测试成功了一套数据分析流程。
我想把这套流程安装在另一台服务器上,
如果直接安装的话,需要安装很多依赖的库和软件包。
如果用Docker,则只需要将这个镜像移植到另外一台服务器上,
基于该镜像创建一个容器,将流程拷贝过去即可,注意目录结构一定要一致。

这与现实中的集装箱很像,
A集装箱里面装满了牛奶产品,
B集装箱里面可以装满三聚氰胺,
A和B可以在同一条船上运输而不会导致牛奶里面混入三聚氰胺,
除非必要,
一般也不会导致三聚氰胺或者牛奶也不会涉及到船上其他地方,比如船员的卧室里。
这里面涉及两个概念:镜像(image)和容器(container)。
可以这么理解。
Docker即刀壳,不过注意刀壳并不是偏正短语,而是并列短语,意为刀和壳。
镜像为刀,容器为壳(图2)。
刀是用来做事的,切豆腐,杀猪,都行;
容器是用来装刀的,实际上这么比方也有点小瑕疵,再实际应用中容器不仅包括刀壳还包括使用刀的场景。

Docker用法
把大象放冰箱里需要怎么操作?
首先打开冰箱门,然后把大象放进去,最后关上冰箱门。
说到Docker的用法,其实也就像把大象放冰箱里这么简单。
分以下几个步骤:
1)创建Docker;
2)进入Docker;
3)玩Docker;
4)退出Docker。
docker pull ubuntu #获取镜像
docker images #列出镜像
docker run -it -v <real_path>:<virtual_path> centos #基于CentOS创建容器并挂载到真实目录地址<real_path>以及其所映射到容器中的虚拟地址<virtual_path>
docker ps -a #寻找容器
docker exec -it <container_id> bash #进入容器
docker build -f Dockerfile . #Dockerfile的使用方法
换个环境运行软件
docker run --rm -v `pwd`:<virtual_path> -w <virtual_path> <image_name>:<image_version> <command>
举例:
docker run --rm -v `pwd`:/data -w /data nimlang/nim:alpine ls
#在当前目录下以镜像nimlang/nim:alpine为环境运行ls命令,其实就是ls一下,哈哈!
布莱特杨
2020.6.24
网友评论