docker入门简介

简介

docker(容器技术)是实现虚拟化技术的一种方案,经过利用linux中命名空间,控制组和联合文件系统这个三个主要技术,来实现应用程序空间的隔离.经过对应用程序运行环境的封装来生成镜像并部署来实现跨平台,必定程度上加快了服务交付的总体流程.这篇文章主要介绍docker的一些基本概念来对容器技术有个简单的认识.python

docker与传统的虚拟机方案的对比

different

  1. 传统的虚拟机技术主要经过虚拟机监控器实现虚拟操做系统和宿主操做系统之间的交互.docker经过操做系统提供的能力实现了应用程序以前的隔离,减小了语言转换的过程,所以在启动速度和运行效率上更胜一筹.
  2. 容器技术更加偏向于程序的移植和依赖的打包而虚拟机技术则是侧重于彻底的虚拟出一个另外一个虚拟环境.
  3. docker能提供更快的交付过程.经过合理的对宿主操做系统资源的划分,能有效地提升系统的资源利用率.

核心技术介绍

namespace(隔离)

经过NameSpace技术能够修改容器的视图.linux

int clone(int (*fn)(void *), void *child_stack, int flags, void *arg);
复制代码

在linux中能够经过系统调用clone来建立新的进程,当第三个参数flags指定CLONE_NEWNS就会在新的namespace下启动新进程.
namespace
在上面的例子中系统自己有已经运行的不少进程,经过运行镜像而且执行bin/sh进程能够进入容器的交互界面.在容器中只能看到root进程和ps进程.这样经过namespace技术就实现了不一样进程间的隔离.nginx

Control Groups(限制)

namespace建立的进程与其余进程以前对主机的资源是竞争关系的.Linux Control Group技术就是限制进程组可以使用资源上限的一种技术.经过对容器使用资源的上线进行设置能有效地使用主机的资源和防止资源的过渡占用.redis

Union File System

联合文件系统能够同时挂载不一样的实际文件或者目录到同一目录.Docker基于联合文件系统提出AUFS(Advanced Union File System).AUFS经过将更新挂载到老的文件之上,来实现文件的保存修改.(空间的减小).docker

docker核心概念介绍

镜像

镜像是封装了虚拟环境的运行内容的文件包,docker经过利用AUFS实现了增量的镜像结构.flask

容器

容器是隔离的虚拟环境,里面运行着docker镜像.容器有如下的几种状态:bash

状态 含义
Created 容器已经被建立资源已经就绪,应用程序未运行
Running 容器中的应用容器处于运行中
Paused 容器暂停
Stopped 容器中止
Deleted 容器被删除,占有的资源以及资源的的管理信息已经被删除

数据卷

docker运行时的持久化目录,经过将外部目录挂载到容器中,来实现数据的持久化.app

docker engine

dockerEngine
docker engine是负责启动镜像的服务,经过docker client提供的指令调用docker server提供的接口来实现对镜像和容器的操做.学习

使用镜像

启动指令

docker run --name nginx -p 80:80 -d nginx // --name 执行容器名 -p 宿主端口:容器端口 将宿主端口映射到容器的端口 -d 后台的方式启动 

docker run --name myredis redis
docekr run --name test --link  myredis:redis debian  // --link Container:Alias 目标容器的名称:目标容器的别名 创建容器之间的连接
复制代码

操做容器指令

docker ps -a // 查看全部的容器  
docker images // 查看全部本地镜像 
docker stop name/ID  // 中止某个容器
docker rm name/ID // 删除某个容器
docker rm $(docker ps -aq) // 删除全部容器
docker rmi $(docker images -q) // 删除全部本地镜像
复制代码

使用docker建立一个hello world应用

编写程序文件

建立一个目录结构以下:
category
在index.py中编写程序的主要功能以下:ui

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
  return 'Hello world\n'

if __name__ == '__main__':
  app.run(debug=True,host="0.0.0.0") // 建立一个服务 在/路径下返回Hello world
复制代码

编写Dockerfile

镜像的构建能够经过Dockerfile和构建环境的上下文来完成.经过Dockerfile能够将镜像的构建过程持久化.

From python:3.4 // 从某一个基础镜像开始 From语句必须是Dockerfile的第一条语句
Run pip install Flask==0.10.1 // 执行指定的指令  因为每次执行的执行都会行成新的镜像层,能够将多个指令进行合并
WORKDIR /app // 执行Dockerfile指令执行的工做目录
COPY app /app  // src dest 这个指令将上下文的app目录复制到容器的app目录
CMD python index.py // 容器启动时执行的指令
复制代码

构建镜像和启动容器

docker build -t hello . //在当前目录的上下文上构建镜像
docker run --name haha -p 5000:5000 helloworld // 以haha容器名字启动helloword镜像 而且将容器的5000端口映射到外部的5000端口
复制代码

run

调试tips

  • 当执行启动镜像的命令,能够查看镜像的状态看镜像是否启动成功,对于没有成功启动的镜像能够经过docker logs查看启动的日志来排查缘由.

                                                       

                                                           欢迎你们关注个人公众号,一块儿学习

相关文章
相关标签/搜索