<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      docker相關知識

      docker-compose自定義執行文件:docker-compose -f docker-compose.rel.yaml up -d

       

      docker前期準備:
      //給某個ubuntu添加docker權限,否則每次都需要去root權限下執行docker-compose命令
      sudo groupadd docker
      sudo gpasswd -a ubuntu docker
      sudo systemctl restart docker
      還有就是再容器設置中要添加privileged:true [給docker容器添加root權限],否則停止允許docker容器的命令容易出permission denied錯誤,導致無法停止

      特別特別要注意的點:docker volume prune是刪除所有沒有容器掛載的本地volume,如果當前網站的容器被刪了,那么數據庫的volume也就失去了掛載的容器,這個時候執行docker volume prune,等于是把數據庫給刪了
      所以docker volume prune最好不要執行,那些本地不要的volume,直接手動去刪,以免誤刪


      單個數據庫項目第一次啟動執行流程(數據庫集群啟動流程在mongo.readme文件里面):[每次執行命令要sudo,直接sudo su root進入root權限,然后就不用打sudo了,但最好還是看上面的docker前期準備,把當前賬戶添加到docker組]
      1.管理員權限打開window PowerShell【window下】|linux下也是打開命令行界面,進入docker-compose.yml文件所在目錄,執行sudo docker-compose up -d [注意,這里必須價sudo,因為有些文件的操作需要sudo權限]
      這里會出現若干問題:
      1.1由于web這個service用dockerfile創建,創建的時候會出現web error
      1.2創建的時候因為端口被占用,會拋出error,需要進入sudo su root,然后netstat -anp |grep 端口號查看哪個進程占用端口,直接kill 進程號;然后再exitc出來,繼續執行docker-compose up -d [遇到端口被占用就重復這一步]

      2.執行docker exec -it gp-database mongo admin :進入mongo數據庫,接下來創建數據庫管理員
      3.執行db.auth("jeffreychen","out103496"),來鑒權,否則無法創建管理員

      //創建超級管理員:clusterAdmin是超級管理員角色,readAnyDatabase是訪問出了config和local數據庫以外的所數據庫的角色
      4. db.createUser({
      user: 'fdsf',
      pwd: 'fds',
      roles: [{
      role: 'clusterAdmin',
      db: 'admin'
      },{
      role: 'readAnyDatabase',//除了local和config倉庫,對其他任何倉庫都有查看的權限【沒有修改其他倉庫的權限】
      db: 'admin'
      },{
      role : 'readWrite',
      db : 'config'
      },{
      role : 'readWrite',
      db : 'local'
      }]
      })
      5.執行use gpclubs 切換到gpclubs倉庫,,因為每個倉庫的管理員,都需要先切換到該倉庫,然后才能創建

      //創建gpclubs倉庫的管理員,
      6.執行
      //這個是yz環境的帳號密碼
      db.createUser({
      user: 'gpyz',
      pwd: '123456',
      roles: [{
      role: 'readWrite',
      db: 'gpclubs'
      }]
      })


      7.這里有一點要特別注意,第六步中的帳號密碼,要提前放到node項目的config文件的數據路連接上,
      例如"mongodb://gp:Z103496out@database:27017/gpclubs?retryWrites=false" :gp:Z103496out是帳號密碼,database是yml里面的mongo的service名稱
      【因為處于同一個網絡app-network,所以可以通過對應的yml里面的services的名稱來代替ip訪問,當然也可以在yml文件中通過設置靜態ip,然后這個url就可以用靜態ip:端口來訪問了】

       

       

      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      后面所有的發布【mongo-express和database服務基本不會修改,不需要重新構建鏡像】:1.sudo docker-compose buld web ; 2.docker-compose up -d

      docker-compose down :刪除所有在允許的容器
      docker-compose pull :更新鏡像內容 :如果遇到通過dockerfile構建的鏡像,需要自己docker-compose buld service名稱來手動執行構建鏡像【根據yml的對應service的名稱下的內容來構建】
      docker-compose up -d:根據鏡像創建容器,第一次啟動還會自動構建鏡像,然后再根據鏡像創建容器


      //docker中最煩人的2個問題!!!!!!!!!!!!!!!!!!!!!!!!!!!
      1.docker數據本地持久化,在yml中設置volume的名稱和host地址非常麻煩,一點都不友好:
      docker下的mongo會自動創建/data/db和/data/configdb這兩個本地的掛載,同時默認的數據會放在/data/db里面

      docker inspect 容器名稱,可以產看容器的所有數據
      source : 宿主機內掛載文件位置【如果沒有指定,就會自動生成本地的掛載目錄】
      destination:容器內掛載位置【這個是exec進入容器后,查看容器里面對應路徑下的位置,是容器里面的數據】

      2.docker-compose構建container以后,想要停止docker容器,非常麻煩,不管root權限還是其他,都沒法停止!!!!!!!!!!!!:容器設置添加privileged:true [給docker容器添加root權限]

       


      !!!!!!!!
      容器出錯如何查看報錯 : docker logs -f 容器名稱
      !!!!!!!

       

      注意點:
      1.再容器內設置volume的時候,如果type為volume,那么soruce可以是全局的volumes,如果type為bind,那么volume必須是一個已經存在volume的地址,如下
      volumes:
      - type: volume
      source: db-data 本地數據卷名稱,同步到這個數據卷內部
      target: /data/db 容器中的位置
      volume:
      nocopy: true
      - type: bind
      source: /var/run/postgres/postgres.sock
      target: /var/run/postgres/postgres.sock

      2.上面的source指向的是本機host掛載volume數據卷的地址,target是容器內的數據地址【exec進入容器,根目錄下的的對應地址會用來保存數據】


      3.特別坑的一點,如果掛載的多個volume設置中,target沒有設置/data/db和/data/configdb,那么docker的mongo鏡像創建容器的時候,會自動掛載2個數據卷,映射的target分別是/data/db和/data/configdb


      4.目前來看,還無法自定義本地掛載的地址,只能設定對應的名稱:默認是在/var/snap/docker/common/var-lib-docker/volumes/文件夾下,根據volume名稱來確定位置
      例如volume的名稱是db-configdb,那么最終合成的文件夾名稱會帶有文件價名稱的前綴,koa-node_db-configdb,里面_data文件夾存放數據
      最終的地址是/var/snap/docker/common/var-lib-docker/volumes/koa-node_db-configdb/_data

      5.本地的掛載地址下增刪改文件,在容器中的數據會自動同步,可以自動通過docker exec 容器名 ls 來查看對應的文件是否真的同步修改了

      6.yml設置里面的坑,已經全部在設置文件里面搞好了,所以不需要這里再寫了


      docker-compose down:關閉并刪除所有容器
      docker volume prune:刪除所有沒用到的volume數據卷,因為第一步已經刪了容器,所以第二步執行的時候,會把所有的和容器沒有關聯的數據卷刪除
      docker-compose up:創建和啟動容器,因為上面已經把出了鏡像的所有容器和volume刪除了,所以是比較干凈的環境了

      文件不是沒有同步,是mongo這個容器中掛載了3個volume,2個是自動掛載的,自己掛載的那個volume,連容器數據source的地址里面都沒有數據,不知道自己進入該容器,添加的數據去了哪里

       

       

       

       

       

       

       

       

       

      //docker命令行學習
      查看某個命令的所有子命令,例如 docker volume|container|image|network --help :查看數據卷,容器,鏡像,網絡的具體命令,如何查看某個命令的詳細參數,例如docker volume ls --help【就是一步一步添加子命令】
      volume要刪除,首先要刪除對應的container,container要刪除,首先要用“docker stop 容器名”來停止容器

       

      //關于volume
      目前volume的綁定有問題,沒有綁定到正確的volume上
      volume上的數據卷的生命周期一直持續到沒有容器使用它為止。
      volume數據卷的掛載模式:
      1.volume模式:如果volume是空【綁定的本地服務器地址內的數據為空】的而container中的目錄有內容,那么docker會將container目錄中的內容拷貝到volume中,但是如果volume中已經有內容,則會將container中的目錄覆蓋。
      2.bind模式:不管host目錄是否有值,都要覆蓋容器映射的目錄【這個就保證了容器內永遠都是服務器下的本地數據,用來做數據庫本地化最合適不過】
      3.tmpfs模式:臨時模式,容器停止允許,就會自動刪除


      單獨創建volume:sudo docker volume create --name 數據卷名稱
      在服務器訪問沒問題后,就可以配置域名解析了:https://console.dnspod.cn/dns/cgclubs.com/record頁面配置域名,把域名和ip綁定,順便申請免費的ssl

       

       

       

       

       


      1.配置yml文件[可以直接用本地已經生成的image,也可以用build命令執行對應的dockerfile來生成鏡像,建議用dockerfile]
      2.執行docker-compose up -d來創建對于的鏡像和容器【鏡像和容器都會創建】
      第一次執行這個命令,如果yml里面的鏡像使用dockerfile,會根據這個dockerfile自動打包image,再生成對應容器;但是第二次執行命令,不會再通過dockerfile重新構建鏡像,只會修改yml里面設置的變量
      所以要修改鏡像文件,得先刪除原來的鏡像,然后再重新執行docker-compose up -d


      完整的流程是:yml通過dockerfile和內部文件的設置構建一個完整的多容器組合應用,里面的每個容器都通過build命令執行dockerfile來構建image,每個image的dockerfile都不一樣

      進入docker下的mongo容器下的admin數據庫:docker exec -it gp-database mongo admin
      在里面創建自己的gpclubs數據庫:use gpclub


      docker network inspect bridge查看當前名字bridge的網絡下的設置:結構如下
      [
      {
      "Name": "bridge",//網絡名稱是bridge
      "Id": "7e66d9ecf13d0acf2bea1dfc824e128c4d23f46a8a5e9f1c14a9fe05446ce3f9",
      "Created": "2022-08-24T02:12:08.3434776Z",
      "Scope": "local",
      "Driver": "bridge",//網絡類型是bridge
      "EnableIPv6": false,
      "IPAM": {
      "Driver": "default",
      "Options": null,
      "Config": [
      {
      "Subnet": "172.17.0.0/16",
      "Gateway": "172.17.0.1"
      }
      ]
      },
      "Internal": false,
      "Attachable": false,
      "Ingress": false,
      "ConfigFrom": {
      "Network": ""
      },
      "ConfigOnly": false,
      "Containers": {},//表示連接到這個bridge的容器,空對象表示目前沒有任何容器連接到這個bridge【網橋】
      "Options": {
      "com.docker.network.bridge.default_bridge": "true",
      "com.docker.network.bridge.enable_icc": "true",
      "com.docker.network.bridge.enable_ip_masquerade": "true",
      "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
      "com.docker.network.bridge.name": "docker0",
      "com.docker.network.driver.mtu": "1500"
      },
      "Labels": {}
      }
      ]


      docker network ls:查看所有網絡
      docker network rm 網絡名稱:刪除某個網絡
      docker network inspect 網絡名稱:查看某個網絡內的具體信息,包括這個網絡內有那些容器
      docker ps:查看所有容器列表【每個容器最左側有容器id】
      docker inspect 容器id:查看對應容器的詳細信息

      如果UI界面無法刪除docker,可以用docker rm -f 容器id 來強制刪除容器

      本地服務器和docker容器之間能否通信,可以用telnet命令來檢測,類似于ping,但是telnet可以添加端口,ping不能添加端口
      telnet命令:telnet ip 端口 【ip和端口之間用空格,不是冒號】,連接成功后,用ctrl+c來退出連接【如果不行,就用ctr+]嘗試退出】

       

      //刪除容器
      docker kill 容器名稱


      查看volume的掛載地址:sudo docker inspect id【這個id可以是任何docker容器,鏡像,volume等等實體】

      docker rm -v 可以把鏡像關聯的volume也一并刪除【如果volume掛載到指定主機目錄的,那么它永遠不會被刪除】

       

      查看所有用戶組:cat /etc/group

      //給某個賬戶添加docker權限
      sudo groupadd docker
      sudo gpasswd -a ubuntu docker
      sudo systemctl restart docker

       

      yml文件中的volume的參數命令格式:[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]
      基礎:volume掛載數據分bind【綁定模式】,volume【默認模式】,tmpfs【臨時模式】;其中bind和volume都包含host地址和container地址,host地址是數據本地地址,container地址是數據的容器地址
      因為容器本身會將自身的數據放在容器地址里面,容器移除了,對應的數據也會消失,所以需要一個本地化的host地址來保證數據的持久化,host地址的數據和容器內的數據時刻保持同步,容器內數據變動,host地址的數據也會同步
      關于數據的生命周期:
      host數據:一直存在,和容器內的數據同步;但是容器被刪除的時候,容器的數據跟著消失,但host的數據依然存在
      容器內的數據:如果是bind或者volume模式,這個volume數據會隨著容器的刪除而的消失,如果一個volume對應多個容器,那么需要所有引用它的容器被刪除,這個數據才會消失
      如果是tmpfs模式,容器停止允許,這個數據就會被刪除,不需要刪除容器


      HOST-DIR:服務器存放數據的地址,是本地化的數據
      CONTAINER-DIR:容器存放數據的地址,所有容器都會有一個默認的存放數據得地址,這里就是指定容器存放數據的自定義地址
      OPTIONS:權限等自定義設置,例如rw是讀寫,ro 是只讀
      如果指定HOST-DIR則必須是絕對路徑,如果路徑不存在則會自動創建

       

       

       

      //window下如何安裝docker
      0.啟動hyper-v:網上一大堆教程,hyper-v是win10系統下的虛擬機,但是對win10系統的版本有要求,家庭版的話比較麻煩,不過我還是搞定了,同時需要升級wsl2,我也通過教程搞定了
      啟動hyper前提是bios中要開啟硬件的“虛擬”功能
      1.用管理員權限打開PowerShell
      2.進入DockerFile文件所在的目錄,該目錄下還得有一個.dockerigonre的文件【用DockerFile構建鏡像的時候,需要忽略的文件都在.dockerigonre內設置】
      3.在DockerFile所在目錄下執行 docker build -t gpclub:v1 . 其中gpclub:v1是自己的項目名稱和版本號,其他都不變;最后構建成功后,在docker軟件里,就可以看到自己構建的image鏡像了【按照DockerFile+.dockerigonre構建的鏡像】
      4.這里有一點要特別注意,docker容器默認是關閉所有的端口的,默認開啟的端口在DockerFile里面的EXPOSE中設置,這個EXPOSE必須和node的端口保持一致,這樣外面才可以通過這個端口來訪問node服務器
      5.最最重要的一點是,外面訪問docker容器,訪問的默認網址是0.0.0.0,必須在node中把host設置成0.0.0.0【雖然docker也可以自定義網址,但沒必要】
      6.通過上面5步,就可以通過0.0.0.0網址下的EXPOSE設置的端口來訪問docker容器中的node,不過docker可以映射端口,就是把docker容器中的開放的端口【就是和node端口相同的那個端口】映射到本地服務器端口
      這樣就可以通過【localhost:本地端口】來訪問node服務器了

       


      如何查看docker版本:PowerShell執行docker -v查看版本20.10.17
      注意:docker文件的鏡像生成的時候,原來的文件夾是什么權限,那么一旦生成這個鏡像,由鏡像產生的容器內部的文件夾,和鏡像錄入的那個文件夾的權限,都是相同且一一對應的

       

      鏡像相關命令:
      構建鏡像:docker build -t runoob/centos:6.7 .
      -t: 后面更鏡像名稱
      runoob/centos:6.7是鏡像名稱,數字表示版本號,
      最后的.表示Dockerfile 文件所在目錄,也可以指定Dockerfile 的絕對路徑來代替.
      docker rmi:刪除鏡像


      容器相關命令:
      docker run:構建容器
      案例:docker run -it ubuntu /bin/bash
      -it是-i -t的簡寫,ubuntu是鏡像名稱【根據這個鏡像來生成容器】,/bin/bash表示創建完容器以后,需要執行的命令,這里我們希望有個交互式 Shell,因此用的是 /bin/bash
      -t:終端
      -i:容器交互
      -d: 容器后臺運行
      -P :是容器內部端口隨機映射到主機的端口。
      -p: 是容器內部端口綁定到指定的主機端口。【小寫是表示手動制定映射】:例如 docker run -d -p 4000:5000 training/webapp python app.py:意思是根據training/webapp鏡像創建一個在后臺運行的容器,端口映射是4000:5000,最后執行python app.py的內容
      --name:后面跟容器命名,如果沒有--name,容器會自動命名
      --rm:容器退出時自動清理容器內部的文件系統
      -h HOSTNAME 或者 --hostname=HOSTNAME: 設定容器的主機名,它會被寫到容器內的 /etc/hostname 和 /etc/hosts。
      -v 綁定volume,后面跟volume的需要掛載的絕對路徑,
      我們可以在宿主機的 /etc/docker/daemon.json 文件中增加以下內容來設置全部容器的 DNS:配置完,需要重啟 docker 才能生效。
      {
      "dns" : [
      "114.114.114.114",
      "8.8.8.8"
      ]
      }
      docker start | stop | restart | rm:分別表示啟動,停止,重啟,刪除容器,后面跟容器id
      docker exec:進入容器【退出后,容器不會停止運行】
      docker export | import :導出容器和導入容器
      docker ps:查看容器詳細詳細
      在運行的容器內使用 apt-get update 命令進行更新。


      docker-compose命令:
      docker-compose down :刪除所有在允許的容器
      docker-compose pull :更新鏡像內容 :如果遇到通過dockerfile構建的鏡像,需要自己docker-compose buld service名稱來手動執行構建鏡像【根據yml的對應service的名稱下的內容來構建】
      docker-compose up -d:根據鏡像創建容器,第一次啟動還會自動構建鏡像,然后再根據鏡像創建容器

       


      docker 的網絡相關命令
      docker network create:創建網絡
      docker network create -d bridge test-net:創建一個名為test-net的網絡,網絡通信類型是bridge
      -d: 后面跟網絡通信類型
      把創建docker容器和運行docker網絡組合在一起
      docker run -itd --name test1 --network test-net ubuntu /bin/bash :意思是根據ubuntu鏡像 ,創建一個“終端交互式且后臺運行的(-itd的意思)”名稱是test1的容器,該容器屬于 test-net網絡,最后執行/bin/bash
      docker run -itd --name test2 --network test-net ubuntu /bin/bash :類似,創建的是一個名為test2的容器,和test1屬于同一個網絡,所以可以相互通信【可以用ping來證明(首先得安裝ping)】

       


      !!!!!!!!容器內數據操作!!!!!!!!!!!
      編輯容器內文件:
      0.docker exec -it 容器id /bin/bash 進入容器編輯文件;然后按照下面三部,來執行容器內文件的修改
      1.同步源索引:apt-get update
      2.安裝vim:apt-get install vim
      3.輸入vim 文件名 即可編輯文件了

      容器內文件其他操作:比如查看之類的,就用 docker exec -it 容器名 ls
      docker exec -it 容器名 +正常的命令行 【“docker exec -it 容器名” 相當于進入了這個容器的命令行,接下來原來該怎么打命令,就怎么打命令】

      看容器內文件是否是最新,只要設置一個特殊名稱的文件即可,到時候通過docker exec -it 容器名 ls 來查看文件是否最新
      !!!!!!!!容器內數據操作!!!!!!!!!!!

       

      docker鏡像管理:docker hub,類似于github的代碼管理,可以把鏡像放到原創服務器【一般不需要原創管理】

      DockerFile和.dockerignore:用戶按照文件來創建鏡像,不需要一個個敲命令
      VOLUME:定義匿名數據卷。在啟動容器時忘記掛載數據卷,會自動掛載到匿名卷。【數據本地化】
      USER:用于指定執行后續命令的用戶和用戶組,這邊只是切換后續命令執行的用戶(用戶和用戶組必須提前已經存在)

      Docker Compose:定義和運行多容器 Docker 應用程序的工具,多容器的生成和通信,之間一鍵完成,一個webpapp只需要一個Docker Compose的yml就可以意見執行
      Docker Machine:管理多臺機器上的docker,一般分布式服務器和數據庫集群會用到,因為docker容器運行在不同的服務器主機上,我還用不上
      Docker Machine 管理的虛擬主機可以是機上的,也可以是云供應商,如阿里云,騰訊云,AWS,或 DigitalOcean。
      swarm:集群管理,和docker machine一起使用

       

       

       

      查看docker容器內部文件目錄:docker exec 容器名稱 ls
      查看docker容器內部某個文件的內部目錄:docker exec 容器名稱 ls 文件名|文件路徑
      如果想查看某個文件的權限,只要在后面添加 -ld【查看文件夾權限】 查看文件權限【-l】

       

       


      //docker 容器無法關閉,刪除的問題,提示permission denied

      posted @ 2024-11-03 21:48  挺禿然  閱讀(43)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 高台县| 久久热这里只有精品国产| 东京热人妻丝袜无码AV一二三区观| 亚洲国产五月综合网| 老熟妇乱子交视频一区| 宅男噜噜噜66在线观看| 午夜射精日本三级| 国产老妇伦国产熟女老妇高清| 久久久无码人妻精品无码| 少妇高潮尖叫黑人激情在线| 欧洲亚洲精品免费二区| 一本色道久久综合无码人妻| 综合激情网一区二区三区| 亚洲狠狠狠一区二区三区| 人人做人人爽人人爱| 尤物tv国产精品看片在线| 三上悠亚久久精品| 精品国产av一二三四区| 久久婷婷大香萑太香蕉AV人| 精品无码一区二区三区电影| 韩国午夜理伦三级| 午夜福利偷拍国语对白| 国产国产午夜福利视频| 亚洲福利精品一区二区三区| 国产成人亚洲欧美二区综合 | 国产精品一区二区久久精品无码| 亚洲中文字幕日产无码成人片 | 国产激情艳情在线看视频| 少妇高潮毛片免费看| 国产69精品久久久久久| 动漫AV纯肉无码AV电影网| 龙岩市| 少妇激情一区二区三区视频小说 | 国产真正老熟女无套内射| 国产精品乱码人妻一区二区三区| 免费无码一区无码东京热| 亚洲av色夜色精品一区| 亚洲 欧美 清纯 校园 另类| 亚洲熟女乱一区二区三区| 国产一区二区三区小说| 亚洲深深色噜噜狠狠网站|