管城网站建设,书画协会网站建设,海南百度竞价排名,建e室内设计网画图简介docker(容器技术)是实现虚拟化技术的一种方案,通过利用linux中命名空间,控制组和联合文件系统这个三个主要技术,来实现应用程序空间的隔离.通过对应用程序运行环境的封装来生成镜像并部署来实现跨平台,一定程度上加快了服务交付的整体流程.这篇文章主要介绍docker的一些基本…简介docker(容器技术)是实现虚拟化技术的一种方案,通过利用linux中命名空间,控制组和联合文件系统这个三个主要技术,来实现应用程序空间的隔离.通过对应用程序运行环境的封装来生成镜像并部署来实现跨平台,一定程度上加快了服务交付的整体流程.这篇文章主要介绍docker的一些基本概念来对容器技术有个简单的认识.docker与传统的虚拟机方案的对比传统的虚拟机技术主要通过虚拟机监控器实现虚拟操作系统和宿主操作系统之间的交互.docker通过操作系统提供的能力实现了应用程序之前的隔离,减少了语言转换的过程,因此在启动速度和运行效率上更胜一筹.容器技术更加偏向于程序的移植和依赖的打包而虚拟机技术则是侧重于完全的虚拟出一个另一个虚拟环境.docker能提供更快的交付过程.通过合理的对宿主操作系统资源的划分,能有效地提高系统的资源利用率.核心技术介绍namespace(隔离)通过NameSpace技术可以修改容器的视图.int clone(int (*fn)(void *), void *child_stack, int flags, void *arg);
复制代码在linux中可以通过系统调用clone来创建新的进程,当第三个参数flags指定CLONE_NEWNS就会在新的namespace下启动新进程.在上面的例子中系统本身有已经运行的很多进程,通过运行镜像并且执行bin/sh进程可以进入容器的交互界面.在容器中只能看到root进程和ps进程.这样通过namespace技术就实现了不同进程间的隔离.Control Groups(限制)namespace创建的进程与其他进程之前对主机的资源是竞争关系的.Linux Control Group技术就是限制进程组能够使用资源上限的一种技术.通过对容器使用资源的上线进行设置能有效地使用主机的资源和防止资源的过渡占用.Union File System联合文件系统可以同时挂载不同的实际文件或者目录到同一目录.Docker基于联合文件系统提出AUFS(Advanced Union File System).AUFS通过将更新挂载到老的文件之上,来实现文件的保存修改.(空间的减少).docker核心概念介绍镜像镜像是封装了虚拟环境的运行内容的文件包,docker通过利用AUFS实现了增量的镜像结构.容器容器是隔离的虚拟环境,里面运行着docker镜像.容器有以下的几种状态:状态含义Created容器已经被创建资源已经就绪,应用程序未运行Running容器中的应用容器处于运行中Paused容器暂停Stopped容器停止Deleted容器被删除,占有的资源以及资源的的管理信息已经被删除数据卷docker运行时的持久化目录,通过将外部目录挂载到容器中,来实现数据的持久化.docker enginedocker 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应用编写程序文件创建一个目录结构如下:在index.py中编写程序的主要功能如下:from flask import Flask
app Flask(__name__)app.route(/)
def hello_world():return Hello world\nif __name__ __main__:app.run(debugTrue,host0.0.0.0) // 创建一个服务 在/路径下返回Hello world
复制代码编写Dockerfile镜像的构建可以通过Dockerfile和构建环境的上下文来完成.通过Dockerfile可以将镜像的构建过程持久化.From python:3.4 // 从某一个基础镜像开始 From语句必须是Dockerfile的第一条语句
Run pip install Flask0.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端口
复制代码调试tips当执行启动镜像的命令,可以查看镜像的状态看镜像是否启动成功,对于没有成功启动的镜像可以通过docker logs查看启动的日志来排查原因. 欢迎大家关注我的公众号,一起学习转载于:https://juejin.im/post/5cc5c216e51d456e2500056b