docker-容器化技術與容器服務

文章目錄

Docker基礎學習

虛擬化技術

  • 多道程序與多用戶
    • 分時操作系統,把一臺大型機變成每個用戶擁有“虛擬機器”
  • 模擬器(Emulator),仿真器
    • 在 PC 上玩遊戲機的遊戲
    • 用模擬器實現跨系統交叉開發
  • 沙箱(SandBox)
    • 受控的、安全的程序執行環境。如微信小程序運行在微信的沙箱上訪問手機的資源。通常需要特定的編譯和解釋程序
  • 虛擬機(Virtual Machine)
    • 通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統
  • 容器(Container)
    • Linux 容器(Linux Containers,縮寫爲 LXC)
    • docker container

容器化技術

  • 容器技術 與 LXC
    • Unix 系統爲了實現多用戶的隔離,建立了豐富的 OS 級別虛擬化機制
    • LXC 是 Linux® Containers 簡稱,是 OS 虛擬化的集成與發展
  • Docker引擎隔離技術(進程級別隔離技術)
    Docker uses a technology called namespaces to provide the isolated workspace called the container.
    • namespace
      • pid namespace: 進程隔離 (PID: Process ID).
      • net namespace: 管理網絡接口(NET: Networking).
      • ipc namespace: 管理IPC資源訪問(IPC: InterProcess Communication).
      • mnt namespace: 管理文件系統掛載點 (MNT: Mount).
      • uts namespace: 隔離內核與版本識別 (UTS: Unix Timesharing System).
    • Control Groups: 限定容器內存等資源
    • Union FS 聯合文件系統
    • Container format 容器文件格式(OCF)
  • The use of Linux containers to deploy applications is called containerization.

Docker的優勢

  • 容器化爲什麼會流行
    • 靈活:即使是最複雜的應用也可以容器化。
    • 輕量級:容器利用並共享主機操作系統內核。
    • 可互換:您可以即時部署更新和升級。
    • 便攜式:您可以在本地構建,部署到雲,在任何地方運行。
    • 可擴展:您可以增加並自動分發容器副本。
    • 可組合:您可以自由地組合(stack)服務。

Docker核心概念

  • 鏡像(image) – 類比執行程序
    an executable package that includes everything needed to run an application–the code, a runtime, libraries, environment variables, and configuration files.
  • 容器(Container) – 類比進程
    a runtime instance of an image–what the image becomes in memory when executed (that is, an image with state, or a user process).
  • 倉庫(Registry)– 類比 repository
    存放不同版本鏡像的地方
  • 主機(Host / Node)
    運行容器的服務器
  • 服務(Service)
    一個鏡像之上運行的一組可伸縮的容器集合,運行在一個容器集羣中提供同一功能服務
  • 棧(Stack)/ 命名空間(Namaspace) / 應用(Application)
    被編排的、可伸縮的一組相互依賴的服務,構成的一個應用

實驗過程

本實驗在CentOS 7環境下進行

準備Docker環境

安裝下載

# 移除舊版本 Docekr
sudo yum remove docker*

# 設置 repository
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 使用阿里雲鏡像
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
   
# 不指定版本號 默認安裝最新版
sudo yum install docker-ce

檢查docker安裝
在這裏插入圖片描述
檢查是否啓動
在這裏插入圖片描述
運行第一個鏡像
在這裏插入圖片描述
在瀏覽器中打開localhost查看
在這裏插入圖片描述

Docker基本操作

運行鏡像

在這裏插入圖片描述
-it參數,使得我們可以通過終端與進程(容器)交互,stdin,stdout,stderr定向到 TTY
顯示本地鏡像庫內容
在這裏插入圖片描述
可以看到本地鏡像庫有最開始創建的httpd
獲得幫助
在這裏插入圖片描述

  • Options基本選項,-D(debug)、-H(host list)等
  • Management Commands用於管理的命令,docker、images、volumes等
  • Commands常用命令, attach(連接指定運行鏡像)、create(創建一個新的容器但不啓動)等

顯示運行中容器
)在這裏插入圖片描述
顯示所有容器(包含已終止)
在這裏插入圖片描述
繼續進行原容器並進入
在這裏插入圖片描述

MYSQL與容器化

拉取MYSQL鏡像
在這裏插入圖片描述
查看images是否包含MYSQL鏡像
在這裏插入圖片描述
MYSQL容器構建文件Dockfile

 FROM ubuntu
 ENTRYPOINT [“top”, “-b”]
 CMD ["-c"]

構建鏡像
在這裏插入圖片描述
運行鏡像
在這裏插入圖片描述
啓動服務器
在這裏插入圖片描述
啓動MYSQL客戶端
在這裏插入圖片描述
使用MySQL容器(掛載卷保存db)
數據庫文件在哪裏?
# docker exec -it mysql2 bash(我忘了截圖了這裏)
Dockerfile 的 VOLUME /var/lib/mysql 的含義
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
每次啓動 mysql 容器,docker 創建一個文件卷掛載在容器內/var/lib/mysql位置,這個卷在主機(host)的 /var/lib/docker/volumes/ 目錄下

創建卷並掛載
在這裏插入圖片描述
這裏沒有暴露端口到主機,將自己定義的數據卷掛載在/var/lib/mysql

啓動客戶端容器鏈接服務器
在這裏插入圖片描述
這裏使用了–link鏈接兩個容器,客戶端容器內可以使用mysql這個別名訪問服務器
在這裏插入圖片描述

  • 掛載現有數據庫官網案例:
    docker run -v "$PWD/data":/var/lib/mysql --user 1000:1000 --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
  • 修改容器配置官網案例
    docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

Docker compose 與多容器應用自動化部署

從github上下載docker-compose二進制文件安裝

  • 下載最新版的docker-compose文件
    sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-uname -s-uname -m-o /usr/local/bin/docker-compose
  • 添加可執行權限
    sudo chmod +x /usr/local/bin/docker-compose
    測試安裝結果
    docker-compose --version
    在這裏插入圖片描述

編寫:stack.yml

version: '3.1'
services:
  db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

啓動服務
在這裏插入圖片描述

Docker網絡

管理容器網絡
在這裏插入圖片描述
備制支持 ifconfig 和 ping 命令的 ubuntu 容器
照着課件指令做就可以

~]# docker run --name unet -it --rm ubuntu bash
root@48a255a95c37:/# apt-get update
…
root@48a255a95c37:/# apt-get install net-tools
root@48a255a95c37:/# apt-get install iputils-ping -y
root@48a255a95c37:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0
…
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
…
root@48a255a95c37:/# ping <your host ip>

在這裏插入圖片描述
可以看到本機ip爲172.17.0.3
在這裏插入圖片描述
可以ping通

啓動另一個命令窗口,由容器製作鏡像
在這裏插入圖片描述
創建自定義網絡
在這裏插入圖片描述
在兩個窗口創建 u1,u2 容器網絡,並使用以下命令

~]# docker run --name u1 -it -p 8080:80 --net mynet --rm ubuntu:net bash
~]#  docker run --name u2 --net mynet -it --rm ubuntu:net bash
~]# docker info u1
~]# docker network connect bridge u1
~]# docker network disconnect mynet u1

Docker 倉庫(Registry)

  • 訪問 阿里雲容器鏡像服務
  • 用淘寶或註冊一個賬號
  • 選擇“容器鏡像服務”
  • 常用倉庫操作:如上傳 hello-world 鏡像
    • 登陸 docker login --username=<your account> registry.cn-shenzhen.aliyuncs.com
    • 標籤 docker tag hello-world registry.cn-shenzhen.aliyuncs.com/pmlpml/repo:hello-world
    • 上傳 docker push registry.cn-shenzhen.aliyuncs.com/pmlpml/repo:hello-world
    • 下載 docker push registry.cn-shenzhen.aliyuncs.com/pmlpml/repo:hello-world
    • 標籤 docker tag registry.cn-shenzhen.aliyuncs.com/pmlpml/repo:hello-world hello-world
    • 刪除 docker rmi registry.cn-shenzhen.aliyuncs.com/pmlpml/repo:hello-world
    • 運行 docker run --rm hello-world
    • 退出 docker logout registry.cn-shenzhen.aliyuncs.com

docker登陸
在這裏插入圖片描述

標籤、上傳、下載、刪除、運行、退出
在這裏插入圖片描述

容器監控與與日誌

檢查docker的狀態
在這裏插入圖片描述
在這裏插入圖片描述
容器詳細信息
在這裏插入圖片描述
容器日誌查看
在這裏插入圖片描述

實驗思考

Docker 技術與傳統的 Linux 容器:
輕量級 虛擬化 這一功能來看,LXC(Docker基於此構建) 非常有用,但它無法提供出色的開發人員或用戶體驗。除了運行容器之外,Docker 技術還具備其他多項功能,包括簡化用於構建容器、傳輸鏡像以及控制鏡像版本的流程。
傳統的 Linux 容器使用 init 系統來管理多種進程。這意味着,所有應用都作爲一個整體運行。與此相反,Docker 技術力爭讓應用各自獨立運行其進程,並提供相應工具,幫助實現這一功能。這種精細化運作模式自有其優勢
Docker與Docker-compose:
dockerfile可以配置運行一個容器,但是docker-compose可以一條命令運行多個配置的容器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章