docker容器技術


docker三大概念

容器三大基本概念
鏡像 image
容器 container
倉庫 repository
docker整個生命周期就是這三個概念。

docker鏡像

Docker鏡像就是一個只讀的模板。

例如:一個鏡像可以包含一個完整的CentOS操作系統環境,里面僅安裝了Apache或用戶需要的其他應用程序。

鏡像可以用來創建Docker容器。

Docker提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那里下載一個已經做好的鏡像來直接使用。

image的分層存儲

因為鏡像包含完整的root文件系統,體積是非常龐大的,因此docker在設計時按照Union FS的技術,將其設計為分層存儲的架構。
鏡像不是ISO那種完整的打包文件,鏡像只是一個虛擬的概念,他不是一個完整的文件,而是由一組文件組成,或者多組文件系統聯合組成。

docker容器(container)

image和container的關系,就像面向對象程序設計中的 類和實例一樣,鏡像是靜態的定義(class),容器是鏡像運行時的實體(object)。
容器可以被創建、啟動、停止、刪除、暫停
Docker利用容器來運行應用。

容器是從鏡像創建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的,保證安全的平台。

可以把容器看做是一個簡易版的Linux環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。

注意:鏡像是只讀的,容器在啟動的時候創建一層可寫層作為最上層。

docker倉庫(repository)

倉庫是集中存放鏡像文件的場所。有時候把倉庫和倉庫注冊服務器(Registry)混為一談,並不嚴格區分。實際上,倉庫注冊服務器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。

倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。

最大的公開倉庫是Docker Hub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括Docker Pool等,可以提供大陸用戶更穩定快讀的訪問。

當用戶創建了自己的鏡像之后就可以使用push命令將它上傳到公有或者私有倉庫,這樣下載在另外一台機器上使用這個鏡像時候,只需需要從倉庫上pull下來就可以了。

注意:Docker倉庫的概念跟Git類似,注冊服務器可以理解為GitHub這樣的托管服務。

docker Registry

Docker Registry 公開服務是開放給用戶使用、允許用戶管理鏡像的 Registry 服 務。一般這類公開服務允許用戶免費上傳、下載公開的鏡像,並可能提供收費服務 供用戶管理私有鏡像。

最常使用的 Registry 公開服務是官方的 Docker Hub,這也是默認的 Registry,並 擁有大量的高質量的官方鏡像。

除此以外,還有 CoreOS 的 Quay.io,CoreOS 相 關的鏡像存儲在這里;Google 的 Google Container Registry,Kubernetes 的鏡像 使用的就是這個服務。
由於某些原因,在國內訪問這些服務可能會比較慢。
國內的一些雲服務商提供了針 對 Docker Hub 的鏡像服務(Registry Mirror),這些鏡像服務被稱為加速器。常見 的有 阿里雲加速器、DaoCloud 加速器、靈雀雲加速器等。
使用加速器會直接從國內的地址下載 Docker Hub 的鏡像,比直接從官方網站下載速度會提高很多。在后 面的章節中會有進一步如何配置加速器的講解。
國內也有一些雲服務商提供類似於 Docker Hub 的公開服務。比如 時速雲鏡像倉 庫、網易雲鏡像服務、DaoCloud 鏡像市場、阿里雲鏡像庫等。

docker安裝

ce 社區版
ee 企業版

docker版本

Docker 是一個開源的商業產品,有兩個版本:社區版(Community Edition,縮寫為 CE)和企業版(Enterprise Edition,縮寫為 EE)。
企業版包含了一些收費服務,個人開發者一般用不到。本文的介紹都針對社區版。

環境准備

docker最低支持centos7且在64位平台上,內核版本在3.10以上
[root@oldboy_python ~ 10:48:11]#uname -r
3.10.0-693.el7.x86_64

安裝方式

1.卸載舊版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

2.設置存儲庫
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3.安裝docker社區版
sudo yum install docker-ce
4.啟動關閉docker
systemctl start docker

下載docker鏡像文件

1、配置docker加速器
    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
    這個命令是修改/etc/docker/daemon.json文件,寫入一個json數據如下
    [root@s20 ~]# cat /etc/docker/daemon.json
    {"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}這里不能有逗號,否則docker起動不了
    配置好了docker加速器,下載鏡像就快很多了
    改完需要重啟docker,不然下載不了鏡像文件systemctl restart docker
    【有逗號下載時的報錯信息】
    Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
2、下載centos的docker鏡像
    docker pull centos    #是取dockerhub 下載cnetos鏡像的

aliyun鏡像加速

管理容器

容器管理的重要點!!!

docker                         容器中必須有進程在后台運行,否則容器掛掉!!!
docker                         鏡像每次運行 都會生成新的容器id記錄
docker run centos         運行三次,出現三次容器新的記錄
【啟動容器】docker start 容器名/id
【停止容器】docker stop 容器名/id
【平滑啟動】docker restart 容器名/id
【運行容器】: 交互式容器:docker run -it --name=c1 centos:7 /bin/bash    使用centos7鏡像啟動一個容器並進入容器內  容器名為c1

   守護式容器:docker run -id --name=c2 centos:7 后台啟動一個容器 不進入容器 【這種方式創建容器,退出容器后,容器不會關閉】
         docker exec -it c2 /bin/bash      進入容器內   c2容器名

【進入容器空間內】:
    docker exec  -it   運行着的容器id    /bin/bash 
【刪除掛掉的容器】: docker rm 容器id
#刪除容器id記錄 docker rm `docker ps -aq` #批量刪除掛掉的容器 運行中的容器不能刪除
【查看容器日志】: docker logs 容器id docker logs -f 容器id # 監測容器內的日志
【殺死容器進程】: docker kill 容器進程id
【查看容器進程】: docker ps
#查看正在運行的容器進程 docker ps -a #顯示所有運行過的容器進程(正在運行的,以及掛掉的容器進程) docker container ls -a #同上,舊的命令
【提交容器】:
  # 自定義軟件后,退出容器,提交這個容器,成為一個新的鏡像
  docker commit 容器id  新的鏡像的名字
  docker commit 5c2  s20/centos-vim

【查看容器信息】
  dcoker inspect  容器名稱
【在容器的后台運行一個進程,運行出活着的容器】: docker run
-d centos /bin/sh -c "while true;do echo 'hello'; sleep 1;done" -d 就是daemonize 后台運行的意思 centos 指定哪個鏡像 /bin/sh 指定linux的解釋器 -c 指定一段shell代碼 "while true;do echo 'hello'; sleep 1;done" #每秒打印一個

我們在輸入容器id的時候只需要輸入前三位即可

鏡像管理

【搜索鏡像】:
    docker search centos  #去docker hub 搜索有關centos的鏡像文件
【下載鏡像】: 
    docker pull centos       # 下載docker鏡像 centos
    docker pull hello-world  # 獲取一個hello-world鏡像 
    docker pull ubuntu       # 獲取一個ubuntu鏡像
docker pull redis:5.0 # 下載指定版本號的鏡像文件
【查看本地鏡像】: docker images #查看本地有哪些docker鏡像 docker image ls #命令同上
docker images -q # 查看所有鏡像id 【刪除本地鏡像】: docker rmi 鏡像id/鏡像名 #刪除本地docker鏡像 docker rmi -f 鏡像id #強制刪除鏡像文件
docker rmi `docker images -q` # 刪除所有鏡像
【導出鏡像】: # 導出這個鏡像文件,指定導出的文件名和后綴 docker save 鏡像名/id > /opt/centos-vim.tar.gz 【導入鏡像】: docker load < /opt/centos-vim.tar.gz 【修改鏡像名字】: docker tag 鏡像id/鏡像名 以dockerhub倉庫id開頭的/新的鏡像名 docker tag 鏡像id/鏡像名 新鏡像名字 # 給ef9這個容器起的鏡像名字是henry/centos-vim docker tag ef9 henry/centos-vim

我們在輸入鏡像id的時候只需要輸入前三位即可

自定義docker鏡像

1.獲取一個centos基礎鏡像,運行處容器后
    docker run -it  centos /bin/bash  
2.進入容器空間內,默認沒有python3 和其他軟件
    進入之后,安裝一個vim
    yum install vim -y 
3.自定義軟件后,退出容器,提交這個容器,成為一個新的鏡像
    exit退出容器
    docker 
4.此時這個鏡像文件,可以發送給其他同事了
    docker commit 容器id  新的鏡像的名字
    docker commit 5c2  s20/centos-vim
    此時的鏡像文件是在docker容器內的,s20只是名字而已
5.查看提交的鏡像文件
    docker images     
6.導出這個鏡像文件,指定導出的文件名和后綴
    docker save 鏡像名/id > /opt/s20-centos-vim.tar.gz    
7.在本地測試導入這個鏡像
    # 導入命令
    docker load < /opt/s20-centos-vim.tar.gz
8.給導入的鏡像,修改tag別名
    docker tag 鏡像id/鏡像名  以dockerhub倉庫id開頭的/新的鏡像名 
    docker tag 鏡像id/鏡像名  henry163/centos-vim
    docker tag 鏡像id/鏡像名  新鏡像名字    
9.執行這個docker鏡像,運行容器后,查看是否攜帶了vim
    #語法
    關鍵字 關鍵字  參數   鏡像名   你要執行的命令
    docker run -it henry163/centos-vim  /bin/bash 

數據卷

概念:

配置數據卷

配置數據卷  docker run -it --name=c1 -v /root/data:/opt/datda_contailner  centos:7 /bin/bash   宿主機/root/data目錄掛載到容器/opt/data_contailner 【宿主機和容器通信 文件共享】

一個容器同時掛載多個數據卷    docker run -it --name=a1 -v /root/data1:/opt/data1 -v /root/data2:/opt/data2 centos:7 /bin/bash

兩個容器同時掛載同一個目錄   實現兩個容器的通信  
docker run -it --name=c1 -v /root/data:/opt/data  
docker run -it --name=c2 -v /root/data:/opt/data  【兩個數據卷中的文件共享】

數據卷容器:

c3也是個容器 c3掛載數據卷  c1,c2掛載c3   --->實現c1,c2,c3都掛載到同一個數據卷

配置數據卷容器

配置數據卷容器  
1、docker run -it --name=c1 -v /volume centos:7 /bin/bash           使用-v參數 設置數據卷    /volume(容器目錄) 如果不設置冒號左邊的目錄 docker會自動分配一個目錄
        
2、doeker run -it --name=c2 --volumes-from c1 centos:7 /bin/bash    將c2掛載到c1容器

3、doeker run -it --name=c3 --volumes-from c1 centos:7 /bin/bash    將c3掛載到c1容器

將打包好的鏡像上傳dockerhub

1、查看當前鏡像

docker images

 紅線框的是我們打包好的鏡像

2、登陸dockerhub賬戶

docker login

登陸成功

3、更改鏡像名稱

想要將鏡像上傳到dockerhub   鏡像的名稱必須遵守命名規則(賬戶名/鏡像名:版本號)

4、上傳到dockerhub

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM