什么是Docker?

  Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker:Docker消除了重复的,繁琐的配置任务,并在整个开发生命周期中用于快速,轻松和可移植的应用程序开发-桌面和云。Docker全面的端到端平台包括UI,CLI,API和安全性,它们经过精心设计可在整个应用程序交付生命周期中协同工作。

说人话

  可以理解为一个环境的集合,类似于Python中的虚拟环境,可以更好的将各个项目依赖的环境集成出来,作为沙盒独立运行。

不知怎么,会让我让我想到:生产力决定生产关系,经济基础决定上层建筑。

Docker的优势?

  Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1、快速,一致地交付应用程序

  Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
  容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
  - 开发人员在本地编写代码,并使用 Docker 容器与同事共享工作;
  - 使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
  - 当开发人员发现错误时,可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证;测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

2、响应式部署和扩展

  Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。Docker具有的可移植性和轻量级的特性,还可以轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载

  Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而用更少的资源做更多的事情。

Docker的三个概念?

1、镜像(Image)

  类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。

2、容器(Container)

  类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

3、仓库(Repository)

  类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

Docker使用案例【LAMP】

 以前出过lamp原生环境安装教程:点击传送

1.在服务器(Server)上安装Docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2.挑选合适的镜像

  地址: https://hub.docker.com/
  LAMP:Linux + Apache + MySQL + PHP
  首先,在官网检索lamp镜像,然后使用docker pull命令进行下载。
lamp镜像

  选择镜像和某些编程框架中选择第三方库类似,首先需要选择自己需要的环境,保证该环境符合自己的需要;其次保证该库稳定;最后保证该镜像广泛的被使用,往往使用广泛的镜像更容易检索的使用时出现的问题。

3.pull镜像

docker pull thiagobarradas/lamp:php-7.0

4.运行镜像

docker run --name lamp -p80:80 -d thiagobarradas/lamp:php-7.0

–name :指定name
-p   :指定端口
-d   :后台运行容器,返回容器ID

5.进入镜像

docker exec -it lamp /bin/bash

-i   :以交互模式运行
-d   :为容器分配伪输入终端

6.文件复制

docker cp /[FILEPATH]/ lamp:[FILEPATH]

可以选择将宿主机文件复制到容器中,或将容器中的文件复制到宿主机中。

遇到的坑

1.反复使用run

  不熟悉命令,反复使用run,奇怪的是,有时候会生成一个“随机”的name,导致无法启动,或者只能使用container id 启动,会出现各种问题,后面知道可以使用exec进入已有容器。

2.频繁使用container id

  其实可以使用name进行替换,每次stop后再次 start 或者 run后会生成新的id,导致启动容器混乱。

tips:可以正常在docker中执行linux命令

cite:
菜鸟教程:https://www.runoob.com/docker/docker-tutorial.html
只要一小时,零基础入门Docker:https://zhuanlan.zhihu.com/p/23599229