本文爲學習整理和參考文章,不具備教程的功能。其次,後面將會陸續更新各類應用的容器化部署的實踐,如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會將容器的存儲層保存下來成爲新的鏡像面試
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構建鏡像。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
指定基礎鏡像,Dockerfile的第一行必須制定基礎鏡像緩存
執行命令。RUN指令會新建一層並在其上執行指令,指令完成以後再commit該鏡像。因此RUN指令中的內容應當儘量合併,而且記得清除冗餘的內容如緩存等。bash
RUN <指令> RUN ["可執行文件", "參數1", "參數2"] RUN mkdir newDir \ && touch newFile
將構建上下文中源路徑中的內容複製到目標路徑之下。可使用通配符。若是目標目錄不存在,容器會幫助建立。複製過程不改變文件屬性。微信
COPY 源路徑 目標路徑 COPY ["源路徑",...,"目標路徑"] COPY hom* /mydir/
默認的容器的主進程的啓動命令,在運行時能夠指定新的命令來替代鏡像設置中的默認命令。好比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以後,CMD的含義就變成了ENTRYPOINT的參數。從而實現咱們在build鏡像時能夠根據配置修改啓動指令的參數。在docker run運行時能夠用--entrypoint覆蓋
ENTRYPOINT "CMD" ENTRYPOINT ["可執行文件", "參數一", "參數二"...]
設置環境變量
ENV KEY VALUE ENV KEY1=VALUE2 KEY2=VALUE2
同ENV,設置環境變量併爲其提供默認值,不一樣的是在容器運行時,這些值將不存在。在運行時能夠用--build-arg <參數名>:<值>覆蓋
ARG <參數名>[=默認值]
指定匿名卷,防止用戶忘記掛載,運行時用-v HOST_DIR/CONTAINER_DIR進行覆蓋
VOLUMN PATH
聲明運行時容器提供的服務端口,運行時應用並不會由於這個聲明而打開這個端口。docker run -P時會對聲明的端口隨機映射
EXPOSE 端口一 端口二
指定容器以後各層的工做目錄。由於本層的cd並不會順帶到下一層。
WORKDIR PATH
改變以後層執行RUN,ENTRYPOINT等指令的身份
RUN groupadd -r redis && useradd -r -g redis redis USER redis RUN ["redis-server"]
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
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~