1. 程式人生 > >1.2 Docker操作基礎

1.2 Docker操作基礎

映象

  • 概念

在 Docker 的術語裡,一個只讀層被稱為映象,一個映象是永久不會變的。

由於 Docker 使用一個統一檔案系統,Docker 程序認為整個檔案系統是以讀寫方式掛載的。 但是所有的變更都發生頂層的可寫層,而下層的原始的只讀映象檔案並未變化。由於映象不 可寫,所以映象是無狀態的。

每一個映象都可能依賴於由一個或多個下層的組成的另一個映象。我們有時說,下層那個 映象是上層映象的父映象。

一個沒有任何父映象的映象,謂之基礎映象。

  • 查詢

使用 docker search 命令查詢預設倉庫中的映象

[[email protected] ~]# docker search nginx
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                                                  Official build of Nginx.                        9145                [OK]                
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con…   1374                                    [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of…   597                                     [OK]
jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as p…   392                                     [OK]

常用選項:

    --automated  只列出 automated build型別的映象
    --no-trunc  顯示完整的映象描述
    -s  列出收藏數不小於指定值的映象

  • 獲取

使用 docker image pull 命令來從倉庫獲取所需要的映象

[[email protected] ~]# docker image pull nginx:1.14-alpine
1.14-alpine: Pulling from library/nginx
911c6d0c7995: Pull complete 
d0c5e0e017dc: Pull complete 
ec6394c255ac: Pull complete 
8c7e85b0e988: Pull complete 
Digest: sha256:3d36a2c9513a5aa6aa6c41b076201d468bdb94c4f2b4c6e55d32a461ac8f00ee
Status: Downloaded newer image for nginx:1.14-alpine

常用選項:

    -a  拉取所有 tagged 映象
    --disable-content-trust  忽略映象的校驗,預設開啟

  • 檢視

使用 docker image ls 命令來顯示本地所有的映象
別名:docker image <ls | list | images>

[[email protected] ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.14-alpine         acc350649a48        3 weeks ago         18.6MB
  • 刪除

使用 docker image rmi 命令刪除本地映象

[[email protected] ~]# docker image rmi busybox:latest 
Untagged: busybox:latest
Untagged: [email protected]:cb63aa0641a885f54de20f61d152187419e8f6b159ed11a251a09d115fdff9bd
Deleted: sha256:e1ddd7948a1c31709a23cc5b7dfe96e55fc364f90e1cebcde0773a1b5a30dcda
Deleted: sha256:f9d9e4e6e2f0689cd752390e14ade48b0ec6f2a488a05af5ab2f9ccaf54c299d

常用選項:

    -f  強制刪除,不保留已有容器
    --no-prune  不移除該映象的過程映象,預設移除

容器

  • 概念

容器本質上是程序,我們原先是在一個作業系統上裝很多個服務,比如nginx,mysql,或者其他的伺服器,摻雜到系統裡面,現在有個容器以後,我會在作業系統中執行mysql容器,nginx容器,或者tomcat容器,會把這個3個程序全部打包到容器裡面,這樣的話,如果這個程序想要的話,我們就把這個容器啟動起來,我們這個程序想把這個容器刪掉。所以很顯而易見docker它不是虛擬化技術。

  • 建立

使用 docker container create 命令新建容器

[email protected] ~]# docker container ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
6fa8be31051f        busybox:latest      "sh"                     10 seconds ago      Created                                           quirky_ramanujan

  • 啟動

啟動容器有兩種方式,一種是基於映象新建一個容器並啟動,另外一個是將在終止狀態(stopped)的容器重新啟動。

新鍵並啟動

使用 docker container run 命令來新建容器並啟動

[[email protected] ~]# docker run --name webserver -d nginx:1.14-alpine 
92332b871efa7d104e4a32d82bba8368e3a0b9fc60de89a5ddba14d29136c887

常用選項:

    -a stdin  指定標準輸入輸出內容型別,可選 STDIN/STDOUT/STDERR 三項
    -d  後臺執行容器,並返回容器ID
    -i  以互動模式執行容器,通常與 -t 同時使用
    -p  埠對映,格式為:主機(宿主)埠 容器埠
    -t  為容器重新分配一個偽輸入終端,通常與 -i 同時使用
    --name="nginx-lb"  為容器指定一個名稱
    --dns 8.8.8.8  指定容器使用的DNS伺服器,預設和宿主一致
    --dns-search example.com  指定容器DNS搜尋域名,預設和宿主一致
    -h "mars"  指定容器的hostname
    -e username="ritchie"  設定環境變數
    --env-file=[]  從指定檔案讀入環境變數
    --cpuset="0-2" or --cpuset="0,1,2"  繫結容器到指定CPU執行
    -m  設定容器使用記憶體最大值
    --net="bridge"  指定容器的網路連線型別,支援 bridge/host/none/container  四種類型
    --link=[]  新增連結到另一個容器
    --expose=[]  開放一個埠或一組埠

重新啟動

使用 docker container start 命令重新啟動停止狀態的容器

[[email protected] ~]# docker start webserver 
webserver

常用選項:

    start  啟動一個或多個處於停止狀態的容器
    stop  暫停一個處於UP狀態的容器
    restart  重啟容器

  • 檢視

使用 docker container ps 檢視容器當前的狀態
別名:docker container <ls | list>

[[email protected] ~]# docker ps
   容器ID           映象名              執行的命令                 執行時間              狀態              對映埠              名稱
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
92332b871efa        nginx:1.14-alpine   "nginx -g 'daemon of…"   21 minutes ago      Up 11 minutes       80/tcp              webserver

常用選項:

    -a  顯示所有的容器,包括未執行的
    -f  根據條件過濾顯示的內容
    --format  指定返回值的模板檔案
    -l  顯示最近建立的容器
    -n  列出最近建立的n個容器
    --no-trunc  不截斷輸出
    -q  靜默模式,只顯示容器編號
    -s  顯示總的檔案大小

  • 暫停

使用 docker container pause/unpause 暫停或繼續容器

pause

[[email protected] ~]# docker container pause Bbox
Bbox
[[email protected] ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                        PORTS               NAMES
dda975cacb2d        busybox:latest      "sh"                     About a minute ago   Up About a minute (Paused)                        Bbox

unpause

[[email protected] ~]# docker container unpause Bbox
Bbox
[[email protected] ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
dda975cacb2d        busybox:latest      "sh"                3 minutes ago       Up 3 minutes                            Bbox
  • 中止

使用 docker container kill 中止一個或多個容器

[[email protected] ~]# docker container kill webserver 
webserver

常用選項:

    -s 向容器傳送一個訊號

  • 刪除

使用 docker container rm 刪除一個或多個容器

[[email protected] ~]# docker container rm quirky_ramanujan
quirky_ramanujan

常用選項:

    -f  通過SIGKILL訊號強制刪除一個執行中的容器
    -l  移除容器間的網路連線,而非容器本身
    -v  -v 刪除與容器關聯的卷

Registry

Registry用於儲存docker映象,包括映象的層次結構和元資料。使用者可自建Registry,也可使用官方的Docker Hub

Docker Registry中的映象通常由開發人員製作,而後推送至“公共”或“私有”Registry上儲存,供其他人員使用,例如“部署”到生產環境

一個 Registry中可以存在多個Repository

    Repository可分為“頂層倉庫”和“使用者倉庫”
    使用者倉庫名稱格式為“使用者名稱/倉庫名”

每個倉庫可以包含多個Tag(標籤) ,每個標籤對應一個映象

  • 製作映象

製作映象有很多方法,使用者可以從 Docker Hub 獲取已有映象並更新,也可以利用本地檔案系統建立一個

基於已有映象

首先使用已有映象啟動一個容器

[[email protected] ~]# docker container run --name busybox -it busybox

修改容器中的可寫層,此時容器被修改後,後退出容器

使用 docker container commit 命令製作新的映象副本

[[email protected] ~]# docker container commit -p busybox 
sha256:7c206159e9c093374d9bb3ae41e15cdea37aa78b719db0ec2ecbe0c27f68d4b9
[[email protected] ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              7c206159e9c0        22 seconds ago      1.16MB
[[email protected] ~]# docker container commit busybox jiangbowen/httpbbox:v0.1-1
sha256:03e0f0800758e927c51dd8f30ff5d3398093dea934f774ace5d82368c2d8bf30
[[email protected] ~]# docker image ls
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
jiangbowen/httpbbox   v0.1-1              03e0f0800758        12 seconds ago      1.16MB

常用選項:

    -a  作者資訊
    -c  修改內容列表
    -m  提交資訊
    -p  暫停容器以建立映象

Dockerfile

Dockerfile 由一行行命令語句組成,並且支援以 # 開頭的註釋行。

一般的,Dockerfile 分為四部分:基礎映象資訊、維護者資訊、映象操作指令和容器啟動時執行指令。

FROM centos:latest

LABEL maintainer="M30_Miriam <[email protected]>"

ENV NGINX_VERSION="nginx-1.12.2" 

COPY epel.repo /etc/yum.repos.d/
COPY nginx-1.12.2-1.el7_4.ngx.x86_64.rpm /data/

RUN yum install -y ${NGINX_VERSION} \
    || yum install -y ${NGINX_VERSION}-1.el7_4.ngx.x86_64.rpm \
    && yum clean all && rm -f /data/${NGINX_VERSION}-1.el7_4.ngx.x86_64.rpm

RUN echo "This is Miriam HomePage" > /usr/share/nginx/html/index.html

EXPOSE 80/tcp

CMD ["nginx", "-g", "daemon off;"]

常用指令:

    FROM
        語法:FROM <image>或FROM <image>:<tag>
        第一條指令必須為 FROM 指令。並且,如果在同一個Dockerfile中建立多個映象時,可以使用多個 FROM 指令(每個映象一次)

    MAINTAINER
        語法: MAINTAINER <name>
        指定維護者資訊(已廢棄)

    LABEL
        語法:LABEL <key>=<value> ...
        指定標籤資訊,取代 MAINTAINER

    RUN
        語法:RUN <command> 或 RUN ["executable", "param1", "param2"]
        前者將在 shell 終端中執行命令,即 /bin/sh -c;後者則使用 exec 執行。指定使用其它終端可以通過第二種方式實現。每條 RUN 指令將在當前映象基礎上執行指定命令,並提交為新的映象。當命令較長時可以使用 \ 來換行

    CMD
        支援三種語法:
            CMD ["executable","param1","param2"] 使用 exec 執行,推薦方式
            CMD command param1 param2 在 /bin/sh 中執行,提供給需要互動的應用
            CMD ["param1","param2"] 提供給 ENTRYPOINT 的預設引數
        指定啟動容器時執行的命令,每個 Dockerfile 只能有一條 CMD 命令。如果指定了多條命令,只有最後一條會被執行,如果使用者啟動容器時候指定了執行的命令,則會覆蓋掉 CMD 指定的命令

    EXPOSE
        語法: EXPOSE <port> [<port>...]
        告訴 Docker 服務端容器暴露的埠號,供互聯絡統使用。在啟動容器時需要通過 -P,Docker 主機會自動分配一個埠轉發到指定的埠

    ENV
        語法: ENV <key> <value>    
        指定一個環境變數,會被後續 RUN 指令使用,並在容器執行時保持

    ADD
        語法:ADD <src> <dest>
        該命令將複製指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目錄的一個相對路徑;也可以是一個 URL;還可以是一個 tar 檔案(自動解壓為目錄)

    COPY
        語法:COPY <src> <dest>
        複製本地主機的 <src>(為 Dockerfile 所在目錄的相對路徑)到容器中的 <dest>
        當使用本地目錄為源目錄時,推薦使用 COPY

    ENTRYPOINT
        兩種格式:
            ENTRYPOINT ["executable", "param1", "param2"]
            ENTRYPOINT command param1 param2(shell中執行)
        配置容器啟動後執行的命令,並且不可被 docker run 提供的引數覆蓋
        每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個時,只有最後一個起效

    VOLUME
        語法:VOLUME ["/data"]
        建立一個可以從本地主機或其他容器掛載的掛載點,一般用來存放資料庫和需要保持的資料等

    USER
        語法:USER daemon
        定執行容器時的使用者名稱或 UID,後續的 RUN 也會使用指定使用者
        當服務不需要管理員許可權時,可以通過該命令指定執行使用者。並且可以在之前建立所需要的使用者。要臨時獲取管理員許可權可以使用 gosu,而不推薦 sudo

    WORKDIR
        語法:WORKDIR /path/to/workdir
        為後續的 RUN、CMD、ENTRYPOINT 指令配置工作目錄
        可以使用多個 WORKDIR 指令,後續命令如果引數是相對路徑,則會基於之前命令指定的路徑

    ONBUILD
        
語法:ONBUILD [INSTRUCTION]
        配置當所建立的映象作為其它新建立映象的基礎映象時,所執行的操作指令

HEALTHCHECK
        語法:HEALTHCHECK [OPTIONS] CMD command
        選項:
            --interval=DURATION (default: 30s)
            --timeout=DURATION (default: 30s)
            --start-period=DURATION (default: 0s)
            --retries=N (default: 3)
        按照定義的引數在容器中執行操作,判斷返回值:0為成功,1為故障,2為保留值。當返回值非0時關閉容器

    STOPSIGNAL
        語法:STOPSIGNAL signal
        向容器中的程序傳送訊號,與 kill 命令的訊號相同,9為強制殺死,15為中止

    ARG
        語法:ARG <name>[=<default value>]
        定義一個變數,使用者可以通過 --build-arg 在啟動時傳遞給容器

相關推薦

1.2 Docker操作基礎

映象 概念 在 Docker 的術語裡,一個只讀層被稱為映象,一個映象是永久不會變的。 由於 Docker 使用一個統一檔案系統,Docker 程序認為整個檔案系統是以讀寫方式掛載的。 但是所有的變更都發生頂層的可寫層,而下層的原始的只讀映象檔案並未變化。由於

1.2 區塊鏈基礎知識

最簡 架構圖 永久 有意 基於 電腦 普通 book 探索 1.2.1 區塊鏈相關術語   區塊鏈板塊主要更新一些專業技術、相關算法 及 技術實現。 其中一些的相關基礎知識就不再做贅述了。   但是 我給大家搜集整理了一下 相關術語,想入門但對這個方向還是不是很了解

Python基礎--1.2 變數迴圈基礎介紹

1、python執行程式碼分為:檔案執行,互動器執行。 2、變數:只能是字母、數字或下劃線任意組合;變數第一個字元不能是名稱;一些關鍵字不可以作為變數名。 例如: name = "seven" 3、讀取使用者輸入:input(sth),預設接受字串格式; 註釋:單行註釋#,多行註釋 用多引號"""&nbs

【NOI OpenJudge】【1.2】程式設計基礎之變數定義、賦值及轉換

01: 整型資料型別儲存空間大小 #include<cstdio> int main(){ int a; short b; printf("%d %d",sizeof(a),sizeof(b)); return 0; } 02: 浮點型資料型別儲存空間大小

Android基礎新手教程——1.2.1 使用Eclipse + ADT + SDK開發Android APP

devtools 進行 string append tle 編寫 android項目 找不到 系統版本號 Android基礎新手教程——1.2.1 使用Eclipse + ADT + SDK開發Android APP

shell編程基礎一(多種方法求值1+2+..+100)

循環#SHELL編程基礎一(多種方法求值1+2+..+100)##為什麽要學好shell shell腳本語言是實現linux系統管理及自動化運維所必備的重要工具,linux系統的底層及基礎應用軟件的核心大都涉及shell腳本的內容。 每一個合格的linux系統管理員或運維工程師,都需要能夠熟練地編寫shell

Linux運維之道之網絡基礎學習1.2

linux 達內 雲計算 網絡基礎1.2物理層解析-----------------------------------------------------------------------------------------------物理層--網絡的基礎------物理層是TCP/IP模型的

兒童上網時間管控軟件_GreenSurfOnline V0.1 使用說明 (以Windows後臺服務形式存在,安裝需要有一定電腦操作基礎)

png online -1 tin 存在 行修改 批處理 說明 下載 1、GreenSurfOnline配置文件,配置可以上網的時間斷,上網的時間使用NTP時間,如果當前時間不在GreenSurfOnlineCfg.ini配置文件中, 不執行默認的關機命令(批處理文件,可

JSTL-1.2基礎 fn的tld文件

org form lar nor only substring distrib inf fish 禮悟:   好好學習合思考,尊師重道存感恩。葉見尋根三返一,江河湖海同一體。 虛懷若谷良心主,願行無悔給最苦。讀書鍛煉強身心,誠勸且行且珍惜。

V-1-2 Vmware桌面虛擬化環境搭建之ESXi服務器的操作

vmware這篇介紹的是在網頁端或者客戶端對ESXI服務器進行操作。如需知道ESXI的安裝請參考文章:V-1-1 Vmware桌面虛擬化環境搭建之安裝ESXi在瀏覽器中訪問ESXI上顯示的IP地址。從網頁訪問時可能會出現安全證書問題。這裏選擇繼續瀏覽網站。(某些瀏覽器需要設置信任這些網站。)÷在5.5的版本,

精典教程-1-Python 3 教程-2-Docker 教程

Python Docker 精典教程**************廖雪峰:**************Python 3 教程https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 ******

20180813視頻筆記 深度學習基礎上篇(1)之必備基礎知識點 深度學習基礎上篇(2)神經網絡模型視頻筆記:深度學習基礎上篇(3)神經網絡案例實戰 和 深度學習基礎下篇

計算 概念 人臉識別 大量 png 技巧 表現 lex github 深度學習基礎上篇(3)神經網絡案例實戰 https://www.bilibili.com/video/av27935126/?p=1 第一課:開發環境的配置 Anaconda的安裝 庫的安裝 Windo

docker版mysql的使用和配置(1)——docker的基本操作

spa uci 信息 5.5 8.0 ash 隨機 server expec 最近實在是忙成狗,其他的內容等稍微閑一點了一起更新。 這篇主要是講docker版的mysql的使用和配置信息。因為實習公司需要搞一個docker做測試環境用,還需要包括基本的依賴。最重要的是,因為

錯誤:docker-ce conflicts with 2:docker-1.13.1-74.git

tro x86_64 -- rem conflicts uber 卸載 -c docke CentOS7中安裝k8s: `yum install kubernetes` 安裝K8S出現如下錯誤提示: 錯誤:docker-ce conflicts with 2

2.1.2基礎之命令行壓縮工具7z zip壓縮文件

size color 命令 col .exe %d 開始 name 當前 Windows命令行batcmd腳本的應用之自動備份 異地備份2.1.2基礎之命令行壓縮工具7z zip壓縮文件 課程地址:http://edu.51cto.com/course/15056.html

Atitit 檔案儲存標準化api 總結 目錄 1. 作業系統,進行操作 1 1.1. FileUtils類的應用 1 1.2. 各大api 比較 2 2. Java。Io用apache的commo

Atitit 檔案儲存標準化api 總結   目錄 1. 作業系統,進行操作 1 1.1. FileUtils類的應用 1 1.2. 各大api 比較 2 2. Java。Io用apache的commons-io包下的FileUtils 2 2.1. 建立 2

Atittit HDFS hadoop 大資料檔案系統java使用總結 目錄 1. 作業系統,進行操作 1 2. Hdfs 類似nfs ftp遠端分散式檔案服務 2 3. 啟動hdfs服務start

Atittit HDFS hadoop 大資料檔案系統java使用總結   目錄 1. 作業系統,進行操作 1 2. Hdfs 類似nfs ftp遠端分散式檔案服務 2 3. 啟動hdfs服務start-dfs.cmd 2 3.1. 配置core-site

Django(2.1.2)對資料庫MySQL操作

Django(2.1.2)對資料庫MySQL操作 Django(2.1.2)對資料庫MySQL操作 1.建一張表 2.檢視資料 3.增加資料 4.刪除資料 5.修改資料 6.路由設定 7.HTML設定

Django(2.1.2基礎

Django(2.1.2)基礎 Django(2.1.2) 1.Django介紹 2.為什麼使用Django? 3.使用Django開發要具備基礎知識 4.建立一個Django工程 4.1在Git中建立一個Dj

第4章:介紹python物件型別/4.1 python的核心資料型別/4.2.1 字串獲取操作、字串合併和重複操作

字串獲取操作 概念:用雙引號或者單引號括起來的一串字元 字串按下標獲取操作 定義字串 >>> S="abcd" 給字串求長度 >>> len(S)      4