1、Docker入門簡介
Docker技術類似碼頭上看到的集裝箱,最早集裝箱沒有出現的時候,碼頭上有許多搬運的工人在搬運貨物,有了集裝箱以后,搬運貨物變得簡單,通過集裝箱的搬運模式更加單一、高效,將貨物打包在集裝箱里面,可以復制貨物之間相互影響,
如果要將貨物搬運到另一個碼頭就需要裝運,通過集裝箱,可以直接把它們運送到另一個航艙內,而且完全可以保證里面的貨物是整體地搬遷,而不會損壞貨物本身,
而Docker虛擬化正是基于類似的原理,將原本復雜的環境打包成為鏡像模塊,然后將模塊遷移到各個平臺,可以快速地交付使用,從而減少了人工大量的干預,
Docker是一個開源的應用容器引擎,開發者使用打包他們的應用以及依賴包到一個可移植的容器中,然后發布到如何流行的Linux機器上,進而實作虛擬化,
容器是完全使用沙箱機制的,而且互相之間不會有如何介面,幾乎沒有性能開銷,可以很容易地在機器和資料中心運行,最重要的是,他們不依賴于如何語言、框架或包括系統,
Docker虛擬化和傳統虛擬機(KVM、Xen等)方式的不同之處在于Docker虛擬化可以在作業系統層面上直接實作App或者虛擬化,直接復用本地機器的作業系統,而傳統方式則需要在硬體的基礎上,虛擬GurstOS作業系統,然后在GuestOS作業系統上部署相關的App應用,
Docker虛擬化實施有以下三個概念:
- Docker鏡像:Docker鏡像是一個靜態模塊,與常見的ISO鏡像類似,是一個樣板,不能直接修改,可以通過封裝生成;
- Docker容器:基于Docker鏡像運行啟動的應用或系統,稱之為一個Docker容器或Docker虛擬機;
- Docker倉庫:Docker倉庫是存放Docker鏡像的地方,常見分為公開倉庫和私有倉庫兩種形式;
Docker倉庫的用處:
Docker倉庫是Docker鏡像的存盤倉庫,可以推送鏡像到docker倉庫中,然后在docker客戶端,可以從docker倉庫中搜索和拉取鏡像,
Docker容器是如何作業的:
一個Docker容器包含了一個作業系統、用戶添加的檔案和元資料(meta-data),每個容器都是從鏡像建立的,鏡像告訴Docker容器內包含了什么,當容器啟動時運行什么程式,還有許多配置資料,Docker鏡像是只讀的,當Docker運行一個從鏡像建立的容器,它會在鏡像頂部添加一個可讀寫的層,應用程式可以在這里運行,
Docker用途:簡單配置、代碼流水管理、開發效率、應用隔離、服務器整合、多租戶、快速部署
2、Docker LXC及Cgroup
Docker虛擬化的由來需要從Docker發展歷史來看,最早的Docker技術為LXC+聯合檔案系統(AUFS)組合,Docker0.9.0版本開始引入libcontainer可以視作LXC的替代品,其中LXC負責資源管理,AUFS負責鏡像管理,而LXC包括Cgroup、Namespace、Chroot等組件,并通過Cgroups進行資源管理,
Docker、LXC、Cgroup三者的關系是Cgroup在最底層落食澩管理,LXC在Cgroup上封裝了一層,Docker又在LXC封裝了一層,
Cgroups最初的目標是為資源管理提供一個統一的框架,整合現有的Cpuset等子系統,也為未來開發新的子系統提供介面,
Linux container容器可以提供輕量級的虛擬化,以便隔離行程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他復雜性,容器有效地將由單個作業系統管理的資源劃分到獨立的組中,以便更好地在獨立的組之間平衡有沖突的資源使用需求,
3、Docker虛擬化特點
Docker虛擬化跟傳統虛擬化相比,有以下特點:
- 操作啟動快,運行時的性能可以獲取極大提升,管理操作(啟動、停止、開啟、重啟等)都是以秒或毫秒為單位的;
- 輕量級虛擬化,用戶會擁有足夠的“作業系統”,僅需添加或減小鏡像即可,單臺服務器上可以部署100~1000個containers容器,而傳統虛擬化能虛擬10~20個虛擬機就非常不錯了;
- 開源免費,成本低,由現代Linux內核支持并驅動;
- 前景及云支持,正在越來越受歡迎,各大主流公司都在推動Docker的快速交付;
- 更簡單的管理,使用Docker只需要小小的修改,就可以替代以往大量的更新作業,所有的修改都以增量的方式被分發和更新,從而實作自動化并且高效的管理;
4、Docker虛擬化原理
Docker虛擬化中最核心部分為Docker引擎,Docker引擎是一個C/S(client/server)機構的應用;
Docker server是一個常駐行程,rest API實作了client和server間的互動協議 ,CLI實作容器和鏡像的管理,為用戶提供統一的操作界面,Docker使用C/S架構,client通過介面與server行程通信實作容器的構建、運行和發布,client和server可以運行在同一臺集群,也可以通過跨主機實作遠程通信,
Docker鏡像作為Docker中最基本的概念,有以下特性:
- 鏡像分層:每個鏡像都由一個或多個鏡像層組成;
- 可通過在某個鏡像上加上一定的鏡像層得到新鏡像(此程序可以通過撰寫DockerFile或基于容器Commit實作);
- 每個鏡像層擁有唯一鏡像ID;
- 鏡像在存盤和使用時共享相同的鏡像層(根據ID),所以在Pull鏡像時,已有的鏡像層會在自動跳過下載;
- 每個鏡像層都是只讀的,即使啟動成容器,也無法對其真正的修改,修改只會作用于最上層的容器層,
Docker容器,可以理解為一個或多個運行行程,而這些運行行程將占有相應的記憶體、相應的CPU計算資源,則通過Docker鏡像的鏡像層檔案來提供,
基于每個鏡像的json檔案,Docker可以通過決議Docker鏡像的驚悚檔案,獲知應該在這個鏡像之上運行什么樣的行程,應該為行程配置怎樣的環境變數,Docker守護行程實作了靜態向動態的轉變,
5、Docker安裝配置-CentOS7.X系列安裝Docker軟體
sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config setenforce 0 yum -y install epel-release yum -y install docker* systemctl start docker
報錯:
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
解決辦法:
vi /etc/sysconfig/docker

systemctl start docker
systemctl enable docker
ps -ef |grep docker

Docker下載加速,默認docker下載是從國外去下載,但是下載速度慢,所有我們 這邊使用國內的:
cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://registry.docker-cn.com", "https://dockerhub.azk8s.cn", "https://reg-mirror.qiniu.com" ] } EOF systemctl restart docker
6、Dockers必備命令
公共倉庫Nginx和CentOS鏡像下載以及本地匯入CentOS鏡像,執行如下命令
docker pull centos :Docker下載CentOS鏡像

docker pull nginx :Docker下載Nginx鏡像

本地匯入鏡像:
格式:cat 本地容器快照名 | docker import-自定義容器名:自定義標記名
docker version :查看Docker版本

docker info :查看當前資訊

docker search centos :搜索可用Docker鏡像

docker search -s 500 nginx :搜索星級為500以上的鏡像

docker pull docker.io/nginx :下載nginx鏡像

docker images :查看當前Docker所有鏡像

啟動Docker鏡像:
-i:表示互動輸入 -t:表示打開終端 -d:表示后臺啟動
docker run -i -t centos /bin/bash

進入Docker容器:
docker exec -it a9ca644fd04f /bin/bash :紅色部分是容器的ID

退出Docker容器:
(1)exit或者ctrl+d :退出并停止容器
(2)先按ctrl+p再按ctrl+q :退出偽終端,容器后臺運行
docker ps :查看容器,-l獲得最后一個容器的ID,-a查看所有的容器

docker start id :啟動Docker容器,可以利用docker ps查看容器,然后輸入iD

docker stop id :關閉Docker容器

docker save -o centos-7.2.tar centos:latest :存盤鏡像

docker rm id :洗掉Docker容器,如果洗掉多個容器則需要使用空格隔離即可~!

docker rmi id :洗掉Dokcer鏡像

docker load < centos-7.2.tar :匯入容器快照

docker export -o centos-7.2.test.tar container_id :Docker匯出鏡像

cat centos-7.2.test.tar | docker import - centos-7.2.test :本地匯入Docker鏡像,紅色為鏡像名,需要自定義

docker run -p 5500:80 -it nginx /bin/bash :將宿主機5500埠映射給容器的80埠
nginx :啟動nginx服務

圖片顯示

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/139893.html
標籤:Linux
下一篇:Linux磁區工具-parted
