1. 程式人生 > >docker教程(1)--基礎

docker教程(1)--基礎

Docker是什麼

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的Linux的機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。
Docker 可以粗糙的理解為一個輕量的虛擬機器,因為它和虛擬機器有類似的功能,可以將一個應用程式放在一個獨立的環境中執行。但是docker從本質上還是和虛擬機器有很大的區別的。

docker和vm對比

直觀上來講vm多了一層guest OS,同時 Hypervisor 會對硬體資源進行虛擬化,docker直接使用硬體資源,所以vm資源的利用率相對docker是低的。

Docker 安裝

mac 安裝:

linux 安裝:

  1. 開啟命令列,輸入命令: sudo wget -qO- https://get.docker.com/ | sh,命令解析:sudo 是以root許可權執行命令,wget是linux下的一個下載命令,-qO-是讓wget命令的引數資訊,其中 q 是讓簡化wget的輸出資訊,O-(大寫的字母O和減號)是讓wget的輸出直接輸出到標準輸出,而不是輸出到檔案,| 是管道,指的是將輸出移交給後面的命令進行執行。所以上述命令的意思是,下載一個shell指令碼並執行這個shell指令碼。
    輸出如下:
    linux下安裝docker

  2. docker 預設是以root使用者進行執行的,如果我們要以非root使用者執行Docker,在命令列中執行如下命令:sudo usermod -aG docker your-user(linux的使用者名稱)

    ,該命令的意思是,將指定的使用者名稱加入到 docker使用者組中, 下次你在用此使用者執行docker時,就不要用sudo了

Docker 架構

docker基本架構

client: 和docker daemon進行互動的
docker daemon: 負責docker的各種各樣的操作,如下載docker映象,執行docker容器等
registry: docker映象的Sass服務

Docker 簡單使用(執行一個nginx容器)

  1. 拉取image:命令列輸入 docker pull nginx,從遠端拉取一個 nginx 映象,可以類比git;如果首次執行會有如下輸出:
Using
default tag: latest Error response from daemon: Get https://registry-1.docker.io/v2/library/nginx/manifests/latest: unauthorized: incorrect username or password

即你沒有許可權到從docker hub(可類比github)上下載映象,登陸 https://hub.docker.com/,註冊使用者。

之後在命令列中輸入 docker login ,根據提示輸入使用者名稱(不是註冊的郵箱…)和密碼即可登陸。

docker拉取映象

  1. 檢視映象:docker images

docker檢視映象

  1. 執行映象:docker run -p 8080:80 -d nginx, 引數 -p 8080:80 是docker埠的對映,即將docker容器的80埠對映到本地的8080埠,-d是以守護程序的方式執行,即後臺執行 nginx是指的映象名稱。

docker執行映象

輸出的結果為docker容器的ID。

開啟瀏覽器,訪問:localhost:8080,即可看到nginx的的預設頁面:

docker_nginx

  1. 停止docker:docker stop 容器ID

Docker 提交映象

上一小節中,我們運行了一個nginx的docker容器,下面我們對容器中的內容進行修改

  1. vim index.html

    <html>
        <h1>Hello Docker</h1>
    </html>  
  2. docker cp index.html 8a06e5c0eb58b86://usr/share/nginx/html,其中8a06e5c0eb58b86是容器的ID,然後重新整理瀏覽器(localhost:8080),介面如下:

    hello_docker

  3. docker stop 8a06e5c0eb58b86停止nginx容器,再重新啟動容器:docker run -p 8080:80 -d nginx,
    檢查瀏覽器輸出(localhost:8080),發現介面又變成了nginx的預設介面,上一小節修改的內容未能儲存。原因是在docker容器中做的所有操作都是暫時的,那怎麼才能儲存我們隊容器所做的操作呢?

  4. 重複步驟1和步驟二的操作,即:

    (1) vim index.html  #<html><h1>Hello Docker</h1></html
    (2) docker run -p 8080:80 -d nginx
    (3) docker cp index.html 8a06e5c0eb58b86://usr/share/nginx/html

    在瀏覽器中訪問localhost:8080,頁面輸出為Hello Docker
    接著在命令列中輸入:docker commit -m 'hello_docker' 8a06e5c0eb58b864 hello_docker,
    成功後,會在控制檯輸出新的映象ID.
    執行:docker images

    docker_commit

    其中hello_docker就是我們剛剛提交的一個新的映象,可以執行它,檢查容器內容。

Docker小節

命令 用途
docker pull 獲取image
docker build 建立image
docker images 列出image
docker run 執行container
docker ps 列出container
docker rm 刪除container
docker rmi 刪除image
docker cp 在host和container之間拷貝檔案
docker commit 儲存改動為新的image