网络安全 Day30-容器架构上

容器架构上

1. 容器架构

1.1 什么是容器

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

1.2 容器 vs 虚拟机(化) ⭐️⭐️

虚拟机(虚拟化) 容器
优点 1. 使用简单 2. 也有成熟管理工具,vmware esxi,KVM,Openstack 3. 可以随意定制. 4. 启动虚拟机要经历完整的Linux启动流程 1. 快速部署(扩容,弹性伸缩) 2. 大部分环境都有现成镜像 3. 让我们不再关注系统基础设施,把关注点放在配置,升级,优化 4. 不依赖硬件 5. 启动容器秒级. 6. 相当于一个进程
缺点 1. 需要硬件支持虚拟化技术(VT-X) 2. 资源利用率不高 3. 同一台虚拟跑多个服务,可能有冲突 4. 占用资源较多. 5. 不满足目前升级,快速扩容,快速部署,回滚不方便. 1. 使用较为复杂 2. 共享linux系统内核,推荐使用较新linux内核.

1.3 Docker极速上手指南

Linux内核: 3.10以上. 如果旧的内核需要升级内核才能使用.

  • 安装docker环境,docker-ce(开源) docker-ee(企业版)
docker环境 ip 配置
oldboy-docker 10.0.0.62/172.16.1.62 2c4G(至少1c2G)

1)使用rpm包安装docker

  1. 解压oldboyedu_docker_24_rpms.tar.gz(老师资料包中):tar xf oldboyedu_docker_24_rpms.tar.gz

  2. 进入目录并安装rpm包

    sh 复制代码
    cd docker_24_rpms/
    yum localinstall -y *.rpm 
  3. 检查是否安装成功

    sh 复制代码
    rpm -qa |grep docker 
    docker-compose-plugin-2.19.1-1.el7.x86_64
    docker-ce-cli-24.0.4-1.el7.x86_64
    docker-buildx-plugin-0.11.1-1.el7.x86_64
    docker-ce-rootless-extras-24.0.4-1.el7.x86_64
    docker-ce-24.0.4-1.el7.x86_64
  • 【后面工作中可以用】配置docker源(用于安装docker)
sh 复制代码
#1.安装相关依赖.
sudo  yum install -y yum-utils

#2.下载官方的docker yum源文件
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#3.替换yum源地址
sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

#4.安装docker-ce
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

#5.启动
systemctl enable --now  docker  

#6.检查
docker version 检查 

2) docker下载镜像加速的配置

我们使用docker的时候需要下载很多docker的镜像.为了加速下载,需要配置docker加速.

  • docker下载镜像加速

    阿里云,腾讯云有加速用的地址.

  • 阿里云为例,说明如何获取加速用的地址



  1. 创建目录:sudo mkdir -p /etc/docker

  2. 修改配置docker下载镜像的加速地址(/etc/docker/daemon.json docker服务端的配置文件.)

    sh 复制代码
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://bjjtv7cs.mirror.aliyuncs.com"]
    }
    EOF
  3. 开机自启动与重启

    sh 复制代码
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    sudo systemctl enable  docker

3) 载入镜像大礼包(老师资料包中有)

sh 复制代码
#解压大礼包的oldboyedu_useful_docker_images_v2.tar.gz
tar xf oldboyedu_useful_docker_images_v2.tar.gz

#批量导入
cd oldboyedu_useful_docker_images/
for n in `ls` ;
do 
  docker load  -i $n
done 

1.4 Docker使用案例

1) 案例01:⭐️⭐️⭐️⭐️⭐️启动nginx:1.24镜像并通过宿主机8848端口访问

  • 使用本地已有的镜像(nginx:1.24),如果没有则从远程下载。
  • 运行镜像(进程,容器)
  • 设置访问的端口8848(宿主机)访问容器中的80端口。
  • 浏览器访问10.0.0.62:8848 访问容器的80端口。
sh 复制代码
docker run -d  -p 8848:80  --name nginx_v1   nginx:1.24 
6f34a5df3a4049423c18ca606bbd3ae05caca4b111804d7aee598c842bd3056d

ss -lntup|grep 8848 
tcp    LISTEN     0      128       *:8848                  *:*                   users:(("docker-proxy",pid=3680,fd=4))
tcp    LISTEN     0      128    [::]:8848               [::]:*                   users:(("docker-proxy",pid=3686,fd=4))
  • 命令与参数

    命令 作用
    docker run 运行容器
    -d 后台运行
    -- name 指定名字,容器名字不能冲突。如果不指定就会随机分配名字
    - p 端口映射 宿主机端口,指定用容器和宿主机的端口进行关联

2) 案例02: ⭐️docker run背后原理

3) 案例03:⭐️⭐️⭐️⭐️⭐️查看容器

sh 复制代码
docker ps    #只显示运行中的容器。

docker ps -a #查看所有状态的容器关闭,退出,。。。。
  • 启动mysql:8.0-debian
sh 复制代码
#1 启动mysql 8.0容器 
docker run -d --name mysql_8.0  -p 13306:3306  mysql:8.0-debian 
7d2dc00806dd9ea73638c8ff49a333c408a50c0eab2435b424f5763a102f73ae

#2 查看运行中容器,发现没有mysql-8.0容器 
 docker ps |grep mysql 
 
#3. 查看所有状态的容器 发现mysql-8.0是exit退出状态。
docker ps -a 

4)案例04:⭐️⭐️⭐️⭐️⭐️删除容器

sh 复制代码
docker rm    容器名字或id  #删除已经关闭,退出,非运行容器。
docker rm -f  #强制删除,删除运行中的容器。

docker rm -f mysql_8.0

5) 案例05:启动数据库容器

  • 数据库容器需要额外的参数(变量)。
  • 需要通过-e参数设置MYSQL_ROOT_PASSWORD
sh 复制代码
#1. 启动数据库容器
docker run  -d -p 13306:3306   --name mysql_8.0_v2   -e  MYSQL_ROOT_PASSWORD=1    mysql:8.0-debian 

#2. 检查容器状态 
docker ps |grep mysql 

#3. 如果没有则通过ps -a 查看
docker ps -a |grep mysql 

6) 案例06: ⭐️⭐️⭐️⭐️⭐️进入运行中的容器

  • 温馨提示:进入到运行中的容器。
sh 复制代码
#连接进入mysql容器 
docker exec  -it  mysql_8.0_v2 /bin/bash

#连接进入nginx容器
docker exec  -it  nginx_v1 /bin/bash
可以修改首页文件然后访问测试。

连接后可以执行:du -sh /cat /etc/os-release查看一些容器信息。

  • 小结:
    • 核心掌握如何进入运行中的容器。
    • exec
    • -it 交互模式分配终端(命令行)
    • /bin/bash进不去可以改为/bin/sh

7) 案例07: 容器的自启动

sh 复制代码
重启docker服务后容器都是退出状态(关闭)
通过docker start 一个一个启动容器。
docker start nginx_v3 

docker run 的时候加上--restart=always,设置容器什么时候自动运行。
docker run -d -p 8850:80 --restart=always   --name nginx_v4   nginx:1.24
通过systemctl restart docker 测试

8)案例08:查看镜像

sh 复制代码
docker images  === docker image ls

9) 案例09:拉取镜像

  • 从镜像仓库中下载镜像。
sh 复制代码
docker pull nginx:alpine

docker images |grep nginx 
nginx        1.24          b6c621311b44   5 weeks ago     142MB
nginx        1.24-alpine   55ba84d7d539   8 weeks ago     41.1MB
nginx        alpine        cc44224bfe20   19 months ago   23.5MB
nginx        latest        605c77e624dd   19 months ago   141MB

10)案例10:删除镜像

sh 复制代码
docker rmi openjdk:10

注意要把名字和后边的数字连起来

11)案例11:启动系统镜像

sh 复制代码
#1.
docker run  -itd  --name centos_7_v1   centos:7 
#2.
docker ps |grep centos 

加上-it即可。

12) 小结

docker镜像操作 指令
查看 docker images
下载 docker pull
删除 docker rmi(如果镜像有对应的容器,则无法删除。
Docker容器操作 指令 参数
启动容器 docker run -d -p --name --restart -e -itd
查看容器 docker ps -a
删除容器 docker rm -f
进入容器 docker exec -it xxx /bin/bash或/bin/sh

1.5 Docker初步自定义镜像:案例12

目标:我们找到的镜像无法直接瞒足我们的需求。

解决:自定义镜像。

  • 任务目标:nginx镜像包含bird代码,小鸟飞飞代码,选择nginx:1.24。bird.zip

1)启动ngx容器

sh 复制代码
#1.启动
docker run -d  -p 8080:80  --name bird_v1    nginx:1.24

#2.检查
docker ps |grep bird 

2) 连接到容器中

  • 窗口1:链接到容器中

    sh 复制代码
    docker exec  -it  bird_v1 /bin/bash
  • 窗口2

    1. 发送bird目录下面的代码到容器中的站的目录 /usr/share/nginx/html/

      sh 复制代码
      unzip bird.zip 
      cd bird/
  1. 上传,把宿主机中的文件上传到容器中:docker cp . bird_v1:/usr/share/nginx/html/
    #上传:docker cp 宿主机目录或文件 容器名:容器路径 ※※※※※
    #下载:docker cp 容器名:容器路径 宿主机目录或文件

3)进行测试

4)保存镜像

  • 把已经的容器保存成镜像。
  1. 把容器保存成镜像
    1. 语法:docker commit 容器名字 分类:名字版本
    2. 保存:docker commit bird_v1 oldboydiy:lidao_bird_v1
  2. 检查是否有镜像:docker images |grep lidao

5)根据新的镜像创建容器并测试

sh 复制代码
docker run -d -p 8081:80    --name diy_bird_v1   oldboydiy:lidao_bird_v1
相关推荐
子兮曰16 小时前
后端字段又改了?我撸了一个 BFF 数据适配器,从此再也不怕接口“屎山”!
前端·javascript·架构
Sheffield19 小时前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
卓卓不是桌桌19 小时前
如何优雅地处理 iframe 跨域通信?这是我的开源方案
javascript·架构
Qlly19 小时前
DDD 架构为什么适合 MCP Server 开发?
人工智能·后端·架构
用户881586910912 天前
AI Agent 协作系统架构设计与实践
架构
鹏北海2 天前
Qiankun 微前端实战踩坑历程
前端·架构
货拉拉技术2 天前
货拉拉海豚平台-大模型推理加速工程化实践
人工智能·后端·架构
RoyLin2 天前
libkrun 深度解析:架构设计、模块实现与 Windows WHPX 后端
架构
CoovallyAIHub3 天前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
RoyLin3 天前
领域驱动设计:回归本质的工程实践
架构