網絡安全 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.pswp.cn/news/36846.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36846.shtml
英文地址,請注明出處:http://en.pswp.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可以識別并執行。 …