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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Docker的概念及基本指令学习(从安装、管理、核心概念到docker file 、 服务编排、集群)

發布時間:2023/12/31 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker的概念及基本指令学习(从安装、管理、核心概念到docker file 、 服务编排、集群) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Docker的概念及基本指令學習---全

  • 一、Docker的安裝(centos7環境下)
  • 二、Docker管理
    • (1)核心概念:
    • (2)Docker鏡像管理(使用官方倉庫)
    • (3)Docker容器管理
    • (4)Docker網絡管理
  • 三、docker file ( 利用docker file 創建一個自己的鏡像,產品給客戶部署 )
  • 四、docker 服務編排
    • docker-compose命令
    • docker compose 網絡管理
  • 五、docker CI部署樣例
  • 六、docker集群
    • (1)Docker Swarm 配置準備以及部署
    • (2)管理節點

一、Docker的安裝(centos7環境下)

  • 檢查當前系統中是否已經安裝過docker軟件
  • yum list installed docker
  • 如果已經安裝過了docker 需要卸載到目前系統中的docker
  • yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
  • 安裝docker依賴的軟件包
    yum-utils:主要用于倉庫管理,在安裝docker之前需要設置對應的倉庫,所以需要安裝yum-utils工具包
    device-mapper:docker使用的自己的存儲管理,所以需要使用device-mapper-persistent-data 以及 lvm2工具包完成內部存儲和物理磁盤分區之間的映射關系管理
  • yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
  • 設置docker存儲庫
  • yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 檢查倉庫中docker的版本信息
  • yum list docker-ce --showduplicates | sort -r
  • 安裝docker
    docker-ce :docker的主體程序
    docker-cli: docker工具
    containerd.io:容器管理
  • yum install docker-ce docker-ce-cli containerd.io
  • 啟動docker服務
  • systemctl start docker
  • 驗證docker安裝結果
  • docker info

    二、Docker管理

    (1)核心概念:

    倉庫, 注冊服務器、鏡像,標簽,容器,Dockerfile,compose file (容器編排)

    注意:

  • 注冊服務器可以包含若干個倉庫,默認使用docker hub(官方的倉庫
    hub.docker.com),國內的注冊服務器主要包括阿里云、騰訊云、網易云等。沒有特殊要求的場景下默認使用官網的倉庫最好。
  • 倉庫是一批鏡像的合集。倉庫的命名通常為 (注冊服務器)/(倉庫名) 例如:private-docker.com/centeros
    可以理解為 private-docker.com這個服務器下有一個centeros倉庫,這個倉庫中可以包含若干個版本的centOS的鏡像
  • 鏡像是一個模版,能夠啟動多個容器,在市場用,通常會存在有兩大種類的鏡像官方鏡像以及第三方鏡像,建議使用的時候需要注意,最好使用官方的鏡像。
  • 倉庫 + 標簽能確定唯一一個鏡像
  • 容器是通過鏡像啟動的一個虛擬環境
  • Dockerfile是一個文件,其中規定了制作一個鏡像的流程,能夠打包鏡像
  • compose file是一個編排文件,里面編排了一個或多個鏡像的啟動參數,啟動后會產生一個或多個容器
  • (2)Docker鏡像管理(使用官方倉庫)

    • 在官方市場中查看相關的鏡像有兩種方式:第一可以采用網頁方式登錄 hub.docker.com然后在頁面進行搜索
    • 使用docker cli 提供的命令來完成相關操作。

    docker search [鏡像的名字] 例如:docker search mysql 查看當前倉庫中mysql鏡像的相關信息。但是需要注意的是,使用docker命令無法查看版本,需要看tag的話要到官方站點來查詢
    docker pull [鏡像名稱]:[tag] 例如:docker pull mysql:5.7 docker pull mysql 如果不使用tag 則默認采用最后一個版本
    docker images 或 docker image ls 查看當前本地docker中已經下載的鏡像信息
    docker rmi 鏡像:tag 刪除一個鏡像(需要注意鏡像如果有容器正在運行,需要先刪除容器后在刪除鏡像)
    docker tag 原鏡像名 新鏡像名 拷貝鏡像 原鏡像不需要后可以刪除掉

    (3)Docker容器管理

  • 查詢目前系統中的容器信息
  • 查看啟動了的 docker ps 查看全部 ?docker ps -a
  • 使用鏡像啟動容器
  • 例如:docker run nginx 使用nginx鏡像啟用一個容器(這種啟用方式默認會占用當前終端,用戶無法進行后續操作),為了解決此類問題我們可以附加參數更好地控制容器:

    參數名稱說明
    -d讓docker 容器在后臺運行
    -P使用隨機的宿主機端口映射容器端口
    -p使用指定端口映射內容端口 -p 宿主機端口:docker 端口
    -e 參數名=參數值向容器傳遞參數
    -v掛載數據目錄
  • 容器日志查看
  • 代碼說明
    docker logs 容器名展示容器日志
    docker logs -f 容器名跟蹤容器日志
    docker logs --tail 10 或者 docker logs -n 10從日志的末尾顯示日志
    docker logs -t顯示日志時間戳
    docker logs -t --since=“2021-06-02T13:03:00Z” abc顯示指定時間之后的日志
    docker logs -t --until=“2021-06-02T13:03:00Z” abc顯示指定時間之前的日志
    docker logs abcgreap Chrome
  • 容器控制
  • 代碼說明
    docker stop 容器名停止容器
    docker start 容器名啟動容器
    docker pause 容器名暫停一個容器運行
    docker unpause 容器名恢復一個容器運行
    docker restart 容器名重啟一個容器
    docker rm 容器名刪除一個容器

    (4)Docker網絡管理

    使用docker network ls 查看docker目前支持的網絡。當安裝完docker后,默認會創建三個網絡:bridge網絡,host網絡和none網絡。可以使用:

    • docker inspect 網絡id 查看每一個網絡的相關配置
    • netstat -lnpt 查看目前系統開放的端口
    • firewall-cmd --list-ports 查看防火墻開放的端口

    docker的四種網絡模式

    1.host模式

    • 例如使用創建一個host模式的mysql容器 docker run -d -e MYSQL_ROOT_PASSWORD='mysql' --net='host' --name='cslcp_mysql' mysql 在容器外連接mysql使用的ip是linux的ip,端口同樣是linux的端口3306
    • 使用docker ps -a的場景下,無法顯示目前正在使用的端口。在這種情況下可以使用docker inspect鏡像名來查看該鏡像開放的端口號。或者使用docker logs 容器名 查看容器啟動日志來查看啟動占用的端口,或者通過docker inspect 容器名來查看容器占用的端口號
    • 另外需要注意的問題是,以host模式啟動的容器,需要確保容器使用的端口在宿主機的防火墻中配置過開放策略,否則其他機器無法訪問對應服務。 firewall-cmd --permanent --zone=public --add-port=80/tcp
    • 最后,在使用host模式的場景下,可以開啟多個容器,雖然有時候能夠啟動成功,但是當容器運行一段時間后,會發現只有一個能夠運行,其他的都異常關閉了,這是因為端口沖突的原因。至于最后能保留哪一個容器,這個運行的效果不一定。?

    2.bridge模式(網橋模式,這是docker的默認網絡模式)

    • 使用docker network ls 查看當前的docker開放的網絡
    • 使用docker inspect 網絡id 查看網橋的配置,通常docker的橋模式會在宿主機上創建一個叫做docker0的宿主機網絡作為網 橋。可以在宿主機上使用ip addr查看相關的ip。如果不想使用宿主機上默認的ip可以在 /etc/docker/ 目錄中添加 daemon.json 配置文件,在文件中添加{"bip":"192.168.100.1/24"} 配置來修改對應的ip配置。足以在修改上述配置的時候,需要先停止dokcer服務 systemctl stop docker 修改完成后再次啟動docker服務
    • 重新啟動docker服務器,再次開啟容器,可以查看容器的ip按照新配置的方案進行ip設置
    • 如果不希望使用docker分配的ip地址,可以在啟動的過程中使用
      –ip參數來指定容器需要使用的ip地址(需要注意的是默認的橋接模式不允許用戶自定義ip)例如:docker run -itd --name='c6' --network=bridge --ip=192.168.100.7 centos 該命令在指定后會報出異常。
      當我們需要使容器與容器進行通信時。可以使用以下策略

    靜態配置策略

    第一步:創建自定義網絡

    docker network create --subnet=192.168.90.0/24 cslcp_network

    第二步:動容器并加入網絡

    docker run -it --name=cslcp_1 --network=csclp_network --ip=192.168.90.5 centos

    使用link配置策略

    docker run -itd --name=c1 centos docker run -itd --name=c2 --link=c1:cnet1 centos

    進入到centos輸入ping cnet1查看是否連通

    docker exec -it c2 bash

    這種配置的優勢是可以不使用靜態ip,只是使用容器別名就可以直接訪問目標容器,避免了在宿主機中出現ip沖突的問題,缺點是容器有依賴關系,所以被依賴的容器一定需要先啟動,在一個復雜的網絡模型中使用起來比較麻煩。

    使用自定義網絡+網絡別名方案(推薦)
    第一步:創建自定義網絡

    docker network create --subnet=192.168.90.0/24 cslcp_network

    第二步:啟動容器

    docker run -itd --name=c1 --network=cslcp_network --network-alias=c1_net centos

    第三步:通過網絡別名訪問目標容器(進入到centos輸入ping c1_net查看是否連通)
    ?
    3.container模式
    使用該模式可以讓多個容器共享同一個ip地址。

    docker run -itd --name c1 centos docker run -itd --name nginx --net container:c1 nginx

    4**.none模式**(全部手工配置,在生產環境下一般不使用該種模式,老師就沒講,有想了解的可以去其他帖子看看)

    三、docker file ( 利用docker file 創建一個自己的鏡像,產品給客戶部署 )

  • docker file是用來構建docker 鏡像的文件,在開始學習構建鏡像之前,我們需要先來了解一下docker鏡像的基本結構
  • dockerfile由四部分組成
  • ? 第一部分是基礎鏡像信息

    ? 第二部分是維護者信息(非必須)

    ? 第三部分是鏡像的操作指令

    ? 第四部分是容器啟動的時候需要執行的指令

    docker file的編寫

    • docker file是一個文本文件,通常該文件起名是Dockerfile,文件中第一部分需要編寫基礎鏡像信息。使用FROM關鍵字,例如 FROM nginx 該語句的含義是指,創建的鏡像文件是基礎鏡像是nginx,隱含的含義是新鏡像也會包含nginx的基礎鏡像所以對于docker鏡像來講鏡像的基礎層都應該是操作系統 - 編寫基礎鏡像后,可以在后面跟鏡像的維護人信息,MAINTAINER <用戶名 用戶郵箱>
    • 第三部分需要編寫針對目前讀寫容器進行的操作指令,需要注意的是,每一條指定都會改變鏡像,所以每一條指定都會生成新的進行層,在工作中,鏡像的層級盡量要少,鏡像層多了后,會耗費較大的存儲空間。常用的指定包括

    1) RUN run指定代表在當前的容器層的shell中要執行的命令,例如在容器中創建一個文件夾(RUN mkdir /root/docker/content)。需要注意的是,每一次執行RUN指令都會需改當前的容器層狀態,所以每次修改都會在當前容器中產生新的層,在生產活動中,就一個較為合理的使用建議是,鏡像的層次盡量的少,所以建議在容器中采用&&號來連接多個需要RUN的指令,如果指令過長可以使用 “\”進行換行操作。RUN命令的執行時機是在構建鏡像的時候。在build時候執行
    2) EXPOSE 該指定代表容器運行之后向外開放的端口號。例如 EXPOSE 80 代表默認情況下,使用該鏡像創建容器的時候,容器向宿主機開放80端口,如果需要向宿主機開放多個端口,可以直接寫為 EXPOSE 90 80 1010
    *** 3)*** ENV 設置docker容器的環境變量,在使用鏡像啟動容器的時候,我們有可能需要向容器中傳遞一些啟動參數,這時候ENV就可以用來實施這個任務。在Dockerfile中,可以使用ENV MY_NAME=value的形式來設置名字叫做MY_NAME的環境變量,并賦予其初始值value,如果在啟動容器的時候,需要改變其值,可以使用-e參數來進行重新指定,ENV設置的環境變量,在生效后,將會一直存在。想要觀察環境變量的值,可以在容器啟動后,進入容器后使用env命令來進行查看。此外,也可以在容器之外,使用 docker inspect命令來查看。在dockerfile中,聲明了一個環境變量之后,可以使用 $環境變量的方式來進行引用
    4) COPY在構建鏡像的時候,如果需要將外部的文件拷貝的鏡像內部,則可以使用COPY命令。命令格式為 COPY 宿主機文件 容器內地址。在生產環境下,有一個比較好的實施方式是,將需要拷貝的內容全部放到一個文件夾中,然后再dockerfile所在的目錄進行鏡像構建,盡量控制context的范圍內的文件大小,因為在構建的過程中,docker需要將context中的所有文件都發送到docker的守護進程中,所以如果context內的文件太多,會造成構建鏡像過大以及構建過程過長的問題。ADD和COPY相仿,它能夠將宿主機的tar壓縮包解壓陳文件搞到鏡像中。也可以下載宿主機沒有的
    5) USER通常指定為root賬號。
    6) WORKDIR,該指定會改變從WORKDIR指定之后的RUN以及CMD等相關指定的當前目錄,例如 WORKDIR /root/web 則代表之后的指令的工作目錄從root目錄變更為/root/web目錄。
    7) VOLUME在構建鏡像的時候,我們可以通過VOLUMN來給鏡像指定一個掛載目標,在鏡像內可以使用掛載目標直接訪問在宿主機上的文件,如果沒有指定掛載內容,則直接訪問宿主機之內的內容。掛載目錄或者是掛載文件可以在創建容器的時候使用-v參數來指定。 VOLUME可以接收一個數組型的參數,如果需要多個掛載點,可以在數組內直接聲明。具體語法 VOLUME ["/root/vol","/root/tt"]
    8) CMD,該指令與RUN的書寫模式基本一致,但是她是在docker容器啟動的時候需要執行的命令,在dockerfile中只能有一個CMD,如果寫了多個也只會執行最后一個。在run或start執行。。demon off 守護模式關閉,進入當前控制臺相當于沒有-it
    例如:

    FROM nginx USER root RUN mkdir /root/web && mkdir /root/conf COPY ./dist/* /root/web COPY ./nginx.conf /root/conf/nginx.conf EXPOSE 8080 CMD ["ngxin","-g","daemon off;","-c","/root/conf/ngxin.conf"] FROM adoptopenjdk:11-jre-openj9 ENV ACTIVE=dev ENV JARNAME=cslcp-0.0.1-SNAPSHOT.jar RUN mkdir /opt/app && mkdir /opt/file VOLUME ["/opt/app","/opt/file"] #CMD ["java", "-jar", "/opt/app/cslcp-0.0.1-SNAPSHOT.jar" ,"--spring.profiles.active=${ACTIVE}"] CMD java -jar /opt/app/${JARNAME} --spring.profiles.active=${ACTIVE}

    四、docker 服務編排

    • docker 服務編排也叫docker compose,它的出現是應來解決使用docker部署大型應用的業務場景的問題。通常在生產環境中,使用docker部署一個應用需要使用多個容器,例如部署前端、后端、依賴服務、數據庫等。如果每個容器都需要手工使用shell來啟動則效率過于低下,所以在這樣的場景中,我們可以采用docker compose來進行docker容器的編排工作。

    第一步:下載docker compose

    curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

    第二步:修改docker compose讓其有可執行權限

    chmod 744 /usr/local/bin/docker-compose

    第三步:測試

    docker-compose -version

    第四部:docker-compose.yml文件的編寫
    在docker-compose.yml文件中可以編寫相關的配置屬性,用來管理compose的構建過程,主要的屬性包括:
    1)version 代表compose文件格式版本,按照官網的實例,建議目前采用‘3.9’版本
    2)services 該屬性是compose文件中的核心屬性,在該屬性之下,可以配置compose啟動的各種服務。主要是需要compose啟動的各種容器信息。也是compose文件中主要的開發內容。
    常用屬性:

    屬性名稱說明
    image當前服務使用什么鏡像文件
    ports當前容器需要映射的端口信息 - ”8080:80“
    enviroments當前鏡像需要傳遞的參數
    volumes當前鏡像的掛在點
    tty:true代表使用-it模式啟動服務
    build指定dockerfile所在的路徑,當使用docker compose編排一個容器,而且該容器需要構建的時候需要使用該參數
    container_name指定編排容器的名稱
    restart:always在docker服務重啟后,該容器是否自動重啟
    depends_on: 服務名設定服務依賴關系,通過該配置可以決定服務的啟動順序
    env_file指定配置文件
    context指定上下文
    dockerfile指定需要使用的dockerfile文件

    3)networks

    例子1:在service中配置簡單的服務信息,編寫compose文件,啟動一個nginx容器

    version: '3.9' services:my_nginx:image: "nginx"ports:- "8080:9090"volumes:- "/root/docker_vol/web/dist:/usr/share/nginx/html:ro"- "/root/docker_vol/web/conf/nginx.conf:/etc/nginx/nginx.conf:ro"
    • 使用docker-compose up命令 啟動容器編排,需要注意的是,容器啟動成功后,默認會占用當前的終端用來輸出日志信息。我們可以重新打開一個終端,使用docker ps命令查看,發現docker中多了一個容器名字叫做 **my_nginx_1.這就是compose替我們啟動的容器。
    • 在上面的例子中,my_nginx是一個服務的名字,也可以理解為是生成容器名字的其中一部分,image屬性代表要使用什么鏡像,ports 代表需要映射的端口,前邊是宿主機的端口,而后面是容器內的端口。volumns代表要進行的文件掛載。
    • 此外,使用docker network ls命令可以發現,compose啟動后,自動給我們創建了一個網絡,通過 docker inspect 命令發現使用當前compose文件啟動的容器默認都加入到了,新創建的網絡中。

    例子2:在tomcat-compose文件中構建一個服務,在本地docker中不存在有對應的鏡像

    version: '3.9'services:my_tomcat:image: "tomcat"
    • 如果在compose中包含本地docker中不存在的鏡像,則在運行compose的過程中會自動下載對應的鏡像。理論上在一臺安裝有docker以及docker
    • compose的宿主機上,在保證網絡暢通的前提下,我們只需要依靠docker-compose文件就可以直接安裝對應的系統。
    • 此外,在當前的例子中,我們將compose文件認為的修改為
      tomcat-compose.yml,如果不使用默認的文件名,則需要在執行docker-compose up命令的時候加上 -f 參數,手工指定對應的yml文件。

    例子3:一次啟動多個容器

    version: '3.9'services:my_tomcat:image: "tomcat"my_nginx:image: "nginx"ports:- "8080:9090"volumes:- "/root/docker_vol/web/dist:/usr/share/nginx/html:ro"- "/root/docker_vol/web/conf/nginx.conf:/etc/nginx/nginx.conf:ro"

    docker-compose命令

    ? 在之前的例子中,我們使用了docker-compose up命令來啟動一個容器編排,接下來,我們詳細了解一下,在docker-compose中常用的命令以及參數使用

  • docker-compose命令
    常用參數:
    -f 默認docker-compose會在當前文件夾下詢招Dockercompose.yml文件,如果需要自定義文件名,可以使用-f 文件名 形式來指定
    -p 指定項目名稱 指定項目后,通過compoose創建的所有容器都會自動添加項目名稱前綴
    -v 查看當前docker-compose的版本信息
  • docker-compose 環境變量
    docker compose 默認的環境變量為.env,在其中我們可以使用對應的鍵值對模式給compose傳遞值 --env-file 參數可以動態制動compose需要使用的配置文件位置
  • docker-compose up 啟動一個容器編排
    常用參數: `
  • 參數名稱說明
    -d后臺運行
    –force-recreate強制更新已經存在的容器
    –remove-orphans刪除在compose文件中沒有定義的容器,通常使用在修改了compose文件的場景下使用服務名 單獨啟動compose中的某一個服務,如果服務存在依賴,則被依賴的服務也會被啟動
    docker-compose down刪除對應的容器,網絡服務
    docker-compose stop停止compose對應的所有服務
    docker-compose start啟動所有的服務容器
    docker-compose ps查看與當前compse相關的服務容器
    -q只列出id值,其他值不顯示
    docker-compose logs讀取日志信息
    docker-compose pull拉取服務對應的鏡像
    docker-compose build構建compose中的所有鏡像、
    docker-compose images查看所有的鏡像信息
    docker-compose config查看配置文件信息
    docker-compose restart重啟服務
    docker-compose exec 服務名進行指定服務的容器
    docker-compose rm刪除所有已經停止的服務容器
    以上命令涉及到某個服務的時候均可以通過:命令:服務名對相應的服務進行操作看左面

    docker compose 網絡管理

  • ?默認場景下,使用docker compose編排服務,會自動創建對應的網絡。可以使用docker network ls
    以及docker inspect 網絡id 進行相關的查詢。
  • 可以在compose文件中,使用networks
    定義一個網絡,并在服務中使用networks屬性加入一個自定義網絡。這時候有三種結果,如果所有的服務都加入到了自定義網絡,則docker,會創建自定義網絡,并將所有的服務容器添加到對應的網絡中,如果沒有任何服務聲明加入自定義網絡,則docker會創建默認網絡,然后將容器添加到默認網絡,而不會創建自定義網絡,如果有的服務聲明添加到自定義網絡,而有的服務沒有聲明,則docker會創建兩個網絡,一個是自定義網絡,而另一個是默認網絡,并將對應的容器添加到對應的網絡中。
  • 使用固定ip策略
  • version: '3.3' services:cslcp_web:image: "cslcp_web_image:v01"ports:- "19090:8080"build:context: "../web/"dockerfile: "Dockerfile"networks:- "cslcp_net"cslcp_mysql:image: "mysql"networks:cslcp_net:ipv4_address: 192.168.13.100ports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: 'root'cslcp_centos:container_name: 'test_centos'image: "centos"tty: truenetworks:cslcp_net:ipv4_address: 192.168.13.11 networks:cslcp_net:ipam:config:- subnet: "192.168.13.0/24"gateway: "192.168.13.1"
  • 使用服務策略
    當compose啟動成功后可以直接使用ping 訪問服務名
  • 使用網絡別名策略
  • networks:cslcp_net:ipam:config:- gateway: 192.168.13.1subnet: 192.168.13.0/24 services:cslcp_centos:container_name: test_centosdepends_on:cslcp_web:condition: service_startedimage: centoslinks:- cslcp_web:cwnetworks:cslcp_net:ipv4_address: 192.168.13.11tty: truecslcp_mysql:environment:MYSQL_ROOT_PASSWORD: rootimage: mysqlnetworks:cslcp_net:ipv4_address: 192.168.13.100ports:- published: 13306target: 33064cslcp_web:build:context: /root/docker/dockercompose/cslcp/webdockerfile: Dockerfileimage: cslcp_web_image:v01networks:cslcp_net: nullports:- published: 19090target: 8080 version: '3.3'
  • 使用container 策略
  • version: '3.3' services:cslcp_web:image: "cslcp_web_image:v01"build:context: "../web/"dockerfile: "Dockerfile"depends_on:- "cslcp_centos"network_mode: "service:cslcp_centos"cslcp_mysql:image: "mysql"environment:MYSQL_ROOT_PASSWORD: 'root'depends_on:- "cslcp_centos"network_mode: "service:cslcp_centos"cslcp_centos:container_name: 'test_centos'image: "centos"tty: trueports:- "17070:8080"- "13306:3306"networks:cslcp_net:ipv4_address: 192.168.13.11 networks:cslcp_net:ipam:config:- subnet: "192.168.13.0/24"gateway: "192.168.13.1"

    五、docker CI部署樣例

    記得先創建掛載出去的文件夾,網上教學據說不創建也能用,但是可能是我自己環境原因不太行,所以就提前創建好了。整套流程用的是LDAP(管理賬號用的)+ heimdall(門戶站點)+gitlab (代碼倉庫)+ jenkins (持續構建、流水線)+redmine(飯票)+ sonar (代碼質量檢測工具)+nextcloud(網盤) 部分功能持續更新中......

    version: '3.1'services:hs-ldap:image: osixia/openldap:latesthostname: hs-ldaprestart: alwaysports:- "10001:389"volumes:- /home/docker_vol/openldap/slapd/database:/var/lib/ldap- /home/docker_vol/openldap/slapd/config:/etc/ldap/slapd.d- /etc/localtime:/etc/localtime:roenvironment:- LDAP_ORGANISATION=jn- LDAP_DOMAIN=jn.com- LDAP_ADMIN_PASSWORD=P@ssword- LDAP_CONFIG_PASSWORD=P@ssword- TZ=Asia/Shanghairedmine:image: redminerestart: alwaysports:- "10003:3000"volumes:- /home/docker_vol/redmine/files:/usr/src/redmine/files- /home/docker_vol/redmine/log:/usr/src/redmine/log- /home/docker_vol/redmine/data:/home/redmine/data- /home/docker_vol/redmine/config/configuration.yml:/usr/src/redmine/config/configuration.yml- /home/docker_vol/redmine/plugins:/usr/src/redmine/plugins- /etc/localtime:/etc/localtime:roenvironment:REDMINE_DB_MYSQL: dbREDMINE_DB_PASSWORD: schoolcloudREDMINE_SECRET_KEY_BASE: supersecretkeyREDMINE_DB_ENCODING: utf8db:image: mysql:5.7restart: alwaysports:- "10010:3306"command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_civolumes:- /home/docker_vol/redmine/mysql/data:/var/lib/mysql- /home/docker_vol/redmine/mysql/conf:/etc/mysql/conf.d- /etc/localtime:/etc/localtime:roenvironment:MYSQL_ROOT_PASSWORD: schoolcloudMYSQL_DATABASE: redmineTZ: Asia/Shanghaidb_nextcloud:image: mysql:5.7restart: alwaysports:- "10011:3306"command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_civolumes:- /home/docker_vol/nextcloud/mysql/data:/var/lib/mysql- /home/docker_vol/nextcloud/mysql/conf:/etc/mysql/conf.d- /etc/localtime:/etc/localtime:roenvironment:MYSQL_ROOT_PASSWORD: schoolcloudMYSQL_PASSWORD: schoolcloudMYSQL_DATABASE: nextcloudMYSQL_USER: nextcloudTZ: Asia/Shanghaidevops-nextcloud:image: nextcloudrestart: alwaysports:- "10002:80"volumes:- /home/docker_vol/nextcloud/html1:/var/www/html- /etc/localtime:/etc/localtime:roenvironment:REDMINE_DB_MYSQL: db_nextcloudREDMINE_DB_PASSWORD: schoolcloudREDMINE_SECRET_KEY_BASE: supersecretkeyREDMINE_DB_ENCODING: utf8heimdall:image: linuxserver/heimdallrestart: alwayscontainer_name: heimdallenvironment:- PUID=1000- PGID=1000- TZ=Asia/Shanghaivolumes:- /home/docker_vol/heimdall/config:/configports:- 80:80- 443:443restart: unless-stoppedgitlab:privileged: trueimage: gitlab/gitlab-cerestart: alwaysports:- "5443:443"- "82:82"- "2222:22"volumes:- /home/docker_vol/gitlab/config:/etc/gitlab- /home/docker_vol/gitlab/data:/var/opt/gitlab- /home/docker_vol/gitlab/logs:/var/log/gitlabtty: truejenkins:privileged: truetty: trueimage: jenkins/jenkins:2.289.1-lts-centos7restart: alwaysports:- "9302:8080"- "50000:50000"volumes:- /home/docker_vol/jenkins:/var/jenkins_home- /var/run/docker.sock:/var/run/docker.socksonarqube:restart: alwaysimage: sonarqubetty: trueenvironment:- SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=trueports:- "9000:9000"

    六、docker集群

    (1)Docker Swarm 配置準備以及部署

  • 準備三臺宿主機器ip地址分別是192.168.0.4、192.168.0.6以及192.168.0.7,其中192.168.0.4是作為manager節點(管理根節點)其他兩臺機器是作為work節點來使用。
  • 創建swarm集群
  • ? docker swarm init --advertise-addr 192.168.0.4 ? docker swarm join --token SWMTKN-1-69kuzr0khh1slvbuul0wn99t8ydf3f1hwaprvyx2r3kho4lxj4-87c2vnklddpwu1wvemex5d6wb 192.168.0.4:2377
  • 端口開放
  • ? firewall-cmd --zone=public --add-port=2377/tcp --permanent? firewall-cmd --zone=public --add-port=7946/tcp --permanent? firewall-cmd --zone=public --add-port=7946/udp --permanent? firewall-cmd --zone=public --add-port=4789/tcp --permanent? firewall-cmd --zone=public --add-port=4789/udp --permanen
  • 修改主機名解析
  • ? hostnamectl set-hostname manager? vi /etc/hosts 不是必須要做的? 192.168.0.4 manager? 192.168.0.6 worker01? 192.168.0.7 worker02
  • 在worker節點中使用生成的命令將當前節點添加到管理節點中
  • ? docker swarm join --token SWMTKN-1-69kuzr0khh1slvbuul0wn99t8ydf3f1hwaprvyx2r3kho4lxj4-87c2vnklddpwu1wvemex5d6wb 192.168.0.4:2377
  • 在管理節點查看集群節點信息
  • ? docker node list? docker inspect 節點id

    (2)管理節點

  • 查詢目前集群中的節點信息
  • ? docker node ls (管理節點)? docker inspect 節點id
  • 關于節點的狀態
  • ? Active:節點目前處于空閑狀態,可以被指派新的任務

    ? Pause:節點目前處于不可接受新任務的狀態,但目前的任務可以繼續執行

    ? Drain:節點目前處于不可接受新任務的狀態,并且停止目前正在執行的任務

    ? Down:廢棄的節點

    ? docker node update --availability drain manager 將管理節點調整為不接受新任務,也不再執行新任務的狀態(專做管理)docker node update --availability drain work01

    ? docker swarm leave (工作節點) 讓當前節點離開集群,離開后在管理端 節點的狀態變成down狀態。

    ? docker swarm leave --force (管理節點)解散集群

    ? docker node rm 節點名稱 刪除一個節點(只能刪除down狀態的節點)

  • Swarm節點部署服務與管理
  • ? docker service create --replicas 2 --name cslcp_web -p18080:80 nginx 創建服務

    ? docker service ls 查看當前的集群中有那些服務

    ? docker service ps 服務名 查看有那些節點為當前服務提供支持

    ? docker service scale cslcp_web=3 修改服務節點數量

    ? docker service rm cslcp_web 刪除所有的服務節點

    制作整理不易,以上內容均為原創(參考了部分官方文檔和老師整理的案例)。如要引用請附上本文鏈接,如有疑問可以在評論區暢所欲言,作者看到會第一時間回復,歡迎交流!

    總結

    以上是生活随笔為你收集整理的Docker的概念及基本指令学习(从安装、管理、核心概念到docker file 、 服务编排、集群)的全部內容,希望文章能夠幫你解決所遇到的問題。

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