网络安全 Day31-运维安全项目-容器架构下

容器架构下

  • 6. Dockerfile
    • 6.1 Docker自动化DIY镜像之Dockerfile
      • 1) 环境准备
      • 2) 书写Dockerfile内容
      • 3) 运行Dockerfile生成镜像
      • 4) 运行容器
      • 5) 小结
    • 6.2 案例14:Dockerfile-RUN指令
      • 1) 书写Dockerfile
      • 2) 构建镜像
      • 3) 启动容器
      • 4) 测试结果
    • 6.3 Dockerfile指令
  • 7. 容器数据持久化
    • 1)演示:
      • a)启动数据库容器
      • b)连接容器创建库
      • c)删除容器,重新创建容器检查数据是否还在?
    • 2)数据持久化
    • 3)小结:
  • 8. 容器镜像的私有仓库
    • 1) 拉取registry镜像与修改配置文件
    • 2)启动镜像仓库
    • 3) 上传镜像到私有的镜像仓库
    • 4) 删除本地镜像
    • 5) 重新拉取
    • 6)小结

6. Dockerfile

6.1 Docker自动化DIY镜像之Dockerfile

  • 通过上个案例(手动创建镜像)发现很麻烦所以用dockerfile自动化创建镜像
  • 这里我们就可以使用Dockerfile文件方法把定义镜像的流程,根据Dockerfile指令指定,最终生成我们想要的自定义镜像
  • 目标:
    • 1️⃣会使用Dockerfile
    • 2️⃣掌握如何书写Dockerfile
  • 任务要求:通过Dockerfile一键创建小鸟飞飞的镜像。

1) 环境准备

  1. 创建目录:mkdir -p /server/dockerfiles/01-bird
  2. 上传文件:上传bird.zip到linux(/root/即可)
  3. 解压:unzip bird.zip
  4. 复制文件到目录中:cp -a bird /server/dockerfiles/01-bird

2) 书写Dockerfile内容

  • 梳理自定义bird镜像的流程(对镜像的操作)
自定义镜像流程步骤Dockerfile指令
1️⃣选择基础镜像 nginx:1.24FROM nginx:1.24
2️⃣把bird代码传输到
/usr/share/nginx/html/目录下。
通过Dockerfile处理的
文件或目录放在Dockerfile所在目录。
ADD bird/ /usr/share/nginx/html/
ADD 宿主机目录或文件 镜像目录
3️⃣完成CMD指令
  • Dockerfile
    #1. Dockerfile所在目录结构drwxr-xr-x 3 root root  98 1116 2021 bird        #Dockerfile需要的bird目录
    -rw-r--r-- 1 root root 239 814 09:31 Dockerfile #Dockerfile文件#2. 编辑Dockerfile
    vim Dockerfile 
    #指定基础镜像
    FROM nginx:1.24 #镜像的说明信息
    LABEL author=lidao996 url=www.oldboyedu.com#传输内容
    ADD bird/   /usr/share/nginx/html/#指定容器入口指令
    #用于启动ngx服务
    CMD ["nginx","-g","daemon off;"]
    

3) 运行Dockerfile生成镜像

  • 进入Dockerfile所在目录:cd /server/dockerfiles/01-bird/
  • 生成镜像命令:docker build -t oldboydir:lidao996_bird_diy_v2 .
    • -t tag标签,用于指定新镜像的分类:名字_版本
    • . 指定Dockerfile就在当前目录

4) 运行容器

  1. 根据新的镜像启动容器:docker run -d -p 12306:80 --name bird_diy_v2 oldboydir:lidao996_bird_diy_v2
  2. 检查容器运行情况:docker ps |grep bird_diy_v2
  3. 浏览器检查:登录10.0.0.62:12306

5) 小结

  • Dockerfile作用与指令。
  • 一般根据手动的步骤,把步骤转行为Dockerfile.
  • 开头部分
    • FROM
    • LABEL
  • 中间过程
    • ADD/COPY
  • 结尾部分
    • CMD

6.2 案例14:Dockerfile-RUN指令

  • 创建一个nginx自定义镜像,镜像首页文件内容要是oldboyedu.com.
  • echo命令修改文件内容。echo oldboyedu.com >/usr/share/nginx/html/index.html
  • 创建自定义镜像的时候执行Linux命令。

1) 书写Dockerfile

mkdir -p /server/dockerfiles/02-ngx
cd /server/dockerfiles/02-ngxvim Dockerfile 
FROM nginx:1.24
LABEL author=lidao996  url=www.oldboyedu.com RUN echo oldboyedu.com >/usr/share/nginx/html/index.htmlCMD ["nginx","-g","daemon off;"]

2) 构建镜像

docker build -t oldboydiy:test_v2  .

3) 启动容器

docker run -d -p  10086:80 oldboydiy:test_v2

4) 测试结果

在这里插入图片描述

6.3 Dockerfile指令

Dockerfile指令含义应用建议
Dockerfile开头部分
FROM指定基本镜像类似于docker pull下载镜像FROM ubuntu:20.04尽量少写ubuntu或ubuntu:latest,尽量指定具体的版本.
LABEL用于指定容器的属性信息,作者,个人联系方式(邮件)…LABEL maintainer=“lidao996 youjiu_linux@qq.com”推荐使用LABEL,不推荐使用下面的MAINTAINER
ENV用于创建Dockerfile中使用的变量ENV Tengine_Version空格2.3.3软件版本可以创建使用变量.
Dockerfile中间处理部分
RUN制作镜像过程中需要的执行命令,通常系统配置,服务配置,部署。
但不能出现阻塞当前终端的命令。
RUN 系统命令即可.不建议使用连续多个RUN,合并连续多个RUN.
ADD可以把指定文件或目录拷贝到容器中(指定目录),会解压压缩包.
相对于当前目录.
ADD restart.tar.gz空格/app/code/restart/拷贝压缩包使用.
COPY可以把指定文件或目录拷贝到容器中(指定目录),不支持自动解压.
相对于当前目录.
COPY nginx.conf空格 /etc/nginx/nginx.conf拷贝文件或目录.
Dockerfile结尾部分书写的内容
CMD用于指定容器的入口命令.入口命令可以在docker run的时候替换.==运行镜像启动容器的时候,容器默认运行的命令是什么.CMD [“命令”,“参数01”,“参数02”]
CMD [“nginx”,“-g”,“daemon off;”]
大部分都会使用CMD.

7. 容器数据持久化

1)演示:

a)启动数据库容器

docker run  -d -p 13306:3306   --name mysql_8.0_v3   -e  MYSQL_ROOT_PASSWORD=1    mysql:8.0-debian 

b)连接容器创建库

  • 进入到数据库创建数据库

c)删除容器,重新创建容器检查数据是否还在?

  • 数据丢失

2)数据持久化

  • 把容器中的文件或目录连接到宿主机中。
  • 把宿主机的/server/data/mysql/目录连接到容器中/var/lib/mysql/
  1. 准备宿主机的数据目录:mkdir -p /server/data/mysql/
  2. 使用-v参数连接宿主机与容器(-v 宿主机的目录或文件:容器中的目录或文件,把宿主机中的目录或文件挂载(连接)到容器中。)
    docker run  -d -p 13306:3306   --name mysql_8.0_v3   -e  MYSQL_ROOT_PASSWORD=1  \
    -v  /server/data/mysql/:/var/lib/mysql/  mysql:8.0-debian 
    
  3. 检查结果:/server/data/mysql/下增加了很多文件
  4. 进入容器创建库:docker exec -it mysql_8.0_v3 mysql -uroot -p1 #这样可以直接进入数据库
  5. 创建库:create database lidao996;
  6. 退出然后删除容器:docer rm -f mysql_8.0_v3
  7. 重新创建容器并检查库是否还在
docker run  -d -p 13306:3306   --name mysql_8.0_v3   -e  MYSQL_ROOT_PASSWORD=1  \
-v  /server/data/mysql/:/var/lib/mysql/  mysql:8.0-debian docker exec -it  mysql_8.0_v3  mysql -uroot -p1  #这样可以直接进入数据库
show databases;  #数据库还在

3)小结:

  • 理解什么是容器的数据持久化即可。为何要做持久化。
  • docker run 加上-v选项
  • 应用数据库数据目录做做持久化。
  • 用于测试代码:nginx /usr/share/nginx/html/连接到宿主机的代码目录。
  • 用于测试配置:nginx.conf ,my.cnf 配置文件。

8. 容器镜像的私有仓库

  • registry仓库(简单,命令行),harbor仓库(复杂,web界面)。

1) 拉取registry镜像与修改配置文件

  1. 拉镜像:docker pull registry
  2. 修改所有docker配置文件
    cat >  /etc/docker/daemon.json<<'EOF'
    {"registry-mirrors": ["https://bjjtv7cs.mirror.aliyuncs.com"],"insecure-registries": ["10.0.0.62:5000"]
    }
    EOF
    systemctl restart docker
    

2)启动镜像仓库

mkdir -p /server/data/images/
docker run -d  --name "oldboy_registry"   -p 5000:5000 \
-v /server/data/images/:/var/lib/registry  \
--restart=always registry

3) 上传镜像到私有的镜像仓库

docker tag  oldboydir:lidao996_bird_diy_v2     10.0.0.62:5000/oldboyedu/ngx:bird_diy_v2
#docker login -u用户名 -p密码
docker push 10.0.0.62:5000/oldboyedu/ngx:bird_diy_v2 

4) 删除本地镜像

docker rmi 镜像名字
如果镜像使用中则需要删除镜像对应的容器,然后删除镜像。

5) 重新拉取

docker pull 10.0.0.62:5000/oldboyedu/ngx:bird_diy_v2

6)小结

  • 未来使用内部私有镜像仓库。

    • 会通过docker tag +docker push 上传。

    • 会通过docker pull 下载即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/36846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯面试题算法还原【游戏安全】

本题的参考链接&#xff1a;https://share.weiyun.com/5Xg2b7v 其实拿到这个题我就感觉在哪里看过&#xff0c;后来想想是在旺仔那里看到的&#xff0c;以下是旺仔写的分析过程可以参考一下https://bbs.kanxue.com/thread-276536.htm 但是这个题要比旺仔拿到的那个要增加些许…

Flowable 6.8.0中主要数据表及其字段

在Flowable 6.8.0中&#xff0c;以下是每个表的作用并列出每张表的所有字段及其含义&#xff1a; act_evt_log (用于记录流程引擎事件的日志) log_nr&#xff1a;日志编号type&#xff1a;事件类型proc_def_id&#xff1a;流程定义IDproc_inst_id&#xff1a;流程实例IDexecuti…

AI 绘画Stable Diffusion 研究(七) 一文读懂 Stable Diffusion 工作原理

大家好&#xff0c;我是风雨无阻。 本文适合人群&#xff1a; 想要了解AI绘图基本原理的朋友。 对Stable Diffusion AI绘图感兴趣的朋友。 本期内容&#xff1a; Stable Diffusion 能做什么 什么是扩散模型 扩散模型实现原理 Stable Diffusion 潜扩散模型 Stable Diffu…

【量化课程】02_4.数理统计的基本概念

2.4_数理统计的基本概念 数理统计思维导图 更多详细内容见notebook 1.基本概念 总体&#xff1a;研究对象的全体&#xff0c;它是一个随机变量&#xff0c;用 X X X表示。 个体&#xff1a;组成总体的每个基本元素。 简单随机样本&#xff1a;来自总体 X X X的 n n n个相互…

资料分析(二)—— 速算技巧 - 高照

常用方法 A * 1.5 A A的一半 120*1.5 120 60 A * 1.1 A 错位相加 123*1.1 12312.3 A * 0.9 A 错位相减 123*0.9 123-12.3 A/5 A * 2 &#xff0c;小数点左移一位 24/5 4.8 A/25 A * 4 &#xff0c;小数点左移两位 24/25 0.96 A/125 A * 8 &#xff0c;小数点左移…

mtl文件解释

.mtl文件是一种文本文件&#xff0c;通常用于与三维模型文件&#xff08;如.obj文件&#xff09;一起描述三维模型的材质&#xff08;Material&#xff09;属性和外观。这些属性包括颜色、纹理、光照等信息&#xff0c;以便在渲染或展示三维模型时能够正确地呈现出模型的外观效…

【leetcode】【图解】617. 合并二叉树

题目 难度&#xff1a;简单 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xf…

Python web实战之Django的AJAX支持详解

关键词&#xff1a;Web开发、Django、AJAX、前端交互、动态网页 今天和大家分享Django的AJAX支持。AJAX可实现在网页上动态加载内容、无刷新更新数据的需求。 1. AJAX简介 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种在网页上实现异步通信的技术。通过…

electron 使用node C++插件 node-gyp

node C插件使用&#xff0c;在我们常规使用中&#xff0c;需要使用node-gyp指定对饮的node版本即可 在electron的使用中&#xff0c;我们需要指定的是electron版本要不然会报错使用的v8内核版本不一致导致C扩展无法正常引入 electron官方文档-node原生模块 package.json {&quo…

标准的rust后端项目的结构是怎样的呢?

一个标准的Rust后端项目通常遵循一种常见的项目结构&#xff0c;以下是一个示例&#xff1a; . ├── Cargo.toml ├── src │ ├── main.rs │ ├── lib.rs │ ├── handlers │ │ ├── mod.rs │ │ └── user_handler.rs │ ├── models │…

一百五十四、Kettle——Linux上安装Kettle9.3(踩坑,亲测有效,附截图)

一、目的 由于kettle8.2在Linux上安装后&#xff0c;共享资源库创建遇到一系列问题&#xff0c;所以就换成kettle9.3 二、kettle版本以及安装包网盘链接 kettle9.3.0安装包网盘链接 链接&#xff1a;https://pan.baidu.com/s/1MS8QBhv9ukpqlVQKEMMHQA?pwddqm0 提取码&…

解决电脑声音正常但就是某些游戏没声音问题

电脑声音正常&#xff0c;玩普遍游戏也正常&#xff0c;就有游戏不出声音 详细介绍经过&#xff0c;不喜欢的请直接跳 第三部分。 一、先说下起因现象。 1 大富翁11 没声音。 前段时间无聊怀旧就买了个大富翁11玩玩&#xff0c;近二十年前的老台式机正常无问题。后来想在性能…

Java多线程编程:实现并发处理的高效利器

Java多线程编程&#xff1a;实现并发处理的高效利器 作者&#xff1a;Stevedash 发表于&#xff1a;2023年8月13日 20点45分 来源&#xff1a;Java 多线程编程 | 菜鸟教程 (runoob.com) ​ 在计算机领域&#xff0c;多线程编程是一项重要的技术&#xff0c;可以使程序同时执…

InnoDB文件物理结构解析6 - FIL_PAGE_INDEX

本文讨论Secondary Key Page的解析&#xff0c;也就是表非主键索引的记录存储。与Clustered Key Page有相同的基本记录结构&#xff0c;也细分为Leaf Page和Non-Leaf Page&#xff0c;我们先看结构&#xff1a; ### Contents (Secondary Key - Leaf Page) ### ---------------…

从小白到大神之路之学习运维第79天-------Kubernetes网络组件详解

第四阶段 时 间&#xff1a;2023年8月14日 参加人&#xff1a;全班人员 内 容&#xff1a; Kubernetes网络组件详解 目录 一、Kubernetes网络组件 &#xff08;一&#xff09;Flannel网络组件 &#xff08;二&#xff09;Calico 网络插件 &#xff08;1&#xff09;…

设计模式——建造者(Builder)模式

建造者模式&#xff08;Builder Pattern&#xff09;&#xff0c;又叫生成器模式&#xff0c;是一种对象构建模式 它可以将复杂对象的建造过程抽象出来&#xff0c;使这个抽象过程的不同实现方法可以构造出不同表现的对象。建造者模式是一步一步创建一个复杂的对象&#xff0c;…

(14)嵌套列表,Xpath路径表达式,XML增删查改,Implicit,Operator,Xml序列化,浅拷贝与深拷贝

一、作业问题 1、问&#xff1a;listbox1.items[i]返回的object是指的字符串吗&#xff1f; 答&#xff1a;items是真正的对象集合&#xff0c;在Add时加的是Person对象p&#xff0c;则里面的item就是Person对象p。 但是&#xff0c;在listbox1显…

在单元测试中使用Jest模拟VS Code extension API

对VS Code extension进行单元测试时通常会遇到一个问题&#xff0c;代码中所使用的VS Code编辑器的功能都依赖于vscode库&#xff0c;但是我们在单元测试中并没有添加对vscode库的依赖&#xff0c;所以导致运行单元测试时出错。由于vscode库是作为第三方依赖被引入到我们的VS C…

[oneAPI] BERT

[oneAPI] BERT BERT训练过程Masked Language Model&#xff08;MLM&#xff09;Next Sentence Prediction&#xff08;NSP&#xff09;微调 总结基于oneAPI代码 比赛&#xff1a;https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI&…

JVM 中的编译器

在Java的世界里,JVM(Java Virtual Machine)扮演了重要的角色。JVM是一个虚拟机,是Java程序的运行环境,它能够将Java字节码文件解释执行,使得Java程序可以跨平台。在JVM内部,有一个重要的组件就是编译器,它的作用就是将Java源代码编译成字节码,让JVM可以识别并执行。 …