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