日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker中级篇|深入探究Docker

發布時間:2024/8/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker中级篇|深入探究Docker 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介:?深入探究Docker

Docker鏡像理解

Docker鏡像是什么

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

Docker鏡像加載原理

UnionFs:聯合文件系統

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

Docker鏡像加載原理

Docker的鏡像實際上由一層一層的UnionFs文件系統組成bootfs:主要包含 bootloader和 Kernel,bootloader主要是引導加 kernel,Linux剛啟動時會加bootfs文件系統,在 Docker鏡像的最底層是bootfs,這一層與我們典型的Linux/Unix系統是一樣的,包含bootfs加載器和內核,當bootfs加載完成之后整個內核就都在內存中了,此時內存的使用權已由 bootfs轉交給內核,此時系統也會卸載bootfs。rootfs:在 bootfs之上,包含的就是典型 Linux系統中的/dev、/proc、/bin、/etc等標準目錄和文件,rootfs就是各種不同的操作系統發行版,比如:Ubuntu,、CentOS等等

簡單理解:

1. 對于Docker安裝OS來說:就是Docker使用了Linux本身的bootfs,只需要安裝自己所需的rootfs2. 對于Docker安裝普通鏡像來說:就是Docker本身是分層下載鏡像,所以可以提取出公共層鏡像,進行復用

Docker鏡像的特點

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

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

-

Commit鏡像

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

Docker容器數據卷

什么是容器數據卷

容器之間可以有一個數據共享的技術!Docker容器中產生的數據,同步到本地!

這就是卷技術!目錄的掛載,將我們容器內的目錄,掛載到Linux上面!

容器數據卷使用命令

# 命令 docker run -it -v 主機目錄:容器內目錄 /bin/bash

掛載MySQL數據庫到Liunx宿主機

# 1. 下載MySQL docker pull mysql # 2. 啟動并掛載 -e:特別注意需要設置密碼 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. 進入容器內 docker exec -it 容器ID /bin/bash # 2. 進入MySQL mysql -uroot -p123456 # 3. 授權 mysql> GRANT ALL ON *.* TO 'root'@'%'; # 4. 刷新權限: mysql> flush privileges; # 5. 更新加密規則: 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. 刷新權限: mysql> flush privileges;

具名和匿名掛載

-v 容器內路徑 # 匿名掛載 -v 卷名:容器內路徑 # 具名掛載 -v 宿主機路徑:容器內路徑 # 指定路徑掛載

Docker容器內的卷,在沒有指定目錄的情況下都在/var/lib/docker/volumes/xxx/_data下

拓展:綁定權限

# 通過 -v 容器內路徑:ro rw 改變讀寫權限 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就說明這個路徑只能通過宿主機來操作,容器內部是無法操作

數據卷容器掛載

目的:實現多個容器間的數據同步(多個MySQL間共享數據)

# 使用 --volumes-from 容器名稱 此命令實現數據卷容器掛載 docker run -d --name mysql02 -p 3345:3306 --volumes-from mysql01 -e MYSQL_ROOT_PASSWORD=123456 mysql

DockerFile

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

DockerFile構建指令

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

創建一個自己的CentOS鏡像

  • 創建DockerFilevim mycentos
  • 編寫DockerFileFROM centos MAINTAINER MT<1746344046@qq.com> ENV MYPATH /usr/local WORKEDIR $MYPATH RUN yum -y install vim EXPOSE 80 CMD /bin/bash
  • 構建自己的鏡像docker build -f mycentos -t mycentosdemodo:1.0 .
  • 查看鏡像生成歷史docker history 鏡像ID

創建Tomcat鏡像

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

2.編寫DockerFile

FROM centos MAINTAINER fortuneteller<1746344046@qq.com>COPY README.txt /usr/local/README.txtADD jdk-8u251-linux-x64.tar.gz /usr/local ADD apache-tomcat-9.0.35.tar.gz /usr/localRUN yum -y install vimENV MYPATH /usr/local WORKDIR $MYPATHENV 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/binEXPOSE 8080CMD ["/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目錄下創建WEB-INF目錄與mt.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>docker</title> </head> <body> ----------welcome------------ <%="這是一個測試頁面"%> </body> </html>

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

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="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"><display-name>test</display-name> </web-app>

8.測試訪問

本地鏡像上傳阿里云

1.登陸阿里云容器鏡像服務

2.創建命名空間

3.創建倉庫

4.設置固定密碼

5.查看自己的推送命令

6.使用推送命令完成上傳

7.拉取時同理根據阿里云提示命令完成即可


Docker總結

-

Docker部署SpringBoot項目

1.使用Maven構建獲得jar包

2.編寫Dockerfile

FROM java:8COPY *.jar /app.jarCMD ["--server.port=8080"]EXPOSE 8080ENTRYPOINT ["java", "jar", "app.jar"]

3.上傳Docker與jar包到Linux服務器

4.使用命令獲得鏡像

docker build -t ideatest .

5.使用命令查看獲取到鏡像編號

docker images

6.啟動鏡像

docker run -d -p 3344:8080 ideatest # 3344端口需要提前在阿里云放開

7.測試訪問

在瀏覽器輸入:服務器ip:3344

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

本文為阿里云原創內容,未經允許不得轉載。

?

總結

以上是生活随笔為你收集整理的Docker中级篇|深入探究Docker的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。