Docker学习

343 阅读3分钟

学习链接: www.ruanyifeng.com/blog/2018/0… www.zhihu.com/question/28…

软件在新的环境运行遇到的问题——环境配置

软件要想正确地运行,需要配置正确的运行环境,包括:操作系统,各类库和组件等。能否有办法,在安装软件的同时把原始环境也一模一样地复制过来呢?有的,那就是虚拟机

虚拟机

虚拟机就是带环境安装的一种解决办法,它可以在一种操作系统里面运行另一种操作系统。如在windows系统中运行Linux系统。该方案的缺点是:

  • 资源占用多:虚拟机会独占一部分内存和硬盘空间,哪怕虚拟机中应用程序需要的内存只有1MB,但虚拟机仍需要几百MB内存才能运行。
  • 冗余步骤多:虚拟机是完整的操作系统,一些系统级别的操作步骤往往无法跳过,比如用户登录。
  • 启动慢:启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。 虚拟机技术的代表,是VMWare和OpenStack。
    由于虚拟机存在以上缺点,Linux发展另一种虚拟化技术:Linxu容器。(LXC)

linux容器

Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。优点:

  • 启动快:相当于启动进程。
  • 占用资源少,不占用该程序不需要的资源,并且多个容器之间可以共享资源。
  • 体积小:只需要打包用到的组件。

对比虚拟机和容器: 对linux容器的封装——docker。Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。

docker

Build once,Run anywhere(搭建一次,到处能用)

docker熟于linux容器的一种封装,提供简单易用的容器使用接口,是目前最流行的linux容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行改文件就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

docker用途:

  • 提供一次性的环境:如本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
  • 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
  • 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

image文件

Docker 把应用程序及其依赖,打包在 image 文件里面。
如何生成image文件——dockerfile
dockerfile 文件是一个文本文件,用来配置 image。Docker 根据 该文件生成二进制的 image 文件。

// dockerfile 内容

FROM node:8.4 //该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
COPY . /app //将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
WORKDIR /app //指定接下来的工作路径为/app。
RUN npm install --registry=https://registry.npm.taobao.org 
//在/app目录下,运行npm install命令安装依赖。
//注意,安装后所有的依赖,都将打包进入 image 文件。
EXPOSE 3000 //将容器 3000 端口暴露出来, 允许外部连接这个端口。