kubernetes(二)之Docker容器及鏡像

容器及鏡像

容器

常見的容器狀態

  • running
  • stopped
  • paused
  • created
  • deleted

注意: 查看docker狀態使用的命令:html

  • docker ps: 查看running狀態的容器
  • docker ps -a: 查看全部狀態的容器
  • docker ps -qa: 查看全部容器ID
  • docker stop $(docker ps -qa) : 中止全部容器
  • docker rm $(docker ps -qa) : 刪除全部容器

docker run 命令的使用

常見的選項介紹:node

--name : 指定容器名稱
-i : 交互式運行和-t一塊兒使用,能夠合成-it使用
-t: 容許tty
-e : 設置容器啓動的環境變量,例如mysql的容器啓動須要指定-e MYSQL_ROOT_PASSWORD='12345'
-d: detach,後臺運行
--network: 指定網絡
--restart: always,
-p: 端口映射
-v: 指定存儲卷
--rm : 運行以後刪除,須要與-it配合使用,可是與-d互斥
-m : 限制最大使用內存
--oom-kill-disable :禁止oom
--cpus : 限定使用的CPU容量mysql

[root@centos7-node1 ~]# docker run --name redis -d redis:4-alpine

docker exec的使用

常見的選項介紹:linux

-d : 後臺運行
-e : 指定環境變量
-it: 交互模式
-u: 指定用戶
-w: 指定工做路徑nginx

[root@centos7-node1 ~]# docker container exec redis netstat -tanlp    #對容器執行命令
[root@centos7-node1 ~]# docker exec -it redis /bin/sh 
/data # redis-cli    #客戶端鏈接redis
127.0.0.1:6379> set hello my_name_is_wanghui
OK
127.0.0.1:6379> get hello
"my_name_is_wanghui"

容器的啓停

[root@centos7-node1 ~]# docker stop redis     # 未指定存儲卷的狀況下,中止容器以後數據會丟失
[root@centos7-node1 ~]# docker start redis

其餘實踐

[root@centos7-node1 ~]# docker image pull nginx:1.18-alpine
[root@centos7-node1 ~]# docker run --name web -it --rm nginx:1.18-alpine /bin/sh      #推出交互模式就自動退出並刪除容器
[root@centos7-node1 ~]# docker run --name web -d nginx:1.18-alpine
[root@centos7-node1 ~]# docker container exec web ifconfig    #獲取建立機器的ip
[root@centos7-node1 ~]# elinks -dump 172.17.0.3                     #訪問頁面
[root@centos7-node1 ~]# docker logs web -f                              #查看Nginx 滾動日誌
[root@centos7-node1 ~]# docker stats web                                #查看web這個容器運行時資源佔用狀況
[root@centos7-node1 ~]# docker top web                                   #查看web這個容器的進程狀態

[root@centos7-node1 ~]# docker run --name c2 -it centos:7
[root@f879de456c8d /]# 
[root@f879de456c8d /]# [root@centos7-node1 ~]#     `ctrl+p,ctrl+q`
[root@centos7-node1 ~]# docker ps    #c2是運行狀態的
[root@centos7-node1 ~]# docker attach c2     #進入容器

鏡像

簡介

docker鏡像含有啓動容器時所須要的文件系統及其內容,所以,其用於建立並啓動容器web

  • 採用分層構建機制,最底層爲bootfs,其次爲rootfs
    • bootfs: 用於系統引導的文件系統,包括bootloader和kernel,容器啓動完成後會被卸載,以此節約內存資源
    • rootfs: 位於bootfs之上,表現爲docker容器的根文件系統
      • 傳統模式中,在系統啓動時,內核掛載rootfs時會首先掛在爲只讀模式,完整性比肩完成以後從新掛載爲讀寫模式
        • docker中,rootfs由內核掛載爲只讀模式,然後經過聯合掛載技術,額外在掛載一個可寫層

docker鏡像的構建方式

  • 位於下層的鏡像稱爲父鏡像,最底層的是基礎鏡像
  • 最上層爲「可讀寫」層,其下的均爲「只讀」層

kubernetes(二)之Docker容器及鏡像

鏡像存放的graph driver類型(文件系統)

特色: 分層疊加,寫時複製(COW)
此文件系統是建構在底層操做系統文件系統之上用於存放鏡像的文件系統,建議底層支持操做系統務必使用xfs文件系統
分類以下:redis

  • Aufs: 高級多層統一文件系統
  • Overlay2
  • DeviceMapper(DM)
    kubernetes(二)之Docker容器及鏡像

    Aufs

  • 用於爲Linux文件系統實現聯合掛載
  • aufs以前是unionFS的從新實現,2006年由Junjiro Okjima開發
  • docker最初使用aufs做爲容器文件系統層,目前仍然做爲存儲後端之一來支持
  • aufs的競品是overlayfs,後者在3.18內核以後開始,被合併到linux內核
  • docker的分層鏡像,除了aufs,還支持btfs,devicemapper和vfs等
    • ubuntu下,docker默認的文件系統是aufs,而在cnetos7上,用的是devicemapper

Docker Registry

  • 啓動容器時,docker daemon會試圖從本地獲取相關鏡像,本地鏡像不存在時,其將從Registry中下載該鏡像並保存到本地
    kubernetes(二)之Docker容器及鏡像

docker registry的分類

Registry用於保存docker鏡像,包括景象的層次結構和元數據
用戶能夠自建Registry,也能夠使用官方的dockerhubsql

  • 分類以下:
    • Sponsor Restory:第三方的registry,供客戶和docker社區使用
    • Mirror Registry:第三方的registry,只供客戶使用
    • Vendor Registry: 由發佈Docker鏡像的供應商提供的Registry
    • Private Registry:經過舍友防火牆和額外安全層的私有實體提供的Registry

Docker Registry的組成

  • Repostorydocker

    • 由特定的docker鏡像的全部迭代版本組成的鏡像倉庫
    • 一個registry能夠存在多個Repostory
      • Registory能夠分爲頂層倉庫用戶倉庫
      • 用戶倉庫名稱更是爲用戶名/倉庫名
    • 每一個倉庫能夠包含多個Tag,每一個Tag只對應一個鏡像
  • Index: 維護用戶帳戶,鏡像的校驗以及公共命名空間信息,至關於爲Registry提供了一個擁護認證和檢索的接口

鏡像的製做 與推送

docker registry中的鏡像由開發或者運維人員製做,然後推送到「公共」或者「私有」Repostry上保存,供其餘人使用
例如: 部署到生產環境ubuntu

kubernetes(二)之Docker容器及鏡像

DockerHub的使用

  • 註冊DockerHub帳戶
  • 建立myimg倉庫
  • 上傳鏡像到dockerHub的myimg倉庫
[root@centos7-node1]# docker pull busybox:latest
[root@centos7-node1 ~]# docker run --name b1 -it -d busybox /bin/sh
/ # mkdir /data/web/html -p
/ # echo "<h1>this is a test page @busyboxServer</h1>" > /data/web/html/index.html
[root@centos7-node1 ~]# docker container commit b1 wanghui122725501/myimg:v0.1   #另起終端打包鏡像
[root@centos7-node1 ~]# docker images    #查看鏡像
REPOSITORY TAG IMAGE ID CREATED SIZE
wanghui122725501/myimg v0.1 baf6ad6a846f About a minute ago 1.22MB
[root@centos7-node1 ~]# docker run --name mybbox1 -it wanghui122725501/myimg:v0.1    #運行容器
/ # ls /data/web/html/     #此文件已被寫入文件系統
[root@centos7-node1 ~]# docker login    #登錄dockerhub
[root@centos7-node1 ~]# docker push wanghui122725501/myimg:v0.1    #推送鏡像
[root@centos7-node1 ~]# docker container commit -p -a "wanghui@yeecall.com" -c "CMD ['/bin/httpd -f -h /data/web/html']" b1 wanghui122725501/myimg:v0.2   #前臺運行httpd
[root@centos7-node1 ~]# docker tag wanghui122725501/myimg:v0.2 wanghui122725501/myimg:latest
[root@centos7-node1 ~]# docker push wanghui122725501/myimg:v0.2             #鏡像推送
-----另起終端,進入b1容器
[root@centos7-node1 ~]# docker exec -it b1 sh
/ # /bin/httpd -f -h /data/web/html/                  #執行httpd
[root@centos7-node1 ~]# curl 172.17.0.5    #另起終端執行
<h1>this is a test page @busyboxServer</h1>
[root@centos7-node1 ~]# docker commit -p -a "wanghui@yeecall.com" -c 'CMD ["/bin/sh","-c","/bin/httpd -f -h /data/web/html"]' b1 wanghui122725501/myimg:v0.4
[root@centos7-node1 ~]# docker run --name mytinyweb2 -d wanghui122725501/myimg:v0.4
相關文章
相關標籤/搜索