1、Docker部署及基础理论
1、Docker入门简介
Docker技术类似码头上看到的集装箱,最早集装箱没有出现的时候,码头上有许多搬运的工人在搬运货物,有了集装箱以后,搬运货物变得简单,通过集装箱的搬运模式更加单一、高效,将货物打包在集装箱里面,可以复制货物之间相互影响。
如果要将货物搬运到另一个码头就需要装运,通过集装箱,可以直接把它们运送到另一个航舱内,而且完全可以保证里面的货物是整体地搬迁,而不会损坏货物本身。
而Docker虚拟化正是基于类似的原理,将原本复杂的环境打包成为镜像模块,然后将模块迁移到各个平台,可以快速地交付使用,从而减少了人工大量的干预。
Docker是一个开源的应用容器引擎,开发者使用打包他们的应用以及依赖包到一个可移植的容器中,然后发布到如何流行的Linux机器上,进而实现虚拟化。
容器是完全使用沙箱机制的,而且互相之间不会有如何接口,几乎没有性能开销,可以很容易地在机器和数据中心运行,最重要的是,他们不依赖于如何语言、框架或包括系统。
Docker虚拟化和传统虚拟机(KVM、Xen等)方式的不同之处在于Docker虚拟化可以在操作系统层面上直接实现App或者虚拟化,直接复用本地机器的操作系统,而传统方式则需要在硬件的基础上,虚拟GurstOS操作系统,然后在GuestOS操作系统上部署相关的App应用。
Docker虚拟化实施有以下三个概念:
- Docker镜像:Docker镜像是一个静态模块,与常见的ISO镜像类似,是一个样板,不能直接修改,可以通过封装生成;
- Docker容器:基于Docker镜像运行启动的应用或系统,称之为一个Docker容器或Docker虚拟机;
- Docker仓库:Docker仓库是存放Docker镜像的地方,常见分为公开仓库和私有仓库两种形式;
Docker仓库的用处:
Docker仓库是Docker镜像的存储仓库。可以推送镜像到docker仓库中,然后在docker客户端,可以从docker仓库中搜索和拉取镜像。
Docker容器是如何工作的:
一个Docker容器包含了一个操作系统、用户添加的文件和元数据(meta-data)。每个容器都是从镜像建立的,镜像告诉Docker容器内包含了什么,当容器启动时运行什么程序,还有许多配置数据。Docker镜像是只读的,当Docker运行一个从镜像建立的容器,它会在镜像顶部添加一个可读写的层,应用程序可以在这里运行。
Docker用途:简单配置、代码流水管理、开发效率、应用隔离、服务器整合、多租户、快速部署
2、Docker LXC及Cgroup
Docker虚拟化的由来需要从Docker发展历史来看,最早的Docker技术为LXC+联合文件系统(AUFS)组合。Docker0.9.0版本开始引入libcontainer可以视作LXC的替代品,其中LXC负责资源管理,AUFS负责镜像管理。而LXC包括Cgroup、Namespace、Chroot等组件,并通过Cgroups进行资源管理。
Docker、LXC、Cgroup三者的关系是Cgroup在最底层落实资源管理。LXC在Cgroup上封装了一层,Docker又在LXC封装了一层。
Cgroups最初的目标是为资源管理提供一个统一的框架,整合现有的Cpuset等子系统,也为未来开发新的子系统提供接口。
Linux container容器可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。容器有效地将由单个操作系统管理的资源划分到独立的组中,以便更好地在独立的组之间平衡有冲突的资源使用需求。
3、Docker虚拟化特点
Docker虚拟化跟传统虚拟化相比,有以下特点:
- 操作启动快,运行时的性能可以获取极大提升,管理操作(启动、停止、开启、重启等)都是以秒或毫秒为单位的;
- 轻量级虚拟化,用户会拥有足够的“操作系统”,仅需添加或减小镜像即可,单台服务器上可以部署100~1000个containers容器,而传统虚拟化能虚拟10~20个虚拟机就非常不错了;
- 开源免费,成本低,由现代Linux内核支持并驱动;
- 前景及云支持,正在越来越受欢迎,各大主流公司都在推动Docker的快速交付;
- 更简单的管理,使用Docker只需要小小的修改,就可以替代以往大量的更新工作,所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理;
4、Docker虚拟化原理
Docker虚拟化中最核心部分为Docker引擎,Docker引擎是一个C/S(client/server)机构的应用;
Docker server是一个常驻进程,rest API实现了client和server间的交互协议 ,CLI实现容器和镜像的管理,为用户提供统一的操作界面。Docker使用C/S架构,client通过接口与server进程通信实现容器的构建、运行和发布,client和server可以运行在同一台集群,也可以通过跨主机实现远程通信。
Docker镜像作为Docker中最基本的概念,有以下特性:
- 镜像分层:每个镜像都由一个或多个镜像层组成;
- 可通过在某个镜像上加上一定的镜像层得到新镜像(此过程可以通过编写DockerFile或基于容器Commit实现);
- 每个镜像层拥有唯一镜像ID;
- 镜像在存储和使用时共享相同的镜像层(根据ID),所以在Pull镜像时,已有的镜像层会在自动跳过下载;
- 每个镜像层都是只读的,即使启动成容器,也无法对其真正的修改,修改只会作用于最上层的容器层。
Docker容器,可以理解为一个或多个运行进程,而这些运行进程将占有相应的内存、相应的CPU计算资源,则通过Docker镜像的镜像层文件来提供。
基于每个镜像的json文件,Docker可以通过解析Docker镜像的惊悚文件,获知应该在这个镜像之上运行什么样的进程,应该为进程配置怎样的环境变量,Docker守护进程实现了静态向动态的转变。
5、Docker安装配置-CentOS7.X系列安装Docker软件
sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
setenforce
yum -y install epel-release
yum -y install docker*
systemctl start docker
报错:
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
解决办法:
vi /etc/sysconfig/docker

systemctl start docker
systemctl enable docker
ps -ef |grep docker

Docker下载加速,默认docker下载是从国外去下载,但是下载速度慢,所有我们 这边使用国内的:
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}
EOF
systemctl restart docker
6、Dockers必备命令
公共仓库Nginx和CentOS镜像下载以及本地导入CentOS镜像,执行如下命令
docker pull centos :Docker下载CentOS镜像

docker pull nginx :Docker下载Nginx镜像

本地导入镜像:
格式:cat 本地容器快照名 | docker import-自定义容器名:自定义标记名
docker version :查看Docker版本

docker info :查看当前信息

docker search centos :搜索可用Docker镜像

docker search -s 500 nginx :搜索星级为500以上的镜像

docker pull docker.io/nginx :下载nginx镜像

docker images :查看当前Docker所有镜像

启动Docker镜像:
-i:表示交互输入 -t:表示打开终端 -d:表示后台启动
docker run -i -t centos /bin/bash

进入Docker容器:
docker exec -it a9ca644fd04f /bin/bash :红色部分是容器的ID

退出Docker容器:
(1)exit或者ctrl+d :退出并停止容器
(2)先按ctrl+p再按ctrl+q :退出伪终端,容器后台运行
docker ps :查看容器,-l获得最后一个容器的ID,-a查看所有的容器

docker start id :启动Docker容器,可以利用docker ps查看容器,然后输入iD

docker stop id :关闭Docker容器

docker save -o centos-7.2.tar centos:latest :存储镜像

docker rm id :删除Docker容器,如果删除多个容器则需要使用空格隔离即可~!

docker rmi id :删除Dokcer镜像

docker load < centos-7.2.tar :导入容器快照

docker export -o centos-7.2.test.tar container_id :Docker导出镜像

cat centos-7.2.test.tar | docker import - centos-7.2.test :本地导入Docker镜像,红色为镜像名,需要自定义

docker run -p 5500:80 -it nginx /bin/bash :将宿主机5500端口映射给容器的80端口
nginx :启动nginx服务

图片显示

1、Docker部署及基础理论的更多相关文章
- ASP.NET Core开发-Docker部署运行
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- Docker部署Hadoop集群
Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...
- 程序开发使用docker部署
我们公司自己研发了一套 grand-line 系统,使用 docker 来部署项目. 我是第一批小白鼠,一开始网络差,build 一次要半个小时,连接进入 web shell 也很慢,部署一个微信项目 ...
- 我使用celery以及docker部署遇到的问题
首先我本机测试时没有问题的,但是在线上docker中,任务一直显示 "Sending due task".超时的任务是 django orm update 操作,本地不会出现这样的 ...
- Docker部署SDN环境
2014-12-03 by muzi Docker image = Java class Docker container = Java object 前言 5月份的时候,当我还是一个大学生的时候,有 ...
- 在生产环境使用Docker部署应用
导读 Docker现在越来越流行,但是真正在生产环境部署Docker还是个比较新的概念,还没有一个标准的流程.作者是ROR的程序员,作者结合平时的部署经验,联系Docker的特点,向大家分享了其在生产 ...
- Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈
版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...
- NET Core Docker部署
NET Core Docker部署 前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行 ...
- 我使用 Docker 部署 Celery 遇到的问题
问题1 - Sending due task 本机测试时没有问题的,但是在线上 docker 中,任务一直显示 "Sending due task".超时的任务是 Django O ...
随机推荐
- 玩转Django2.0---Django笔记建站基础四(视图)
第四章 视图 4.1 探究视图 一.视图说明 视图(View)是Django的MTV架构模式的V部分,主要负责处理用户请求和生成相应的相应部分,然后在页面或其它类型文档中显示.也可以理解为视图是MVC ...
- python从excel中读取数据传给其他函数使用
首先安装xlrd库 pip install xlrd 方法1: 表格内容如下: 场景描述,读取该表格A列数据,然后打印出数据 代码何解析如下: import xlrd #引入xlrd库 def exc ...
- ApplicationContextAware获取bean
ApplicationContextAware获取bean 概述 在某些特殊的情况下,Bean需要实现某个功能,但该功能必须借助于Spring容器才能实现,此时就必须让该Bean先获取Spring容器 ...
- 强大的 Python 任务自动化工具!invoke 十分钟入门指南
接着前面的<tox 教程>,以及刚翻译好的<nox文档>,我们继续聊聊 Python 任务自动化的话题. nox 的作者在去年的 Pycon US 上,做了一场题为<Br ...
- Spring注解开发系列VIII --- SpringMVC
SpringMVC是三层架构中的控制层部分,有过JavaWEB开发经验的同学一定很熟悉它的使用了.这边有我之前整理的SpringMVC相关的链接: 1.SpringMVC入门 2.SpringMVC进 ...
- windows 通过AppInit加载任意dll
windows操作系统允许将用户提供的dll加载到所有的进程的内存空间中.该功能可以用来做后门持久化.有点类似于linux的ld_preload环境变量.在进程启动的时候,操作系统会将用户提供的dll ...
- 最新2.7版本丨DataPipeline数据融合产品最新版本发布
此次发布的2.7版本在进一步优化产品底层数据处理逻辑的同时更加注重提升用户在数据融合任务的日常管理.运行监控及资源分配等管理方面的功能增强与优化,力求帮助大家更为直观.便捷.稳定地管理数据融合任务,提 ...
- HTTP&&Fiddler教程
很不错的学习资料! HTTP http://www.cnblogs.com/TankXiao/category/415412.html http://www.cnblogs.com/TankXiao/ ...
- selenium窗口截图操作
selenium窗口截图操作 使用背景:在自动化测试过程中,可能遇到执行错误情况,那么怎么样及时捕获出错信息/界面? 可以使用 get_screenshot_as_file(self,filenam ...
- Codeforces 1156E Special Segments of Permutation(启发式合并)
题意: 给一个n的排列,求满足a[l]+a[r]=max(l,r)的(l,r)对数,max(l,r)指的是l到r之间的最大a[p] n<=2e5 思路: 先用单调栈处理出每个点能扩展的l[i], ...