<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker中級篇

          共 4879字,需瀏覽 10分鐘

           ·

          2020-10-06 01:14



          點擊「閱讀原文」查看良許原創(chuàng)精品視頻。

          來自:阿里云開發(fā)者社區(qū)

          作者:Fortuneteller

          鏈接:https://developer.aliyun.com/article/769273

          Docker鏡像理解

          Docker鏡像是什么

          鏡像是一種輕量級、可執(zhí)行的獨立軟件包,用來打包軟件運行環(huán)境和基于運行環(huán)境開發(fā)的軟件,它包含運行某個軟件所需的所有內(nèi)容,包括代碼、運行時庫、環(huán)境變量和配置文件

          Docker鏡像加載原理

          UnionFs:聯(lián)合文件系統(tǒng)

          UnionFs(聯(lián)合文件系統(tǒng)):Union文件系統(tǒng)(UnionFs)是一種分層、輕量級并且高性能的文件系統(tǒng),它支持對文件系統(tǒng)的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統(tǒng)下,UnionFs聯(lián)合文件系統(tǒng)是Docker鏡像的基礎(chǔ),鏡像可以通過分層來進行繼承,基于基礎(chǔ)鏡像(沒有父鏡像),可以制作各種具體的應(yīng)用鏡像特性:一次同時加載多個文件系統(tǒng),但從外面看起來,只能看到一個文件系統(tǒng),聯(lián)合加載會把各層文件系統(tǒng)疊加起來,這樣最終的文件系統(tǒng)會包含所有底層的文件和目錄

          Docker鏡像加載原理

          Docker的鏡像實際上由一層一層的UnionFs文件系統(tǒng)組成bootfs:主要包含 bootloader和 Kernel,bootloader主要是引導(dǎo)加 kernel,Linux剛啟動時會加bootfs文件系統(tǒng),在 Docker鏡像的最底層是bootfs,這一層與我們典型的Linux/Unix系統(tǒng)是一樣的,包含bootfs加載器和內(nèi)核,當bootfs加載完成之后整個內(nèi)核就都在內(nèi)存中了,此時內(nèi)存的使用權(quán)已由 bootfs轉(zhuǎn)交給內(nèi)核,此時系統(tǒng)也會卸載bootfs。

          rootfs:在 bootfs之上,包含的就是典型 Linux系統(tǒng)中的/dev、/proc、/bin、/etc等標準目錄和文件,rootfs就是各種不同的操作系統(tǒng)發(fā)行版,比如:Ubuntu,、CentOS等等

          簡單理解:

          1. 對于Docker安裝OS來說:就是Docker使用了Linux本身的bootfs,只需要安裝自己所需的rootfs。

          2. 對于Docker安裝普通鏡像來說:就是Docker本身是分層下載鏡像,所以可以提取出公共層鏡像,進行復(fù)用。

          Docker鏡像的特點

          Docker鏡像都是只讀的,當容器啟動時,一個新的可寫層加載到鏡像的頂部

          這一層就是我們通常說的容器層,容器之下的都叫鏡像層

          Commit鏡像

          #?提交本地鏡像?
          #?-a:作者信息?-m:描述信息?容器ID 鏡像名稱:版本信息
          docker?commit?-a="test"?-m="test"?容器id?tomcat01:1.0

          Docker容器數(shù)據(jù)卷

          什么是容器數(shù)據(jù)卷

          容器之間可以有一個數(shù)據(jù)共享的技術(shù)!Docker容器中產(chǎn)生的數(shù)據(jù),同步到本地!

          這就是卷技術(shù)!目錄的掛載,將我們?nèi)萜鲀?nèi)的目錄,掛載到Linux上面!

          容器數(shù)據(jù)卷使用命令

          #?命令
          docker?run?-it?-v?主機目錄:容器內(nèi)目錄?/bin/bash

          掛載MySQL數(shù)據(jù)庫到Liunx宿主機

          #?1.?下載MySQL
          docker?pull?mysql
          # 2. 啟動并掛載?-e:特別注意需要設(shè)置密碼
          docker?run?-d?-p?3344:3306?-v?/home/conf:/etc/mysql/conf.d?-v?/home/logs:/logs?-v?/home/data:/var/lib/mysql?-e?MYSQL_ROOT_PASSWORD=123456?mysql

          此時我們使用遠程連接軟件會報錯

          #?解決報錯
          #?1.?進入容器內(nèi)
          docker?exec?-it?容器ID?/bin/bash
          #?2.?進入MySQL
          mysql?-uroot?-p123456
          #?3.?授權(quán)
          mysql>?GRANT?ALL?ON?*.*?TO?'root'@'%';
          # 4. 刷新權(quán)限:
          mysql>?flush?privileges;
          # 5. 更新加密規(guī)則:
          mysql>?ALTER?USER?'root'@'localhost'?IDENTIFIED?BY?'password'?PASSWORD?EXPIRE?NEVER;
          # 6. 更新root用戶密碼:
          mysql>?ALTER?USER?'root'@'%'?IDENTIFIED?WITH?mysql_native_password?BY?'123456';
          # 7. 刷新權(quán)限:
          mysql>?flush?privileges;

          具名和匿名掛載

          -v?容器內(nèi)路徑??????????#?匿名掛載
          -v?卷名:容器內(nèi)路徑?????????#?具名掛載
          -v?宿主機路徑:容器內(nèi)路徑?#?指定路徑掛載
          Docker容器內(nèi)的卷,在沒有指定目錄的情況下都在/var/lib/docker/volumes/xxx/_data下

          拓展:綁定權(quán)限

          #?通過?-v 容器內(nèi)路徑:ro rw 改變讀寫權(quán)限
          ro?#?readonly?只讀
          rw?#?readwrite?可讀可寫
          docker?run?-d?nginx01?-v?nginxdemo:/etc/nginx:ro?nginx
          docker?run?-d?nginx01?-v?nginxdemo:/etc/nginx:rw?nginx
          # ro:只要看到ro就說明這個路徑只能通過宿主機來操作,容器內(nèi)部是無法操作

          數(shù)據(jù)卷容器掛載

          目的:實現(xiàn)多個容器間的數(shù)據(jù)同步(多個MySQL間共享數(shù)據(jù))

          #?使用?--volumes-from?容器名稱?此命令實現(xiàn)數(shù)據(jù)卷容器掛載
          docker?run?-d?--name?mysql02?-p?3345:3306?--volumes-from?mysql01?-e?MYSQL_ROOT_PASSWORD=123456?mysql

          DockerFile

          DockerFile是用來構(gòu)建Docker鏡像的文件(命令參數(shù)腳本)

          DockerFile構(gòu)建指令

          FROM????????????????#?基礎(chǔ)鏡像,一切從這里開始構(gòu)建
          MAINTAINER?????????????#?鏡像是誰寫的,?姓名+郵箱
          RUN????????????????????#?鏡像構(gòu)建的時候需要運行的命令
          ADD????????????????????#?步驟,tomcat鏡像,這個tomcat壓縮包!添加內(nèi)容?添加同目錄
          WORKDIR????????????????#?鏡像的工作目錄
          VOLUME????????????????#?掛載的目錄
          EXPOSE????????????????#?保留端口配置
          CMD????????????????????#?指定這個容器啟動的時候要運行的命令,只有最后一個會生效,可被替代
          ENTRYPOINT????????????#?指定這個容器啟動的時候要運行的命令,可以追加命令
          COPY????????????????#?類似ADD,將我們文件拷貝到鏡像中
          ENV????????????????????#?構(gòu)建的時候設(shè)置環(huán)境變量!

          創(chuàng)建一個自己的CentOS鏡像

          • 創(chuàng)建DockerFile
          vim?mycentos
          • 編寫DockerFile
          FROM?centos
          MAINTAINER?MT<[email protected]>

          ENV?MYPATH?/usr/local
          WORKEDIR?$MYPATH

          RUN?yum?-y?install?vim

          EXPOSE?80

          CMD?/bin/bash
          • 構(gòu)建自己的鏡像
          docker?build?-f?mycentos?-t?mycentosdemodo:1.0?.
          • 查看鏡像生成歷史
          docker?history?鏡像ID

          創(chuàng)建Tomcat鏡像

          1.準備鏡像文件:Tomcat和JDK的壓縮包

          2.編寫DockerFile

          FROM?centos
          MAINTAINER?fortuneteller<[email protected]>

          COPY?README.txt?/usr/local/README.txt

          ADD?jdk-8u251-linux-x64.tar.gz?/usr/local
          ADD?apache-tomcat-9.0.35.tar.gz?/usr/local

          RUN?yum?-y?install?vim

          ENV?MYPATH?/usr/local
          WORKDIR?$MYPATH

          ENV?JAVA_HOME?/usr/local/jdk1.8.0_251
          ENV?CLASSPATH?$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
          ENV?CATALINA_HOME?/usr/local/apache-tomcat-9.0.35
          ENV?CATALINA_BASH?/usr/local/apache-toacat-9.0.35
          ENV?PATH?$PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

          EXPOSE?8080

          CMD?["/usr/local/apache-tomcat-9.0.35/bin/catalina.sh",?"run"]

          3.打包鏡像

          #?這里使用的是Dockerfile來明白的腳本,所以省略-f
          docker?build?-t?mytomcat?.

          4.啟動鏡像

          docker?run?-d?-p?3344:8080?--name?mttomcat?-v?/home/fortuneteller/tomcat/test:/usr/local/apache-tomcat-9.0.35/webapps/test?-v?/home/fortuneteller/tomcat/logs:/usr/local/apache-tomcat-9.0.35/logs?mytomcat

          5.測試運行

          6.在宿主機的/home/fortuneteller/tomcat/test目錄下創(chuàng)建WEB-INF目錄與mt.jsp

          <%@?page?contentType="text/html;charset=UTF-8"?language="java"?%>


          ????docker


          ----------welcome------------
          <%="這是一個測試頁面"%>


          7.在WEB-INF目錄下編寫web.xml文件

          "1.0"?encoding="UTF-8"?>
          "http://xmlns.jcp.org/xml/ns/javaee"
          ?????????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          ?????????xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee?http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
          ?????????version="3.1">
          ????test

          8.測試訪問

          本地鏡像上傳阿里云

          1. 登陸阿里云容器鏡像服務(wù)
          2. 創(chuàng)建命名空間
          3. 創(chuàng)建倉庫
          4. 設(shè)置固定密碼
          1. 查看自己的推送命令
          1. 使用推送命令完成上傳
          1. 拉取時同理根據(jù)阿里云提示命令完成即可

          Docker總結(jié)

          Docker部署SpringBoot項目

          1. 使用Maven構(gòu)建獲得jar包

          2. 編寫Dockerfile

          FROM?java:8

          COPY?*.jar?/app.jar

          CMD?["--server.port=8080"]

          EXPOSE?8080

          ENTRYPOINT?["java",?"jar",?"app.jar"]
          1. 上傳Docker與jar包到Linux服務(wù)器

          2. 使用命令獲得鏡像

          docker?build?-t?ideatest?.
          1. 使用命令查看獲取到鏡像編號
          docker?images
          1. 啟動鏡像
          docker?run?-d?-p?3344:8080?ideatest??#?3344端口需要提前在阿里云放開
          1. 測試訪問

          在瀏覽器輸入:服務(wù)器ip:3344


          良許個人微信


          添加良許個人微信即送3套程序員必讀資料


          → 精選技術(shù)資料共享

          → 高手如云交流社群





          本公眾號全部博文已整理成一個目錄,請在公眾號里回復(fù)「m」獲取!

          推薦閱讀:

          學(xué)C/C++編程的必要軟件你都裝了不?

          這就是架構(gòu)師一天的生活,還羨慕不?

          字節(jié)跳動 ?MySQL 學(xué)習(xí)筆記火了,完整版開放下載!


          5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內(nèi)回復(fù)「1024」,即可免費獲取!!


          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天干,一区二区 | 青青草在线视频免费在线观看 | 欧美日韩中文字幕无码 | 日本无码中文字幕在线视频公司 | 国产三级日韩三级欧美三级 |