Docker总结

10 篇文章 1 订阅

一、Docker的使用场景

1、简化配置 2、代码流水线管理 3、提升开发效率 4、隔离应用 5、整合服务器
6、调试能力 7、多租户环境 8、快速部署

二、Docker 是什么

Namespace (资源隔离)、CGroup(资源限制)、Linux Container(虚拟化)
1、namespaces 名称空间
在这里插入图片描述

Namespace 只能实现运行空间的隔离,物理资源还是所有进程共用的,为了实现资源的限制,Linux系统提供了CGroup技术来控制一个进程组群可使用的资源(如CPU、内存、磁盘IO等),把这两种技术结合起来,就能构造一个用户空间独立且限定了资源的对象,这样的对象称为容器。
2、control Group 控制组
1、cgroup 的特点是  
cgroup 的 api 以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现 cgroup 的组件管理
2、cgroup 四大功能       
资源限制:可以对任务使用的资源总额进行限制
优先级分配:通过分配的 cpu 时间片数量以及磁盘 IO 带宽大小,实际上相当于控制了任务运行优先级
资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
任务控制:cgroup 可以对任务执行挂起、恢复等操作

3、Linux Container
Linux Container 是Linux系统提供的容器化技术,简称LXC,它结合 Namespace 和 CGroup 技术为用户提供了更易用的接口来实现容器化。
LXC仅为一种轻量级的容器化技术,它仅能对部分资源进行限制,无法做到诸如网络限制、磁盘空间占用限制等。

1、什么是 Chroot
Chroot 就是 Change Root Directory (更改 root 目录),能在 container 里构造完整的 Linux 文件系统;也就是改变程序执行时所参考的根目录位置。
Chroot 可以增进系统的安全性,限制使用者能做的事
在 linux 系统中,系统默认的目录结构都是以 /,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为/ 位置。
2、使用 chroot 之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)的目录结构和文件,因此它带来的好处大致有以下3个:
1、安全性
增加了系统的安全性,限制了用户的权力
2、隔离性
建立一个与原系统隔离的系统目录结构,方便用户的开发
3、切换系统根位置
chroot 的作用是切换系统的根目录位置,引导 Linux 系统启动以及急救系统等。
到一个临时的系统。
3、Veth :该技术能够在主机上虚拟出一张网卡与container里的eth0网卡进行桥接,实现容器与主机、容器之间的网络通信;
4、UnionFS : 联合文件系统
5、Iptables/netfilter :通过这两个技术实现控制 container 网络访问策略;
6、TC : 该技术主要用来做流量隔离,限制带宽;(Tc 命令用于Linux内核的流量控制)
7、Quota : 该技术用来限制磁盘读写空间的大小;
8、Setrlimit :该技术用来限制 container 中打开的进程数,限制打开的文件个数等

三、Docker 与传统虚拟化技术的区别

1、Docker 和 KVM 的几项对比
在这里插入图片描述

四、Docker 基本概念

引擎:创建和管理容器的工具,通过读取镜像来生成容器,并负责从仓库拉取镜像或提交镜像到仓库中;
镜像:类似于虚拟机镜像,一般由一个基本操作系统环境和多个应用程序打包而成,是创建容器的模板;
容器:可看作一个简易版的Linxu系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子;
仓库:集中存放镜像文件的场所,分为公共仓库和私有仓库,目前最大的公共仓库是官方提供的Docker Hub,此外国内的阿里云、腾讯云等也提供了公共仓库;
宿主机:运行引擎的操作系统所在服务器。

五、Docker 基础操作系统

BusyBox:一个极简版的Linux系统,集成了100多种常用Linux命令,大小不到2MB,被称为“Linux系统的瑞士军刀”,适用于简单测试场景;
Alpine:一个面向安全的轻型Linux发行版系统,比BusyBox功能更完善,大小不到5MB,是官网推荐的基础镜像,由于其包含了足够的基础功能和体积较小,在生产环境中最常用;
Debian/ubuntu: Debian 系列操作系统,功能完善,大小约170MB,适合研发环境;
CentOS/Fedora:都是基于Redhat的Linux发行版,企业级服务器常用操作系统,稳定性高,大小约200MB,适合生产环境使用。

六、Docker 的使用场景

1、作为轻量级虚拟机使用
可以使用centos等系统镜像创建容器,当作虚拟机来使用,相比于传统虚拟机,启动速度更快,资源占用更少,单机可以启动大量的操作系统容器,方便进行各种测试;
2、作为云主机使用
结合Kubernetes这样的容器管理系统,可以在大量服务器上动态分配和管理容器,在公司内部,甚至可以取代VMWare这样的虚拟机管理平台,使用Docker容器作为云主机使用;

3、应用服务打包
在Web应用服务开发场景,可以把Java运行环境、Tomcat服务器打包为一个基础镜像,在修改了代码包后加入到基础镜像来构建一个新的镜像,能很方便的升级服务和控制版本;
4、容器云平台CaaS
Docker的出现,使得很多云平台供应商开始提供容器云的服务,简称容器即服务CaaS,以下对比一下IaaS、PaaS和SaaS:
IaaS(基础设施即服务):提供虚拟机或者其他基础资源作为服务提供给用户。用户可以从供应商那里获得虚拟机或者存储等资源来装载相关的应用,同时这些基础设施的繁琐的管理工作将由IaaS供应商来处理。其主要的用户是企业的系统管理员和运维人员;
PaaS(平台即服务):把开发平台作为服务提供给用户。用户可以在一个包括SDK,文档和测试环境等在内的开发平台上非常方便地编写应用,而且不论是在部署,或者在运行的时候,用户都无需为服务器、操作系统、网络和存储等资源的管理操心,这些繁琐的工作都由PaaS供应商负责处理。其主要的用户是企业开发人员。
SaaS(软件即服务):将应用作为服务提供给客户。用户只要接上网络,并通过浏览器,就能直接使用在云端上运行的应用,而不需要顾虑类似安装等琐事,并且免去初期高昂的软硬件投入。SaaS主要面对的是普通的用户。
CaaS(容器即服务):完成IaaS和PaaS两个层级的功能。相对于传统的IaaS和PaaS服务,CaaS对底层的支持比PaaS更灵活,而对上层应用的操控又比IaaS更容易。同时因为Docker是比VM更细粒度的虚拟化服务,所以能够对计算资源做到更高效的利用。CaaS可以部署在任何物理机,虚拟机或IaaS云之上。

七、Docker 总结 (会用到的基础命令)(安装阿里云 Docker CE)

yum -y install docker-ce-[VERSION]    (安装docker的指定版本)
docker version     (查看docker相关的信息)
vim /etc/sysctl.conf     (开启内核转发  文件位置)
docker run     (创建一个容器 )
-d  (放入后台运行)
-D    (放入前台运行)
-p   (端口映射)
docker search centos   (搜索 centos 的官方仓库镜像)
docker pull            (根据镜像名拉取镜像)
docker image list             (查看当前主机镜像列表)
docker image save centos > ***.tar.gz          (导出镜像)
docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o images.tar       (将机器上所有镜像打包到 images.tar 文件里面)
docker image rmi 镜像名                (删除镜像 添加 -f 强制删除)
docker image load -i 镜像包名称          (导入镜像)
docker image inspect 镜像名            (查看镜像的详细信息)
docker run -itd --name 容器名 镜像名 /bin/bash    (创建容器)
docker container ls   或者  docker ps       (查看正在运行的容器)
docker ps -a       (查看所有容器包括未运行的容器)
docker container inspect 容器名称/id           (查看容器详细的信息/ ip )
docker stop 容器名/id  或者  docker container kill 容器名称/id   (停止容器)
 
docker run -it 参数         ( -it 可交互终端 )
docker run -it 容器名/参数  /bin/bash       (创建容器时进入容器)
docker run -it  -d  -p 9090:80 --name web4 nginx /bin/bash
-i     –interactive=true | false,默认是false 交互模式
-t     –tty=true | false,默认是false 终端
–name    给启动的容器自定义名称,方便后续的容器选择操作
docker attach 容器名/id               (attach   进入容器)
docker exec -it 容器名/id  /bin/bash       (exec 进入容器    推荐使用 )
Ctrl + p   /  ctrl + q  /exit           (离开 退出 容器)
docker rm -f ‘docker ps -a -q’      (删除所有容器)
5、手动将正在运行的 Docker 生成新镜像
1、基于 docker 官方 centos 7 镜像 yum 创建
1、docker  pull  centos:7               (拉起 centos7 镜像)
2、docker run -it -p 2222:22 --name 容器名 centos:7  /bin/bash                (创建容器时进入容器)
3、容器内部 yum 安装需要的服务
4、docker commit 容器名 自定义镜像名            (将容器提交为镜像)
2、基于 centos 编译 制作 httpd 镜像
1、2、同上
3、wget http://apache.fayea.com/httpd/httpd-2.4.41.tar.gz   (官网下载http包)

4、tar  xf  http包  -C  /usr/local         (将下载的http包解压到/usr/local下)
cd /usr/local/http包                        (进入解压目录下)
Yum  安装apache 源码包依赖包
./configure --prefix=/usr/local/apache --enable-mods-shared=most --enable-so                   (在目录下进行编译解决依赖)
Make && make install            (安装)
5、docker  commit                  (提交镜像)
6、本地挂载
1、本机创建挂载目录 ( 如:mkdir  /www )
2、echo “写入内容” >  /www/index.html             ( 写入内容 )
3、docker run -d -p 2224:22 -p 7070:80 -v  /www : /usr/local/apache/htdocs:ro centos7-sshd-httpd-s  /usr/local/sbin/run.sh   (本机/www 挂载到容器内部) 
4、docker volume ls           ( 查看卷列表 )           
7、Dockerfile 自动构建 Docker 镜像
1、docker buil -f /path/Dockerfile -t test                
( 用于从Dockerfile 构建映像)( -f 标志指向文件系统中的Dockerfile)
2、Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
3、Dockerfile 文件说明
①、FROM :指定基础镜像,必须为第一条命令 
格式:FROM <image>                  例子:FROM mysql:5.6   
②、MAINTAINER : 维护者信息
格式: MAINTAINER <name>

③、RUN : 构建镜像时执行的命令
格式 : RUN <command>
        RUN yum -y install nginx  ["yum","-y","install","nginx"]
④、ADD : 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压)可以访问网络资源,和wget 类似
格式 : ADD <src>... <dest>
        ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
示例 : ADD hom* /mydir/          # 添加所有以"hom"开头的文件
        ADD hom?.txt /mydir/      # ? 替代一个单字符,例如:"home.txt"
        ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
        ADD /test /absoluteDir/    # 添加 "test" 到 /absoluteDir/
⑤、COPY : 功能和ADD类似,但是不会自动解压文件,不能访问网络资源
⑥、CMD : 构建容器后调用,也就是在容器启动时才能进行调用
⑦、ENTRYPOINT : 配置容器,使其可执行化。配合CMD可省去“command”,只使用参数
⑧、LABEL : 用于为镜像添加元数据
⑨、ENV : 设置环境变量
格式 : ENV <key> <value>  #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
        ENV <key>=<value> ...  #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
⑩、EXPOSE : 指定与外界交互的端口
格式 : EXPOSE <port> [<port>...]       示例 :  EXPOSE 80 443
11、VOLUME : 用于指定持久化目录
格式 : VOLUME ["/path/to/dir"]
12、WORKDIR : 工作目录,类似于c命令
格式 : WORKDIR /path/to/workdir
13、USER : 指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。
14、ARG : 用于指定传递给构建运行时的变量
格式 : ARG <name>[=<default value>]
15、ONBUILD : 用于设置镜像触发器
格式 : ONBUILD [INSTRUCTION]

8、docker的网络类型

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值