网络安全 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
相关推荐
程序猿进阶41 分钟前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
年薪丰厚1 小时前
如何在K8S集群中查看和操作Pod内的文件?
docker·云原生·容器·kubernetes·k8s·container
zhangj11251 小时前
K8S Ingress 服务配置步骤说明
云原生·容器·kubernetes
Hacker_Fuchen1 小时前
天融信网络架构安全实践
网络·安全·架构
岁月变迁呀1 小时前
kubeadm搭建k8s集群
云原生·容器·kubernetes
墨水\\1 小时前
二进制部署k8s
云原生·容器·kubernetes
Source、1 小时前
k8s-metrics-server
云原生·容器·kubernetes
颜淡慕潇1 小时前
【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题
后端·云原生·容器·kubernetes
ProtonBase1 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
大熊程序猿4 小时前
K8s证书过期
云原生·容器·kubernetes