Linux容器架构

1.

  • Iaas:基础设施即服务 Infrastructure-as-a-Service
  • Paas:平台即服务 Platform-as-a-Service
  • Saas:软件即服务 Software-as-a-Service
  • Caas:容器即服务 介于IAAS和PAAS
  • IAAS,PAAS,SAAS这些服务,用于帮助人们更快实现目标(搭建环境,使用产品)
  • 从左到右,人们需要管理与维护的地方越来越少,人们可以把重点关注在使用/应用上.
  • IAAS平台:基础设施,阿里云,云厂商.
  • PAAS平台:服务/运行环境是ok,公有云,负载均衡SLB
  • SAAS平台:服务已经准备好,您直接用,具体产品,processon,wps,亿图.

 2.容器

容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止.
容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理,相当于一个mini的系统

 3.Docker

 4.Docker架构

 5.端口映射

使用docker的时候 外界访问docker容器中的服务或端口,需要使用端口映射.本质类似于iptables防火墙的端口映射.
应用场景: 未来容器需要被外界访问(80端口).需要暴漏在外界一个端口.
用户通过端口访问容器中的某个端口.
实现方法:docker run通过-p选项实现.
本质是通过iptables nat规则实现的.nat表中创建了docker自定义的链

6.用户访问Docker服务流程

 7.数据卷使用和容器架构

 8.小结

容器 vs 虚拟机 ⭐
docker cs架构
镜像
容器
仓库
docker镜像管理
镜像常用系统
alpine,ubuntu,debian,centos.
docker容器管理
docker 容器:inspect,stats,top
docker 端口映射.
应用场景:需要外接访问容器中的资源与服务的.
-p 宿主机端口:容器端口
-P 随机映射 ՎՎҨ -p :80(80为容器中监听的端口)
-p 监听指定ip和端口 -p 宿主机ip:宿主机端口:容器端口
docker 数据卷挂载.
应用场景: 解决容器中数据持久化的问题.
挂载指定的文件或目录到容器中
格式:
-v 宿主机的目录/文件:容器的目录/文件 ⚠ 容器中的路径要使用绝对路径.
-v /app/docker/conf/nginx/conf.d/:/etc/nginx/conf.d/

9.自定义镜像全流程

 10.Dockerfile

应用场景: 通过1个文件Dockerfile,生成自定义 镜像
为何使用Dockerfile:
我们目前都是手动拉取镜像,手动进行配置,手动安装依赖,手动编译安装,创建用户....,这个过程类似于命令行使用ansible模块(繁
琐,不方便重复执行).
书写Dockerfile把之前手动创建自定义镜像的过程,通过Dockerfile里面的指令实现.类似于书写playbook.
Dockerfile用于根据要求自动创建 镜像 

 11.Docker镜像层次架构

 12.分离式容器架构

 13.Docker compose

docker镜像可以通过Dockerfile一键创建.
目前问题:⚠ docker容器的管理(启动,关闭,重启),需要手动执行,如何管理多个容器.
单机容器编排工具
docker compose
集群管理
ansible
docker swarm实现集群管理.
mesos
未来我们通过k8s kubernetes(船舵)实现集群管理.
了解:docker三剑客之一:docker machine(管理虚拟机),docker compose(容器编排),docker swarm(集群).
docker compose需要单独安装(epel源中就有),语法yaml格式. 

 14.docker-compse格式

 15.仓库选型

 16.

 17.阿里云概述

 18.ecs

 19.rds

 20.存储

  • 块存储:磁盘,云盘
  • 文件存储:nfs存储,samba存储,nas存储
  • 对象存储:自带数据高可用.ceph(开源软件),阿里云oss

 

 21.alb小结

 22.cdn

CDN 分布式缓存: 让用户就近访问,访问速度加快.

cdn一般用于缓存静态资源: html,css,js,图片,视频
使用流程:
  1. 已经备案的域名.
  2. 添加域名
  3. 配置缓存策略
  4. 测试
  5. 配置CNAME 正式域名解析到cdn上面

 23.7层的防火墙

  1. DOS   拒绝式服务攻击       1个人访问
  2. DDOS 分布式拒绝服务攻击   多人
  3. 攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS和伪装就叫:CC(Challenge Collapsar)。
  4. 防数据泄密,避免因黑客的注入入侵攻击,导致网站核心数据被拖库泄露。
  5. 防恶意CC,通过阻断海量的恶意请求,保障网站可用性。
  6. 阻止木马上传网页篡改,保障网站的公信力。  
  7. 提供虚拟补丁,针对网站被曝光的最新漏洞,最大可能地提供快速修复规则。

 24.docker 命令

docker images  ՎՎҨ docker image ls
docker search 搜索镜像, 优先选官方,stars数量多
docker pull   拉取镜像(下载镜像),注意版本
docker push   推送镜像(上传镜像)
docker load   导入镜像
   例子: docker load  -i docker_nginx.tar.gz
docker save   导出镜像
   例子:docker save centos:7 -o 
docker_centos7.tar.gz
docker images   查看镜像列表
docker rmi     删除镜像
docker tag     给镜像打标签
docker  ps     查看容器列表  -a 查看所有容器
docker run 创建并运行容器 例子:docker run  -d -it -p 80:80 nginx:latest
docker create 创建容器 Վʔname
docker start   启动容器
docker  stop   停止容器
docker  restart 重启容器
docker  kill   强制停止容器
docker  rm     删除容器 批量删除所有容器 docker rm -f `docker ps -a -q`
docker exec   进入正在运行的容器(分配一个新终端) 例子: docker exec  -it 容器id/容器名字   
/bin/bash(/bin/sh)
 docker attach 进入正在运行的容器(使用相同的终端),偷偷离开的快捷键ctrl +p,ctrl +q
容器使用三部曲指令小结
  • docker container ps ՎՎҨ docker ps 选项-a 查看所有状态的容器, -q只输出容器的id号可以用于批量删除容器. docker rm -f $(docker ps -q)
  • docker rm 删除容器,-f强制删除容器.
  • docker run docker核心指令,选项也是最多.
    • -d 容器后台运行.
    • -p 端口映射,外部或其他服务器想要访问容器内部的某个服务的端口. -p 外部用于访问的端口:容器内部服务的端口
    • Վʔname 指定容器的名字
如果退出容器,那么容器状态会怎么样?
  • -it 运行容器,容器是一个系统.
  • 容器退出后,容器关闭了.
关于docker run -it说明
  • -i 进入交互模式
  • -t 分配一个终端(运行命令解释器) /bin/bash 或 /bin/sh
  • -it 进入容器并有个命令行(终端).
  • 好处运行容器的同时可以进入到容器中,缺点:退出容器则容器结束.
如何后台持续运行纯净系统的容器.
  • #通过-itd + 指定命令解释器持续运行
  • docker run -itd   --name oldboy_centos_v6   centos
  • /bin/bash
docker exec小结
  • 用于与已经运行中的容器进行连接.
  • -it 交互模式分配终端
  • docker exec -it --name xxx 镜像名字:版本 参数(一般/bin/bash 或/bin/sh)
  • nginx -t ;nginx -s reload

docker run背后
  • docker pull #如果镜像不存在.
  • docker create 创建容器.
  • docker start 启动容器.
  • docker stop 关闭容器. #向容器中的主进程,pid 1 进程发出信号(kill),关闭.
  • docker restart重启重启. 

传输文件

docker container cp === docker cp  

docker cp:
  • 宿主机与容器间互传数据.
  • -a表示保存文件属性不变(uid,gid) 

结束容器

  • docker stop关闭容器
  • docker rm删除容器
  • docker kill
  • docker kill  -s 9 oldboy_nginx_alpine_v4    -s表示信号 -s 9 等于 kill -9 pid强制结束.
commit用于自定义镜像
  • 处理容器,生成镜像.
  • 使用流程:
    • 运行服务镜像或系统镜像,启动后成为容器.
    • 根据我们的需求,对容器进行修改.
    • 测试完成后.
    • 最后通过commit命令把容器保存为镜像.
    • 根据新生成的镜像创建容器并测试

1对1端口映射

 数据卷挂载

docker run
  • -v
  • 指定要挂载的目录/文件
  • -v 宿主机的路径:容器内部路径 
docker run  -d  --name "docker_volumnt_ngx_v1"   -p 80:80 \
-v /app/docker/code/index.html:/usr/share/nginx/html/index.html \
nginx:alpine

 25.手动创建tengine镜像

 1). 下载并启动ubuntu:20.04 容器 叫ubt_tengine_2.3.3
docker run   -it  Վʔname "ubt_tengine_2.3.3"   ubuntu:20.04 /bin/bash

2) 配置apt源

ll /etc/apt/sources.list
sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.ali yun.com#g'   /etc/apt/sources.list
apt update #生成apt缓存

3)下载软件包

1.安装常用软件
apt install  -y wget vim curl
2.下载软件包
wget -P /tmp/ http:Վˌtengine.taobao.org/download/tengine-2.3.3.tar.gz

4)编译安装3步曲

安装依赖
./configure    #进行编译安装的配置ՎՎʖ Makefile 用于编译.
make           #编译(根据Makefile配置进行编译) 
make install   #创建目录,复制文件ՎՎʢ
1. 安装依赖
apt install -y libssl-dev make gcc pcre2-utils   
libpcre3-dev zlib1g-dev
#openssl-devel 
2. 进行配置(指定用户,指定安装目录,添加或开启模块)
解压源码包,进入解压目录(略)
Վʔprefix=/app/tools/tengine-2.3.3/ tengine的安装目
录,安装到系统的那个目录中,自动创建.
./configure Վʔprefix=/app/tools/tengine-2.3.3/ \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module   \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_mp4_module \
--with-stream \
--with-stream_ssl_module   \
--with-stream_realip_module   \
--add-module=modules/ngx_http_upstream_check_module/ 
\
Վʔaddmodule=modules/ngx_http_upstream_session_sticky_modu
le
echo $? #上一个命令的执行结果 ,如果是0表示成功,非0就是失败
3. make编译
make  -j 1
4. make install编译安装
make install 
5. 检查
/app/tools/tengine-2.3.3/sbin/nginx -V

5) 收尾,启动,测试

1. 添加用户nginx 
2. 创建安装目录软连接
3. nginx命令软连接到/sbin/下面.
4. 启动与本地测试.

1. 添加用户nginx 
 groupadd nginx
 useradd   -g nginx nginx
2. 创建安装目录软连接
ln -s /app/tools/tengine-2.3.3/   /app/tools/tengine
3. nginx命令软连接到/sbin/下面.
ln -s /app/tools/tengine/sbin/nginx /sbin
nginx -V
4. 启动与本地测试.
nginx   #启动后会在后台运行.
echo docker-teninge.oldboylinux.cn 
>/app/tools/tengine/html/index.html
curl localhost 
显示:
docker-teninge.oldboylinux.cn

 

6)清理镜像

1. 清理代码包,解压目录
rm -fr /tmpՎˇ
2. 清理apt/yum缓存
rm -fr /var/cacheՎˇ
3. 其他的清理,逐步测试

7)生成镜像

docker commit ubt_tengine_2.3.3 tengine:2.3.3-v1_not_you

8)运行容器 

启动容器容器中,要有个服务在前台阻塞住.
这个容器中没有配置的.
需要手动指定.
1. 启动服务注意这里要加上 nginx -g 'daemon off;'
docker run  -d Վʔname "tengine-2.3.3-not_opt_v1"   -p 
80:80 tengine:2.3.3-v1_not_you   nginx -g 'daemon 
off;'
2. 检查
curl 10.0.0.81:80
docker-teninge.oldboylinux.cn

9)关于日志(了解)

ln -s /dev/stdout   
/app/tools/tengine/logs/access.log  
访问日志 stdout标准输出
ln -s /dev/sdterr   /app/tools/tengine/logs/error.log 
   
错误日志 stderr错误输出
只要有访问日志生成就会输出到屏幕,就可以通过docker logs 查看
logs -f 查看

rm -f /app/tools/tengine/logsՎˇ
ln -s /dev/stdout  
/app/tools/tengine/logs/access.log
ln -s /dev/stderr /app/tools/tengine/logs/error.log

Dockerfile使用

1 1. 准备目录及Dockerfile 
2 [root@docker01.oldboylinux.cn /server/dockfile/01-
centos-nginx]# cat Dockerfile
3 FROM centos:7
LABEL author="oldboylidao996"
RUN curl  -o /etc/yum.repos.d/CentOS-Base.repo 
http:Վˌmirrors.aliyun.com/repo/Centos-7.repo
RUN curl  -o /etc/yum.repos.d/epel.repo 
http:Վˌmirrors.aliyun.com/repo/epel-7.repo
RUN yum -y install nginx
RUN rm -rf /usr/share/nginx/html/index.html
RUN echo 'oldboyedu linux' > 
/usr/share/nginx/html/index.html
CMD ["nginx","-g","daemon off;"]
2. 根据Dockerfile构建镜像
docker build . -t 'nginx:1.20.2-centos7'
注意: .表示 Dockerfile在当前目录下面 -t 就是给自定义镜像命
名.
3. 运行
docker run  -d Վʔname 'nginx-1.20.1-centos7-01'  -p 
81:80 nginx:1.20.2-centos7
4. 调试

Dockerfile中的指令

 Dockerfile构建镜像脚本

1 1. 目录准备
2 tengine.2.3.3.tar.gz 源码包
3 bird.tar.gz 代码包
2. 书写Dockerfile
#1. 基本信息
FROM ubuntu:20.04
LABEL author="lidao996" \
      url="www.oldboyedu.com"
#2. 传输软件包
ADD tengine-2.3.3.tar.gz   /tmp/
#3. 环境准备
RUN  sed -ri 
's#archive.ubuntu.com|security.ubuntu.com#mirrors.al
iyun.com#g'   /etc/apt/sources.list \
     && apt update \
     && apt install -y libssl-dev make gcc pcre2-
utils   libpcre3-dev zlib1g-dev \
     && cd /tmp/tengine-2.3.3/ \
     && ./configure Վʔprefix=/app/tools/tengine-
2.3.3/ \
         --user=nginx \
         --group=nginx \
         --with-http_ssl_module \
         --with-http_v2_module   \
         --with-http_realip_module \
         --with-http_stub_status_module \
         --with-http_mp4_module \
         --with-stream \
         --with-stream_ssl_module   \
         --with-stream_realip_module   \
         --addmodule=modules/ngx_http_upstream_check_module/ \
         --addmodule=modules/ngx_http_upstream_session_sticky_modu
le \
     && make -j  1 \
     && make install \
     && ln -s /app/tools/tengine-2.3.3/sbin/nginx 
/sbin/ \
     && ln -s /app/tools/tengine-2.3.3/ 
/app/tools/tengine \
     && useradd -s /sbin/nologin nginx
#4. 传输代码
ADD bird.tar.gz /app/tools/tengine/html/
#5. 清理
RUN rm -fr /tmpՎˇ /var/cacheՎˇ 
#6. 设置暴露80端口和入口指令
EXPOSE 80
CMD [ "nginx","-g","daemon off;" ]
3. 构建镜像
docker build   -t "tengine:2.3.3-v1-dockerfile" .
Successfully built 770d8ee9b3d8
Successfully tagged tengine:2.3.3-v1-dockerfile
4. 启动
docker run  -d  --name "tengine-2.3.3-dockerfile-v1"
  -p 80:80   tengine:2.3.3-v1-dockerfile
使用多节点提交实现:
  • 编译安装一些软件的时候,一般是先安装各种依赖,然后开始编译安装,编译安装一般会生成新的命令.
  • 1个镜像负责编译安装,生成命令.(临时)
  • 1个镜像上一个镜像的命令复制过来+服务必要的配置.
  • 最终使用最后的这个镜像.

  Doceker compose命令

  • depends_on: 依赖,先启动指定的容器然后再启动当前容器.
  • volumes: 数据卷
  • links: 容器连接,本质hosts解析.

手动创建镜像.
Dockerfile格式
  • 第1部分-用于指定使用的镜像,设置镜像的属性,设置变量
  • 第2部分-对镜像处理
  • 第3部分-指定端口,指定入口命令/脚本.
Dockerfile指令
  • 第1部分-用于指定使用的镜像,设置镜像的属性,设置变量
    • FROM ubuntu:20.04
    • LABEL author="lidao996" ՎՎʢ
    • ENV Server tengine
    • ENV Server_Version 2.3.3
  • 第2部分-对镜像处理
    • RUN
    • ADD
    • COPY
    • WORKDIR 修改容器工作目录
    • VOLUME 给容器内部的目录,设置随机数据卷.持久化. 未来通过docker run -v
    • USER 运行程序时使用的用户。
  • 第3部分-指定端口,指定入口命令/脚本.
    • EXPOSE 1.方便查看镜像信息得知容器端口 2. -P随机映射端口 -p :EXPOSE的端口 ՎՎʢ
    • CMD
    • ENTRYPOINT
docker底层分离的原理: namespace,cgroups,文件系统 
posted @ 2024-06-05 20:42  嘉禾世兴  阅读(6)  评论(0编辑  收藏  举报