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 : .點代表當前路徑下的所有檔案。
執行結果:
檢視是否成功建立映象並執行
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 .
使用run命令啟動該hello-nginx容器:
docker run -p 8080:80 -d hello-nginx:tag
測試訪問host:8080埠如下:
可以看到,Nginx成功啟動,並輸出自定義的index.html。
3. Dockerfile命令小結
命令 | 用途 |
---|---|
FROM | base image |
RUN | 執行命令 |
ADD | 新增檔案 |
COPY | 拷貝檔案 |
CMD | 執行檔案 |
EXPOSE | 暴露埠 |
WORKDIR | 指定路徑 |
MAINTAINER | 維護者 |
ENV | 設定環境 |
ENTRYPOINT | 容器入口 |
USER | 指定使用者 |
VOLUME | mount point |
4. 映象分層
Dockerfile的每一行都會產生一個新層(新ID),比如:
已經存在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:
繼續檢視宿本機目錄:
注意:如果是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埠
報錯403,因為當前目錄啥也沒有,沒有index.html檔案。在當前目錄新建該html檔案,輸入hello,訪問網頁
第三種方式
使用 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,檢視掛載:
我們在/var/mydata目錄下新建whatever.txt檔案後退出,進入data目錄檢視,可以看到剛剛新建的txt檔案。
關注後端技術精選,每天推送優質好文