都应该懂点的那些--Docker

Docker是一个开源的应用容器虚拟化平台。具体做的就是快速的帮助开发者搭建应用周期里所需的各种环境,快速地部署项目以缩短开发周期。正是Docker给应用开发带来的高效率,使其在短短几年便越发地火热,项目也日趋成熟。


Docker简介

核心设计思路:build,ship and run any app,any where

  • build:构建镜像,封装依赖
  • ship:pull Docker镜像(Docker Image)
  • run:运行Docker容器(Docker Container)
  • any app:任何可以Dockerize(容器化)的app
  • any where:物理机、云主机、虚拟机…
    与虚拟机(VM)的比较:

docker3

docker2


Docker使用

如果你还没有安装它,你可以访问https://docs.docker.com/engine/installation/开始了解,其中包含了各种系统下的安装教材。

安装完成之后,试着创建一个简单的HelloWorld(在哪都这样Q.Q)

docker run Hello-World

docker–引用docker程序

run–用于创建或运行容器的子命令

Hello-World–用于创建容器的镜像名
Docker引擎收到命令后将进行如下操作

  1. 检查本地是否有Hello-World软件镜像
  2. 没有则从Docker Hub下载镜像
  3. 使用镜像创建容器并运行
    窗口输出Hello-World则表明容器成功运行。(同样的,在你熟练掌握后可以尝试着从Docker Hub获取别的镜像,例如:尝试新的软件、新的操作系统、以及一些有风险的实验)

其中镜像、容器是Docker的基本概念(参考https://docs.docker.com/engine/getstarted/step_two/),如果懒得每次敲sudo的话可以:

#Create the docker group
$ sudo groupadd docker
#Add your user to the docker group
$ sudo usermod -aG docker $USER
#Log out and log back in so that your group membership is re-evaluated

 


除了下载镜像,你也可以自己创建镜像:

  1. 首先你需要编写Dockerfile文件(用来描述组成镜像的文件、环境和命令)
  2. 在Dockerfile所在的目录使用docker build -t imagename创建你的新镜像
    当然如果你要是在docker hub上注册了帐号,还可以把镜像推送到你的的docker hub去,感觉就像是用GitHub一样。

(参考https://docs.docker.com/engine/getstarted/step_four/


刚才只实现了在单个主机上单容器应用的部署,而Docker还提供了更强大的应用部署功能-Docker三剑客

  • Compose

  • Machine

  • Swarm

    Compose:多容器应用部署利器
    在部署需要多容器的应用时,使用Compose文件将配置和容器间的依赖写在配置文件里,然后,使用单个命令从配置中创建和启动所有服务。

  • 使用Dockerfile定义应用程序的环境,以便可以在任何地方重现它。

  • 在docker-compose.yml中定义组成应用程序的服务,以便它们可以在孤立的环境中一起运行。

  • 最后,运行docker-compose up和Compose将启动并运行整个应用程序。


**Swarm && Machine :跨主机集群部署工具

**
Machine:简化的Docker命令行安装工具。它允许您在虚拟主机上安装Docker Engine,并使用docker-machine命令管理主机。

Swarm:管理Docker集群(Docker Machine),增强Docker跨主机能力。它将一个Docker主机池变成一个单一的虚拟Docker主机。 因为Docker Swarm服务于标准的Docker API,任何已经与Docker守护进程通信的工具都可以使用Swarm透明扩展到多个主机,并使用docker-swarm命令管理个节点主机。

为了与集群部署相适应,Docker 也可以为容器提供四种网络模式

  • host 模式,使用 –net=host 指定。
  • container 模式,使用 –net=container:NAME_or_ID 指定。
  • none 模式,使用 –net=none 指定。
  • bridge 模式,使用 –net=bridge 指定,默认设置。
    并通过docker-network进行管理

Referenced:

Docker学习笔记:http://blog.opskumu.com/docker.html

Docker官方文档:https://docs.docker.com/

觉得不错不妨打赏一笔