2022-10-26

1、Docker的namespace和cgroup作用

  • Namespace:

在Linux内核层实现,对运行在同一个docker主进程的各个容器进行资源限制,使其隔离运行互不影响。包括:

隔离类型功能系统调用参数内核版本
MNT Namespace磁盘挂载点和文件系统的隔离CLONE_NEWNSLinux2.4.19
IPC Namespace进程间通信的隔离CLONE_NEWIPCLinux2.6.19
UTS Namespace主机名的隔离CLONE_NEWUTSLinux2.4.19
PID Namespace进程的隔离CLONE_NEWPIDLinux2.4.24
NET Namespace网络的隔离CLONE_NEWNETLinux2.4.29
USER Namespace用户的隔离CLONE_NEWUSERLinux3.8
  • Cgroup

限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等。此外还能对进程进行优先级设置,以及将进程挂起和恢复等操作。

2、编排工具及依赖技术总结

  • 编排工具

对运行在多个主机的多个容器进行统一管理,实现动态伸缩、故障自愈、批量执行等功能就是容器编排引擎。比如某一台主机宕机了,那么运行在该主机上的容器就会自动迁移到其他适合的主机,从而实现高可用。容器编排通常包括容器管理、调度、集群定义和服务发现等功能。

工具简介
Docker Swarmdocker开发的容器编排引擎
Kubernetsgoogle开发的编排引擎,同时支持docker和CoreOS
Mesos+Marathon通用的集群组员调度平台,mesos(资源分配)和marathon(容器编排平台)一起提供容器编排引擎功能
  • 依赖技术

  1. 容器网络

    docker自带的网络仅支持管理单机上的容器网络,当多主机运行容器时需要使用第三方开源网络,如calico、flannel等。

  2. 服务发现

    容器的动态扩容特性决定了容器IP会随时变化,因此需要一种机制可以自动识别并将用户的请求动态转发到新创建的容器上,kubernetts自带的服务发现功能需要结合kube-dns服务解析内部域名。

  3. 容器监控

    可以使用原生命令docker ps/top/stats查看容器运行状态,另外也能使用heapster、Prometheus等第三方工具监控容器的运行状态。

  4. 数据管理

    容器的动态迁移涉及到在不同主机间的迁移,可以使用逻辑卷或者存储卷来保证与容器相关的数据也能随之迁移或者随时能够访问。

  5. 日志收集

    docker原生日志查看工具是docker logs,但是容器内部的日志需要通过ELK等专门日志收集分析和展示工具来处理。

3、基于dockerfile制作一个nginx镜像

  1. 下载镜像并初始化系统

    root@docker-server:~# docker pull centos:7.6.1810 #下载镜像
    root@docker-server:~# docker images
    REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
    centos       7.6.1810        f1cb7c7d58b7   3 years ago      202MB
    root@docker-server:~# cd /opt/
    root@docker-server:/opt# mkdir dockerfile/web/nginx -pv
    mkdir: created directory 'dockerfile'
    mkdir: created directory 'dockerfile/web'
    mkdir: created directory 'dockerfile/web/nginx'
    root@docker-server:/opt# cd dockerfile/web/nginx/
    root@docker-server:/opt/dockerfile/web/nginx# pwd
    /opt/dockerfile/web/nginx
    
  2. 编写dockerfile

    vim Dockerfile

    FROM centos:7.6.1810
    ENV NGINX_VERSION   1.22.1
    RUN yum install -y epel-release vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl
    RUN useradd nginx -s /sbin/nologin
    ADD nginx-1.22.1.tar.gz /usr/local/src/
    RUN cd /usr/local/src/nginx-1.22.1 && ./configure --prefix=/apps/nginx --with-http_sub_module && make && make install
    RUN ln -sv /apps/nginx/sbin/nginx /usr/sbin/nginx
    EXPOSE 80 443
    CMD ["nginx", "-g", "daemon off;"]
    
    
  3. 上传源码包到对应目录

    root@docker-server:/opt/dockerfile/web/nginx# pwd
    /opt/dockerfile/web/nginx
    root@docker-server:/opt/dockerfile/web/nginx# ll
    total 1064
    drwxr-xr-x 2 root root    4096 Oct 26 21:37 ./
    drwxr-xr-x 3 root root    4096 Oct 26 20:27 ../
    -rw-r--r-- 1 root root     455 Oct 26 21:29 Dockerfile
    -rw-r--r-- 1 root root 1073948 Oct 26 21:12 nginx-1.22.1.tar.gz
    
    
  4. 创建镜像

    root@docker-server:/opt/dockerfile/web/nginx# docker build -t nginx:1.22.1 
    
  5. 查看是否生成镜像

    root@docker-server:/opt/dockerfile/web/nginx# docker images
    REPOSITORY   TAG             IMAGE ID       CREATED          SIZE
    nginx        1.22.1          cf94b269979a   8 minutes ago    571MB
    centos       7.6.1810        f1cb7c7d58b7   3 years ago      202MB
    
    
  6. 从镜像启动容器

    root@docker-server:/opt/dockerfile/web/nginx# docker run -it -d -p 80:80 nginx:1.22.1 
    root@docker-server:/opt/dockerfile/web/nginx# docker ps
    CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                        NAMES
    5af995c9404d   nginx:1.22.1   "nginx -g 'daemon of…"   11 minutes ago   Up 11 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   nice_sutherland
    
    root@docker-server:/opt/dockerfile/web/nginx# ss -tnl
    State                   Recv-Q                   Send-Q                                      Local Address:Port                                     Peer Address:Port                   
    LISTEN                  0                        128                                               0.0.0.0:80                                            0.0.0.0:*                      
    LISTEN                  0                        128                                         127.0.0.53%lo:53                                            0.0.0.0:*                      
    LISTEN                  0                        128                                               0.0.0.0:22                                            0.0.0.0:*                      
    LISTEN                  0                        128                                             127.0.0.1:6011                                          0.0.0.0:*                      
    LISTEN                  0                        128                                                  [::]:80                                               [::]:*                
    
  7. 访问web页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9rD5x6y9-1666793809849)(C:\Users\姜雷\AppData\Roaming\Typora\typora-user-images\image-20221026214334592.png)]

4、镜像构建总结

  • 首先选择一个基础镜像,一般使用官方的镜像。
  • 将一些基础的命令,不常变动的部分打包成基础镜像。
  • 要注意Dockerfile里面用到的目录、文件等,宿主机是否准备妥当。比如上文用到的nginx源码包就需要提前上传到宿主机对应目录里。
  • 可以使用docker build命令边构建镜像边进行测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值