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 企業版python

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鏡像的

管理容器

容器管理的重要點!!!

docker                         容器中必須有進程在後臺運行,不然容器掛掉!!!
docker                         鏡像每次運行 都會生成新的容器id記錄
docker run centos         運行三次,出現三次容器新的記錄
【運行容器】:
    docker  run  鏡像名/鏡像id 
    #參數解釋  -i  交互式的命令操做 -t 開啓一個終端界面  /bin/bash  指定linux的解釋器 
    docker run -it  centos /bin/bash  # 交互式的運行一個centos容器
【進入容器空間內】:
    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
【在容器的後臺運行一個進程,運行出活着的容器】: 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 images    #查看本地有哪些docker鏡像
    docker image ls  #命令同上
【刪除本地鏡像】:
    docker rmi  鏡像id/鏡像名       #刪除本地docker鏡像 
    docker rmi -f  鏡像id              #強制刪除鏡像文件

【導出鏡像】:
    # 導出這個鏡像文件,指定導出的文件名和後綴
    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 
相關文章
相關標籤/搜索