1. 程式人生 > >Docker極簡教程 【進階】

Docker極簡教程 【進階】

原文連結:https://www.javazhiyin.com/20513.html

1. DockerFile建立映象

建立檔案Dockerfile檔案,該檔名不可更改

vi Dockerfile

寫入文字

FROM alpine:latest
MAINTAINER smilevt
CMD echo "Hello Docker!

儲存退出

docker build命令用於使用 Dockerfile 建立映象,

docker build -t hello_docker .

 

  • -t : 映象的名字及標籤,通常 name:tag 或者 name

  • path : .點代表當前路徑下的所有檔案。

執行結果:

Docker極簡教程 【進階】

檢視是否成功建立映象並執行

Docker極簡教程 【進階】

 

2. Dockerfile安裝Nginx

再次新建資料夾並新建Dockerfile檔案,寫入以下內容;

FROM ubuntu
MAINTAINER anthor
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
ENTRYPOINT ["usr/sbin/nginx", "-g", "daemon off;"]
EXPOSE 80

簡單說一下文字含義:從(FROM)ubuntu容器中執行(RUN)3條命令,第一條是修改archive.ubuntu.com為mirrors.ustc.edu.cn國內映象,第二、三條是安裝nginx,然後複製(COPY)index.html到容器內,提供容器進入點(ENTRYPOINT),使nginx在前臺執行,之所以使用陣列是為了隔開命令,最後暴露80埠。

接下來新建index.html檔案,執行build命令建立映象:

docker build -t hello-nginx:tag .

 

Docker極簡教程 【進階】

使用run命令啟動該hello-nginx容器:

docker run -p 8080:80 -d hello-nginx:tag

測試訪問host:8080埠如下:

Docker極簡教程 【進階】

可以看到,Nginx成功啟動,並輸出自定義的index.html。

 

3. Dockerfile命令小結

 

命令 用途
FROM base image
RUN 執行命令
ADD 新增檔案
COPY 拷貝檔案
CMD 執行檔案
EXPOSE 暴露埠
WORKDIR 指定路徑
MAINTAINER 維護者
ENV 設定環境
ENTRYPOINT 容器入口
USER 指定使用者
VOLUME mount point

 

4. 映象分層

Dockerfile的每一行都會產生一個新層(新ID),比如:

Docker極簡教程 【進階】

已經存在image裡面的層是隻讀的,一旦映象執行為容器之後,就會產生一個新層(RW讀寫),分層的好處就是多個image可以共享相同的層,減少儲存大小。

5. Volume

 

我們知道,Docker容器中的改動是不會被儲存的,為了能夠儲存(持久化)資料以及共享容器間的資料,Docker提出了Volume的概念。簡單來說,Volume就是目錄或者檔案,它可以繞過預設的聯合檔案系統,而以正常的檔案或者目錄的形式存在於宿主機上。 比如在使用資料庫時就可以使用Volume。

 

6. Volume操作

 

說白了,Volume只是-v引數而已。容器和宿主機目錄掛載的三種方式:

 

第一種方式

執行Nginx容器,-d:後臺執行,--name:指定名稱nginx,-v /usr/share/nginx/html:執行容器內部用來訪問網頁的地址,最後的nginx是映象名。

docker run -d --name nginx -v /usr/share/nginx/html nginx

獲取容器/映象的元資料

docker inspect nginx

可以看到宿主機目錄Source和容器內目錄Destination:

Docker極簡教程 【進階】

繼續檢視宿本機目錄:

Docker極簡教程 【進階】

注意:如果是mac,則該路徑不是mac上的實際路徑,因為mac上執行docker是還有一層虛擬層,這是docker虛擬層中的路徑,可以在docker中訪問到

 

第二種方式

在啟動Nginx容器時使用-v引數掛載本地目錄到容器目錄

docker run -p 8080:80 --name mynginx -v $PWD:/usr/share/nginx/html -d nginx

這句命令使用PWD環境變數(該變數始終指向當前目錄)將當前目錄掛載到容器/usr/share/nginx/html目錄。

我們訪問主機8080埠

Docker極簡教程 【進階】

報錯403,因為當前目錄啥也沒有,沒有index.html檔案。在當前目錄新建該html檔案,輸入hello,訪問網頁

Docker極簡教程 【進階】

 

第三種方式

使用 docker create 建立一個新的容器但不啟動它:

docker create -v $PWD/data:/var/mydata --name data_container ubuntu
  • 宿主機目錄:$PWD/data

  • docker目錄:/var/mydata

  • 容器名:data_container

  • 基礎映象:ubuntu

啟動 ubuntu 容器映象(預設ubuntu基礎映象沒有服務):

docker run -it --volumes-from data_container ubuntu /bin/bash

 

  • -it: 以互動模式執行容器,併為容器重新分配一個偽輸入終端

  • --volumes-from data_container:以另外一個容器掛載

  • 最後在容器內執行/bin/bash命令

進入到容器控制檯後輸入mount,檢視掛載:

Docker極簡教程 【進階】

我們在/var/mydata目錄下新建whatever.txt檔案後退出,進入data目錄檢視,可以看到剛剛新建的txt檔案。

 

關注後端技術精選,每天推送優質好文

Docker極簡教程 【進階】