快速瞭解使用Docker

Docker

Docker是一個用於開發,交付和運行應用程序的開放平臺。 Docker能夠將應用程序與基礎架構分開,從而可以快速交付軟件。 藉助Docker,可以以與管理應用程序相同的方式來管理基礎架構。 通過利用Docker的快速交付,測試和部署代碼的方法,可以大大減少編寫代碼和在生產環境中運行代碼之間的延遲。

Docker屬於Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。Docker 將應用程序與該程序的依賴,打包在一個文件裡面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器裡運行,就好像在真實的物理機上運行一樣。有了 Docker,就不用擔心環境問題。

簡單概括來說:

  • 使用最廣泛的開源容器引擎
  • 一種操作系統級的虛擬化技術
  • 依賴於Linux內核特性:Namespace(資源隔離)和Cgroups(資源限制)
  • 一個簡單的應用程序打包工具

Docker設計目標

  • 提供簡單的應用程序打包工具
  • 開發人員和運維人員職責邏輯分離
  • 多環境保持一致性

Docker基本組成

Docker Client:客戶端,輸入docker的一些操作指令

Ddocker Daemon:守護進程, Docker是C/S架構的程序,Docker的客戶端向守護進程發起請求,守護進程處理完成後返回結果。Docker客戶端既可以在本地訪問守護進程,也可以遠程訪問守護進程。

Docker Images:鏡像, 鏡像是容器的基石,容器基於鏡像啟動,鏡像就像是容器的源代碼,保存了用於容器啟動的各種條件 。

鏡像不是一個單一的文件,而是有多層構成。我們可以通過docker history 查看鏡像中各層內容及大小,每層對應著Dockerfile中的一條指令。Docker鏡像默認存儲在/var/lib/docker/中。

容器其實是在鏡像的最上面加了一層讀寫層,在運行容器裡做的任何文件改動,都會寫到這個讀寫層。如果容器刪除了,最上面的讀寫層也就刪除了,改動也就丟失了。

Docker使用存儲驅動管理鏡像每層內容及可讀寫層的容器層。

Docker Container:容器,通過鏡像啟動:容器是docker的執行單元。

啟動和執行:鏡像如果是構建和打包階段,則容器是啟動和執行階段。

容器啟動過程:啟動時在鏡像的最頂層加一個可寫的文件系統,即可寫層。Docker中運行的程序就是在這個層中執行的。docker第一次啟動一個容器時,可寫層是空的,當文件系統發生變化,都會應用到這一層。如果想修改一個文件,該文件首先會從可讀寫層下邊的只讀層複製到該讀寫層,該文件的只讀版本依然存在,但是已經被讀寫層中的該文件副本所隱藏。這個是docker的重要機制,寫時複製(copy on write),當創建一個新容器時,docker構建出一個鏡像棧,在棧的最頂層添加可寫層,這個讀寫層加上下邊的鏡像層及配置數據就構成了一個容器。

Docker Registry:鏡像倉庫,存放用戶構建的鏡像,倉庫分為公有和私有,共有是指Docker Hub。

Docker Hub是由Docker公司負責維護的公共註冊中心,包含大量的容器鏡像,Docker工具默認從這個公共鏡像庫下載鏡像。

快速瞭解使用Docker

容器 VS 虛擬機

快速瞭解使用Docker

VM是一個運行在宿主機之上的完整的操作系統,VM運行自身操作系統會佔用較多的CPU、內存、硬盤資源。Docker不同於VM,只包含應用程序以及依賴庫,基於libcontainer運行在宿主機上,並處於一個隔離的環境中,這使得Docker更加輕量高效,啟動容器只需幾秒鐘之內完成。由於Docker輕量、資源佔用少,使得Docker可以輕易的應用到構建標準化的應用中。但Docker目前還不夠完善,比如隔離效果不如VM,共享宿主機操作系統的一些基礎庫等;網絡配置功能相對簡單,主要以橋接方式為主;查看日誌也不夠方便靈活。

Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更為輕便、快捷。

作為一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有眾多的優勢。Docker 容器的啟動可以在秒級實現,這相比傳統的虛擬機方式要快得多;Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器。

快速瞭解使用Docker

Docker應用場景

  • 應用程序打包和發佈
  • 應用程序隔離
  • 持續集成
  • 部署微服務
  • 快速搭建測試環境
  • 提供PaaS產品(平臺即服務)

Docker安裝

docker版本:

  • 社區版(Community Edition,CE),白嫖版
  • 企業版(Enterprise Edition,EE),收費版

支持平臺:

  • Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu)
  • Mac
  • Windows

這裡介紹CentOS7.x安裝Docker:

官網也有安裝步驟:https://docs.docker.com/engine/install/centos/

關閉防火牆:

<code>systemctl stop firewalld
systemctl disabled firewalld/<code>

關閉selinux:

<code>vim /etc/selinux/config/<code>

改成,SELINUX=disabled,然後重啟系統。

如果安裝其他版本可以先卸載:

<code>yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine/<code>

安裝依賴包:

<code>yum install -y yum-utils device-mapper-persistent-data lvm2/<code>

添加Docker軟件包源:

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

安裝Docker CE:

<code>yum install -y docker-ce/<code>

啟動Docker服務並設置開機啟動:

<code>systemctl start docker
systemctl enable docker/<code>

修改配置國內鏡像倉庫:

<code> vi /etc/docker/daemon.json 
#添加如下配置
{
  "registry-mirrors": [ "https://registry.docker-cn.com"]
}/<code>

重啟docker:

<code>systemctl restart docker/<code>

至此docker安裝完成了,運行命令查看安裝的docker的信息:

<code>docker info/<code>
快速瞭解使用Docker

運行一個hello world:

快速瞭解使用Docker

Docker指令

鏡像管理的常用指令:

快速瞭解使用Docker

容器管理常用指令:

快速瞭解使用Docker

創建容器常用選項:

快速瞭解使用Docker

拉取一個nginx鏡像:

<code>docker pull nginx/<code>

查看下載的鏡像:

<code>docker images/<code>

查看鏡像的詳細信息:

<code>docker image inspect nginx/<code>

創建一個容器:

<code>docker container  run -itd nginx/<code>

-d :分離模式: 在後臺運行

-i :即使沒有附加也保持STDIN 打開

-t :分配一個偽終端

查看運行的容器:

<code>docker ps -a/<code>

進入容器,在運行的容器中執行命令:

<code>docker container exec -it 6905cb519547  bash/<code>

6905cb519547:容器id

運行容器,映射端口80到宿主機端口8080上面:

<code>docker container run -itd -p 8080:80 --name nginx01 nginx/<code>
快速瞭解使用Docker

查看容器負載情況:

<code>docker stats nginx01/<code>

查看容器日誌:

<code>docker logs nginx01/<code>

查看容器的端口:

<code>docker port nginx01/<code>

刪除所有容器:

<code>docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)/<code>

刪除所有鏡像:

<code>docker rmi -f `docker images -q`/<code>

刪除已存在的鏡像:

<code>docker image rm nginx:lastest/<code>

容器日誌保存地址:

<code>ls /var/lib/docker/containers//<code>


分享到:


相關文章: