docker指令學習記錄

前言

本文爲學習整理和參考文章,不具備教程的功能。其次,後面將會陸續更新各類應用的容器化部署的實踐,如MySQL容器化,Jenkins容器化,以供讀者參考。nginx

鏡像獲取

docker pull [options] [Docker Registry地址]<倉庫名>:<標籤>

-a, --all-tags: 下載該鏡像的全部版本

Docker Registry地址默認爲Docker Hub,通常格式爲IP:端口號
倉庫名爲兩段式 <用戶名>:<軟件名> 默認用戶名爲library
標籤不填則默認爲latestgit

列出鏡像

docker images [options] [Repository[:tag]]
默認狀況會展現全部最終鏡像,若是加上了鏡像名,則會展現該鏡像的全部信息
-a, --all: 展現全部鏡像,包括中間層
-f, --filter filter: 根據某種條件對鏡像進行篩選
--format string: 使用go的模板語法
-q, --quiet: 只返回鏡像的ID

docker images -f since=mongo:3.2  #查看mongo3.2版本以後創建的鏡像,若是是要在以前,則使用before
docker images --format "{{.ID}}:{{.Repository}}" #輸出結構爲ID:Repository

虛懸鏡像

虛懸鏡像是指既沒有倉庫名,也沒有標籤的鏡像。這種鏡像的產生經常因爲當前的倉庫名和標籤被更新版本佔用,致使當前境像失效。github

docker images -f danling=true #列出全部虛懸鏡像
docker rmi $(docker images -q -f dangling=true) #利用複合指令刪除虛懸鏡像

commit鏡像

commit會將容器的存儲層保存下來成爲新的鏡像面試

docker commit [options] <容器ID或容器名> [<倉庫名>[:<標籤>]]
-a, --author string: 容器全部者
-c, --change list: 在容器上執行Dockerfile指令
-m, --message string: 提交信息
-p, --pause: 提交過程當中中止容器的運行,默認爲true

docker history IMAGE #顯示鏡像的歷史記錄
docker diff CONTAINER #查看容器的改動

儘可能不要使用commit指令構建鏡像redis

Dockerfile

構建鏡像

利用Dockerfile構建鏡像。docker

docker build [options] PATH | URL | -
-f, --file string: Dockerfile的路徑
--rm: 成功構建後刪除中間鏡像
-t, --tag: 以name:tag的形式爲鏡像命名
docker build -t nginx:v3 . #執行當前目錄下的Dockerfile並構建鏡像,新的鏡像名爲nginx:v3
docker build https://......   #直接從github構建,會自動clone這個項目,切換到指定分支(默認爲master),並進入指定目錄進行構建

最後的路徑是指鏡像構建的上下文,docker在build的時候會把該上下文中的而全部內容所有打包上傳給docker引擎。當在Dockerfile中須要引用相對路徑時,就是以該上下文做爲當前指令執行的目錄。能夠編寫.dockerignore文件來剔除無需打包的文件。
在默認狀況下,若是不指定Dockerfile的位置,就會從構建的上下文尋找Dockerfile來執行ubuntu

FROM

指定基礎鏡像,Dockerfile的第一行必須制定基礎鏡像緩存

RUN

執行命令。RUN指令會新建一層並在其上執行指令,指令完成以後再commit該鏡像。因此RUN指令中的內容應當儘量合併,而且記得清除冗餘的內容如緩存等。bash

RUN <指令>
RUN ["可執行文件", "參數1", "參數2"]
RUN mkdir newDir \
   && touch newFile

COPY

將構建上下文中源路徑中的內容複製到目標路徑之下。可使用通配符。若是目標目錄不存在,容器會幫助建立。複製過程不改變文件屬性。微信

COPY 源路徑 目標路徑
COPY ["源路徑",...,"目標路徑"]

COPY hom* /mydir/

CMD

默認的容器的主進程的啓動命令,在運行時能夠指定新的命令來替代鏡像設置中的默認命令。好比ubuntu的默認指令是/bin/bash。若是使用第一種形式,則會以sh -c的形式執行,這樣就可以獲得環境變量。容器中的應用都應該前臺執行。

CMD <命令>
CMD ["可執行文件", "參數一", "參數二", ...]
CMD ["參數一", "參數二"...]

CMD ["nginx", "-g", "daemon off;"]
docker run -it ubuntu #直接進入bash,由於默認指令爲/bin/bash
docker run -it ubuntu /etc/os-release #默認指令變成/etc/os-release

ENTRYPOINT

指定容器啓動程序及參數,當指定了ENTRYPOINT以後,CMD的含義就變成了ENTRYPOINT的參數。從而實現咱們在build鏡像時能夠根據配置修改啓動指令的參數。在docker run運行時能夠用--entrypoint覆蓋

ENTRYPOINT "CMD"
ENTRYPOINT ["可執行文件", "參數一", "參數二"...]

ENV

設置環境變量

ENV KEY VALUE
ENV KEY1=VALUE2 KEY2=VALUE2

ARG

同ENV,設置環境變量併爲其提供默認值,不一樣的是在容器運行時,這些值將不存在。在運行時能夠用--build-arg <參數名>:<值>覆蓋

ARG <參數名>[=默認值]

VOLUMN

指定匿名卷,防止用戶忘記掛載,運行時用-v HOST_DIR/CONTAINER_DIR進行覆蓋

VOLUMN PATH

EXPOSE

聲明運行時容器提供的服務端口,運行時應用並不會由於這個聲明而打開這個端口。docker run -P時會對聲明的端口隨機映射

EXPOSE 端口一 端口二

WORKDIR

指定容器以後各層的工做目錄。由於本層的cd並不會順帶到下一層。

WORKDIR PATH

USER

改變以後層執行RUN,ENTRYPOINT等指令的身份

RUN groupadd -r redis && useradd -r -g redis redis
USER redis
RUN ["redis-server"]

ONBUILD

ONBUILD 其它指令

用於構建基礎鏡像,被引用是纔會真正執行。能夠提取出重複的部分,方便維護

刪除

docker rmi [options] <image1> [<image2>....] #刪除鏡像
docker rm [options] <container1> [<container2>...] #刪除容器

進入容器

docker attach CONTAINER_NAME

查看數據卷信息

docker inspect CONTAINER_NAME

匿名的數據卷默認位於/var/lib/docker/volumes之下

查看容器

docker logs [-f] container

查看端口映射配置

docker port container container_port

容器連接

--link container_name:alias

clipboard.png
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~

相關文章
相關標籤/搜索