中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker系統學習

發布時間:2020-05-15 09:26:00 來源:億速云 閱讀:201 作者:Leah 欄目:系統運維

這篇文章給大家分享的是學習docker系統的知識總結,相信大部分人都還不熟悉docker系統的各項操作,這篇文章不僅包含docker系統的概念還詳細講述了操作步驟,一起往下看吧。

下載地址
http://www.linuxidc.com/Linux/2014-01/95513.htm
根據上面安裝之后,啟動不起來。yum update device-mapper*  之后啟動ok.

linux與docker版本的兼容性問題
uname -r
yum update
yum remove docker  docker-common docker-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install docker-ce
systemctl start docker
systemctl enable docker
docker version

鏡像刪除不了辦法:

  1. cd  /var/lib/docker/image/overlay2
  2. cat repositories.json
    {"Repositories":{}}
  3. rm imagedb/content/sha256/*
  4. rm layerdb/sha256/*
  5. systemctl restart docker

概念

  hostos:宿主機操作系統
  guestos:虛擬機操作系統 

一、主機級別虛擬化

1.完全虛擬化:vmware,kvm,xen(hvm)

|---guestos--------------|
|--------vmm-------------|
|----------hostos--------|
|------------hardware----|

2.半虛擬化:xen,uml
  hypervisor(vmm)直接運行在硬件層

|---guestos(modfiled)----|
|--------vmm-------------|
|------------hardware----|     

3.模擬:qemu

二、用戶空間虛擬化(容器)

lxc,openvz,solaris containers,freebsd jails

三、庫虛擬化

wine cygwin

四、應用程序虛擬化

jvm,pvm

用戶空間虛擬化(容器)
chroot+6個名稱空間+cgroups=容器

lxc,openvz,solaris containers,freebsd jails

隔離:namespace名稱空間

    uts(主機名域名),mount,ipc,pid,user,net
    其中user是內核3.8以后才加進內核

control groups(cgroups):是Linux內核提供的進程資源限制機制,對資源進行分組。

lxc-linux container
docker 是lxc的增強版

分層聯合掛載:每層都是只讀,比如系統一層,應用一層。每層疊加放入容器。寫的時候在頂層加一層可以讀寫層。刪只讀層東西就是標記不可見。每個容器共享只讀層。
遷移,容器內部不要保存有效數據,需要的話掛載外網分布式系統。

基礎用法
docker 架構:c/s架構

他們直接通信使用https/http 默認https.
client:docker build
docker pull
docker run

docker host: docker deamon
containers
images

registry: 認證+倉庫+其他 組成
倉庫:倉庫名+標簽唯一標識一個鏡像(nginx:1.1/nginx:latest;nginx:1.0/nginx:stable)

鏡像:靜態
容器:動態,有生命周期

docker 對象:images,containers,networks,volumes,plugins 這些對象都可以增刪改查。

安裝:內核3.10+ 必須大于3.8
yum install docker-ce  #注意,使用extras里的是yum install docker
systemctl start docker.service
配置文件:/etc/docker/daemon.json

docker鏡像加速:
docker cn
阿里云加速器
中國科技大學
cat /etc/docker/daemon.json 顯示如下內容:

  { 
     "registry-mirrors":["https://registry.docker-cn.com"]
  }

docker命令:
格式1: docker 命令
格式2:docker 分組 命令

  docker version
  docker info
  docker search nginx
  docker image pull nginx:1.14-alpine
  docker image ls 
  docker image ls --no-trunc #顯示完整image id信息
  docker image rm  nignx:1.14-alpine # docker rmi

  docker containers create
  docker containers start
  docker containers stop
  docker containers kill
  docker containers rm
  docker containers run #創建并運行

  docker run [options] image [command line] [arg..]
  docker run --name wbl -it busybox:latest   #i,t是終端交互模式
  docker run --name wbl2 -d busybox:latest   #-d是后臺運行模式
  docker network ls
  docker ps   #查看容器列表
  docker ps -a  #查看停止后的容器列表
  docker container ls
  docker container ls -a
 docker run -a  # -a, --attach=[], 登錄容器(必須是以docker run -d啟動的容器)

  docker inspect wbl  #查看容器詳細信息
  docker start -ai wbl #a是attach,i是交互。啟動容器

  docker kill wbl  #相當于-9
  docker rm wbl    #刪除

#注意:容器中程序不能運行在后臺,否則會終止

  docker exec -it wbl /bin/sh  #進入正在運行的容器
  docker logs wbl              #查看容器里日志,容器里進程日志不存文件而是輸出到控制臺。

鏡像介紹:
docker鏡像含有啟動容器所需文件系統及其內容。用于創建啟動鏡像。
docker鏡像采用分層機制:bootfs和rootfs
bootfs:是引導文件系統,包括bootloader和kernel,容器啟動完成后就卸載了。
rootfs: 在bootfs之上,表現為docker容器的根文件系統,掛載為只讀模式,而后通過聯合掛載一個外掛載可寫層。
啟動時候先從底層一層層聯合掛載,只讀的并是與其他容器共享的。最頂層是可寫層。刪除容器時可寫層一并刪除。

  聯合掛載需要專用分層文件系統:aufs,overlayfs,overlay2fs,btrfs,devicemapper
  docker info 可以查看存儲類型
  啟動容器時,docker daemon 會試圖從本地獲取相關鏡像,本地鏡像不存在,將從registry中下載該鏡像并保存到本地。

  docker client -----http----> docker daemon ----https-> docker registry
  docker registry分類:
                 sponsor registry:第三方,供客戶和docker社區使用
                 mirror registry: 第三方,只讓客戶使用
                 vendor registry: 由發布docker鏡像的供應商提供
                 private registry: 自建的有防火墻的安全的私有實體提供的。

 registry 組成:
          1)repository
             一個registry有多個倉庫,一個倉庫可以分為頂層倉庫(比如nginx)和用戶倉庫(wbl/nginx),每個倉庫還可以有多個tag
          2)index
            維護用戶賬戶,鏡像的校驗以及公共信息。為registry提供用戶檢索功能。

 docker registry中鏡像通常有開發人員制作,而后推送公共或私有registry保存,以供其他人員使用。
 docker hub功能:
        image repositories:
        automated builds: 可以基于dockerfile;也可以commit
        webhooks:
        organizations:
        dcoker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
        git -> git hub -> docker hub -> docker repository 
        其他鏡像倉庫:quay.io : docker pull quay.io/coreos/flannel

鏡像生成途徑:
dockerfile
基于容器制作
docker hub automated builds

        dockerfile------------build---------> images ----------push-------> docker registry
                                              images <---------pull-------- docker registry
                                              images ----------save--------> backup.tar
                                              images <----------load-------- backup.tar
                                              images -----------run--------> container
                                              images <----------commit------ container

       基于容器制作:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
                    docker commit -p wbl nginx/wbl:v1.1.1   #-p 是暫停
                    docker commit -a "wbl" -c 'CMD ["/bin/httpd","-f","-h","/data/www"]' -p 基于鏡像名  新鏡像名和tag

      push到docker-hub:
                   docker login -u wbl1232002a
                   [root@iZj6chmozc373fzvc4vs9sZ docker]# docker image ls
                   REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
                   nginx/wbl           v.wbl.1             219619953381        2 days ago          16.8MB
                   nginxdemos/hello    latest              aedf47d433f1        18 months ago       16.8MB

                   docker tag nginx/wbl:v.wbl.1 wbl1232002a/nginx-wbl:v.wbl.1   #注意上傳的倉庫名需要和docker-hub一樣。
                   docker push wbl1232002a/nginx-wbl

      鏡像的導入和導出:docker save  和 docker load                      
                       docker save -o aaa.gz  image1 image2
                       docker load -i aaa.gz

docker網絡

     docker network ls   #查看docker的網絡模式,橋接,僅主機
     docker network inspect bridge
     查看網卡相關命令:ifconfig ; brctl show ; ip link show #yum install bridge-utils

     疊加網絡 overlay network :使用隧道技術,在原有包外再封裝一層物理網卡的包。

  bridge 橋接模式:
     docker 啟動后會創建一個docker0的交換機默認是橋接模式,還會默認配置好ip。docker創建容器后,會分配一對網卡,一半連接容器,一半連接docker0交換機。
            并且自動修改防火墻添加nat

            容器 eth0---->vethxx docker0 (nat)-----> 物理機網卡ip   #開啟ip forward

  host模式: 容器共享宿主機的物理網卡ip,容器里的ip就是外網物理ip
    user,mount,pid    
                    ---> 共享(宿主機)的uts,net,ipc  
    user,mount,pid 

 container模式:       
    user,mount,pid    
                    ---> 共享(容器)的uts,net,ipc 
    user,mount,pid 

 封閉模式none: 容器沒有network namespace,只有lo口。保證的容器的安全。

 ip命令:ip netns help
         ip netns add r1           #創建一個網絡命名空間名字是r1
         ip netns exec r1 ifconfig -a #在r1里執行命令查看網卡信息

         ip link help
         ip link show
         ip link add name veth2.1 type veth peer name veth2.2  #創建一對網卡

         ip link set dev veth2.1 netns r1   #將網卡veth2.1 移到網絡命名空間r1
         ip netns exec r1 ifconfig -a
         ip netns exec r1 ip link set dev veth2.1 name eth0 #更改namesapce r1里網卡名稱
         ip netns exec r1 ifconfig eth0 192.168.5.1/24 up

docker 命令參數 暴露端口

bridge橋接模式:
   docker port wbl  #顯示指定容器的映射。
   docker -p #映射容器端口到物理端口地址 -p 80 容器80映射到物理網卡隨機端口。
   docker -P #大P,將容器所有要暴露端口全部映射到主機端口。容器是80,宿主機就是80.
   docker run wbl:v.1 --name wbl2 -p hostip::80   #映射物理ip端口隨機 到容器的80
   docker run wbl:v.1 --name wbl2 -p hostip:80:80  #映射物理ip端口80 到容器的80
   docker run wbl:v.1 --name wbl2 -p 80:80  #映射物理所有ip端口80 到容器的80

host模式:
docker run wbl:v.1 --name wbl2 --network host

container模式:
docker run wbl:v.1 --name wbl2 --network container:wbl1  #共享容器wbl1的網絡命名空間

none:
docker run wbl:v.1 --name wbl2 --network none

修改docker0橋默認的ip地址: vi /etc/docker/demon.json  
{
"registry-mirrors" : ["https://registry.docker-cn.com"],
"bip" : "192.168.74.1/24",
"hosts" : ["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"
}
systemctl daemon-reload
systemctl restart docker
重啟docker 服務器即可。
自定義網絡模式:

  1. 創建網絡
    docker network create wbl --subnet 192.168.75.0/24  #網關默認就是第一個ip
  2. 使用網絡
    docker run -tid --name t8800 --network wbl nginx:v.8800

存儲卷

cow:寫時復制 ,就是在修改寫入只讀層數據時候,先復制數據到可寫層,然后修改數據。

刪除數據:就是標志只讀層數據為刪除。然后用戶層不可見。

為什么使用volume:

  1. 關閉并重啟容器,數據不受影響,但是刪除docker容器,則其更改會全部丟失。
  2. 存儲于聯合文件系統中,不易于宿主機訪問。
  3. 容器之間數據共享不便
  4. 刪除容器數據丟失
    解決方案:使用卷volume
    通過外部掛載到容器目錄方式。

    volume卷類型:

  5. 手動創建容器和宿主機的目錄,并掛載
  6. 手動創建容器目錄,docker自動管理掛載宿主機目錄。/var/lib/docker/vfs/<some volume>
    這種方式,如果刪除容器后再啟動,docker再次自動掛載的目錄可能和上次不一樣。因此數據不一樣。

    命令:
    docker run -it --name wbl123 -v /data nginx:v1.1   #-v 指定容器目錄,自動創建宿主機上的卷并掛載
    docker run -it -v 宿主機dir:容器dir --name wbl123 nginx:v1.1  #手動指定方式;兩邊目錄不存在都會自動創建;hostdir 是宿主機目錄:容器目錄
    docker inspect -f {{.Mounts}} wbl123   #查看詳細內容,-f是指定,過濾意思                
    docker run -it --rm --name wbl0 -v /data/wbl0:/data/wbl0 nginx-wbl:v8800 ls /data

    sharing volumes復制其他容器的卷:
         docker run -it --name wbl1 -v /wbl:/data nginx:v.1.1
         docker run -it --name wbl3 --volumes-from wbl1 nginx:v.1.1
    
         docker run -it --name wbl4 --network container:wbl --volumes-from wbl1 nginx:v.1.1 #可以使用一個容器做基礎容器。只有存在就好。

Dockerfile: 命令 docker build #docker build -t wbl:v.1 .
前導:
想改變nginx的配置文件三種方式:{1:進入容器修改;2:容器的掛載卷使用宿主機;3:自己制作鏡像}
自己制作鏡像有兩種方式:{1:基于容器自制鏡像;2:基于Dockerfile自制鏡像}

        dockerfile格式:{指令:參數}#指令不區分大小寫,但是潛規則都是大寫。

        工作邏輯:
            創建一個專用工作目錄wbl; wbl目錄里要有文件Dockerfile(首字母必須大寫,沒有后綴),所有文件都需要放入wbl目錄不能是wbl的父目錄。
            隱藏文件.dockeringore可以排除目錄文件,一行一個,可以使用通配符。

        docker build: 基于wbl目錄里的基礎鏡像和文件,隱藏啟動一個容器,然后制作成新的鏡像,和人工制作鏡像雷同。

  docker 指令:

        FROM: 必須為dockerfile第一個非注釋行,引用基于哪個基礎鏡像來制作鏡像。后續所有指令運行都是基于此鏡像提供的環境。
              docker build的時候它會先在主機本地查找,不存在會從docker hub registry拉取

              語法:FROM 倉庫名:tag #沒有tag就是latest
                   FROM 倉庫名@digest   #為了安全使用hash碼

        MAINTAINER: 作者信息
        LABEL: 高版本代替maintainer 
               LABLE  KEY=VALUE  #LABLE maintainer="wbl"

        COPY: 從宿主機的當前wbl目錄里的文件復制到創建的新鏡像中
              COPY aaa   /data/aaa2
              COPY ["aaa","/data/aaa2"]   #目標使用絕對路徑,否則,COPY指定以WORKDIR為起始路徑;源文件是目錄的話,子目錄和文件會遞歸復制,但是目錄本身
                                          # 不會復制
                                          #如果源目錄是多個或者使用通配符,目標必須是目錄,并且以/結尾
                                          #如果目標目錄不存在,會自動創建

        ADD: 類似COPY,支持打包壓縮和url路徑。

             例如: ADD  http://www.aaa.com/a.tar.gz  /data/wbl/  #a.tar.gz 會下載到/data/wbl 目錄下,不展開
                    ADD  a.tar.gz  /data/wbl/    #a.tar.gz 會自動解壓展開到/data/wbl目錄下。

       WORKDIR:/data/wbl           # ADD a.tar.gz  ./   workdir相當于根路徑

       VOLUME:鏡像里的哪個掛載路徑到宿主機上  # VOLUME /data/wbl   意思是把容量里/data/wbl目錄 的卷使用的是宿主機的卷。docker inspect 查看

       EXPOSE:指定暴露給外部的端口。只有指定了之后,在啟動容器時候加-P才可以暴露出去。
               一次可以指定多個端口
              EXPOSE 11211/udp 11211/tcp  #不加協助默認tcp

       ENV: 定義環境變量
            ENV key value #wbl=123   ;如果value包括空格,可以\轉義,也可以對value加引號,另外\也可以續行
            ENV key=valude #wbl 123 456   ; 123 456 都是變量 調用${wbl}

            EVN DOC_ROOT=/data/wbl/ \
                NAME=wbl

            啟動容器時候,可以傳入變量
           docker run --name wbl --rm -P 鏡像名  printenv   #打印環境變量
           docker run --name wbl --rm -P -e NAME="WBL2" 鏡像名  printenv

      文件----docker build{RUN}---->image ------docker run{CMD}------>容器 #RUN是生成鏡像時候運行命令。鏡像生成后運行為容器時候RUN里命令不再執行的。CMD會執行。

      RUN: 使用在制作鏡像的過程中所要運行命令,基于基礎鏡像環境的命令。
          語法:
               RUN commad
               RUN ["commad","param1","param2"]

          RUN COMMAND1 && \
              COMMAND2 
          RUN yum install -y lrzsz

          說明:第一種通常是一個shell命令,以"/bin/sh -c"運行它,在容器進程pid不為1,不能接收unix信號,docker stop 停止容器時,此進程接收不到信號。
                第二種是json格式數組,這種格式命令不會以/bin/sh -c 發起運行。因此常見shell操作比如通配符不會起作用。想使用shell操作可以使用下面寫法
                RUN ["/bin/bash","-c","commad","param1"]

      CMD: 類似RUN,啟動容器指定默認要運行程序,且運行結束后容器也終止,CMD指定命令會被docker run的命令選項覆蓋。

           和RUN的區別是:{1,運行時間點不同(RUN是docker build成鏡像時候運行;CMD是docker run成容器時候執行,這個時候RUN里運行命令已經生成靜態的鏡像了。);
                           2,運行命令次數不同(RUN可以多次,CMD只有最后一次生效)}

          語法:CMD command
                CMD ["command","param1","param2"]
                CMD ["param1","param2"]

          第三種用于為ENTRYPOINT指令提供默認參數         

ENTRYPOINT: 類似CMD,為容器指定默認運行程序,與CMD不同的是,ENTRYPOINT啟動進程不會被docker run 命令指定參數覆蓋,并且會被當做參數傳給ENTRYPOINT指定程序。
注意:docker run --entrypoint 可以覆蓋ENTRYPOINT指定的程序。
docker run 命令傳入參數會覆蓋CMD的內容并當ENTRYPOINT命令的參數。
Dockerfile文件可以用多個ENTRYPOINT,但只有最后一個生效。
ENTRYPOINT ["ls"]

     USER: 

     HEALTHCHECK: 健康檢查

                 HEALTHCHECK --interval=35s  CMD curl http://ip:8090/test.html
                             --interval=35s  #檢查間隔,default:30s
                             --timeout=35s   #超時.default:30s
                             --start-perid=15s #容器起來之后15秒開始檢查,default:0s
                             --retries=2     #重試幾次,default:3
                 命令返回值:
                           0:success
                           1:unhealthy
                           2: 保留,不使用
                 example:
                          HEALTHCHECK --interval=5m --timeout=3s \
                                      CMD curl http://ip:8090/test.html || exit 1

     SHELL: 指定使用的shell,默認 /bin/sh -c

     STOPSIGNAL: 語法:STOPSIGNAL 9  #默認是15

     ARG:適用于build time 時候傳入參數
         ARG aaa
         ENV  WBL2=${aaa:-/data/wbl1/wbl2}           
          docker build --build-arg aaa="/data/wbl1/wbl3" -t  鏡像名:v.1.1  ./  

     ONBUILD: 在dockerfile中定義一個觸發器;自己在用dockerfile制作鏡像時候可以添加觸發器,在其他人使用這個鏡像做其他dockerfile的基礎鏡像時候被觸發。
              除了FROM,MAINTAINER和ONBUILD之外其他所有指令可以使用。
              命名標簽如 ruby:2.0-onbuild
              注意:使用ADD COPY 小心人家那邊沒有那個文件。

              語法: ONBUILD COPY a b  #命令是dockerfile的指令。

實例:
[root@izj6chmozc373fzvc4vs9sz build-image]# cat Dockerfile
FROM nginx-wbl:v8800
MAINTAINER wbl:test.1
ARG AAA
ENV WBL2=${AAA:-/data/wbl1/wbl2}
RUN mkdir -pv $WBL2
#VOLUME $WBL2
COPY h.txt $WBL2
ADD zzz.tar.gz $WBL2
CMD ["/bin/sh"]
#ENTRYPOINT ["ls"]
[root@izj6chmozc373fzvc4vs9sz build-image]# ls
Dockerfile  h.txt  zzz.tar.gz
[root@izj6chmozc373fzvc4vs9sz build-image]# docker build -t nginx-wbl:v8801

以上就是docker系統的知識匯總,內容較為全面,小編相信有部分知識點可能是我們日常工作可能會見到或用到的。希望你能通過這篇文章學到更多知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

唐山市| 萨迦县| 东乌珠穆沁旗| 车险| 崇礼县| 怀柔区| 都江堰市| 华亭县| 太康县| 虹口区| 嘉善县| 秦安县| 龙井市| 新竹县| 溧阳市| 晋城| 莲花县| 荔浦县| 兴业县| 安龙县| 南部县| 裕民县| 甘德县| 水城县| 江门市| 庄河市| 合阳县| 禹城市| 黑山县| 永登县| 三原县| 鹰潭市| 涡阳县| 长白| 南汇区| 紫阳县| 莒南县| 延长县| 静海县| 高要市| 陆河县|