干货!全面认识Docker和基本指令
點擊上方“朱小廝的博客”,選擇“設為星標”
回復”1024“獲取獨家整理的學習資料
Docker逐漸成為虛擬化技術的佼佼者,Java架構師之路接下來會推出一系列的Docker相關技術文章,Docker技術也是架構師的必備技能。
什么是Docker
Docker 是一個開源的應用容器引擎,基于Go語言,誕生于2013年初,最初發起者是dotCloud公司,開發者可以打包應用到一個輕量級、可移植的容器中,然后發布到主流Linux系統上運行。
為什么用Docker
持續交付和部署:使用Docker可以通過定制應用鏡像來實現持續集成,持續交付,部署。開發人員構建后的鏡像,結合持續集成系統進行集成測試,而運維人員則可以在生產環境中快速部署該鏡像,也可以結合持續部署系統進行自動部署。
更高效的資源利用:Docker是基于內核級的虛擬化,可以實現更高效的性能,同時對資源的額外需求很低,相比傳統虛擬機方式,相同配置的主機能夠運行更多的應用。
更輕松的遷移和擴展:Docker容器幾乎可以在任何平臺上運行,同時支持主流的操作系統發行版本。
更快速的啟動時間:傳統的虛擬機技術啟動應用服務往往需要數分鐘,而Docker容器應用,由于直接運行于宿主內核,無需啟動完整的操作系統,因此可以做到妙級,甚至毫秒級的啟動時間,大大的節約了開發,測試,部署的時間。
Docker與傳統虛擬機差異
傳統虛擬化方式
Docker虛擬化方式
傳統虛擬化是在硬件層面實現虛擬化,需要有額外的虛擬機管理應用和虛擬機操作系統層,而Docker容器是在操作系統層面實現虛擬化,直接復用本地主機操作系統,更加輕量級。
核心概念
Docker鏡像:類似于虛擬機里的鏡像,是一個只讀的模板,一個獨立的文件系統,使用鏡像可以創建容器,可以理解為鏡像是容器的基石。
Docker容器:是由Docker鏡像創建的運行實例,類似于輕量級的沙箱,每個容器之間都是相互隔離的。支持的操作有啟動,停止,刪除等。
Docker倉庫:類似于經常使用的代碼倉庫,如github,它是Docker集中存放鏡像文件的倉所,國內也有網易,阿里等鏡像倉庫。????????????????????
鏡像操作指令
獲取鏡像:
docker pull centos? ? (默認獲取centos最新的鏡像)
docker pull centos:7 (獲取指定標簽鏡像)
查看本地鏡像:
docker images
查看鏡像詳細信息:
docker inspect centos:7?
查看鏡像歷史:
docker history centos:7
刪除鏡像:
A:使用標簽刪除:docker rmi centos
B:使用ID刪除:docker rimi
構建鏡像:
A:使用docker commit命令
B:使用Dockerfile構建
使用docker commit
例:構建一個帶有jdk的鏡像
按照如下步驟操作
[root@localhost?~]#?docker?run?-it?centos:7?/bin/bash[root@060793baf536?/]#?yum?install?wget[root@060793baf536?/]#?wget?--no-check-certificate?--no-cookies?--header?"Cookie:?oraclelicense=accept-securebackup-cookie"?http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm[root@060793baf536?/]#?rpm?-ivh?jdk-8u131-linux-x64.rpmPreparing...??????????????????????????#################################?[100%]Updating?/?installing...???1:jdk1.8.0_131-2000:1.8.0_131-fcs??#################################?[100%]Unpacking?JAR?files...????????tools.jar...????????plugin.jar...????????javaws.jar...????????deploy.jar...????????rt.jar...????????jsse.jar...????????charsets.jar...????????localedata.jar...[root@060793baf536?/]#?exit[root@localhost?~]#?docker?commit?060793baf536?centos/jdk:2.0[root@060793baf536?/]#?yum?install?wget
[root@060793baf536?/]#?wget?--no-check-certificate?--no-cookies?--header?"Cookie:?oraclelicense=accept-securebackup-cookie"?http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
[root@060793baf536?/]#?rpm?-ivh?jdk-8u131-linux-x64.rpm
Preparing...??????????????????????????#################################?[100%]
Updating?/?installing...
???1:jdk1.8.0_131-2000:1.8.0_131-fcs??#################################?[100%]
Unpacking?JAR?files...
????????tools.jar...
????????plugin.jar...
????????javaws.jar...
????????deploy.jar...
????????rt.jar...
????????jsse.jar...
????????charsets.jar...
????????localedata.jar...
[root@060793baf536?/]#?exit
[root@localhost?~]#?docker?commit?060793baf536?centos/jdk:2.0
通過docker images命令可以看到新增了centos/jdk 標簽為2.0的鏡像
使用Dockerfile構建
實際使用中不推薦使用docker commit構建,應使用更靈活和強大的Dockerfile構建docker鏡像,直接舉例來認識Dockerfile。
例:構建一個帶有jdk的centos7鏡像
[root@localhost?Dockerfile]#?mkdir?Dockerfile[root@localhost?Dockerfile]#?cd?Dockerfile[root@localhost?Dockerfile]#?cd?Dockerfile
編寫Dockerfile:
FROM?centos:7MAINTAINER??Java-Road?"Java-Road@qq.com"RUN?mkdir?/usr/local/jdkCOPY?jdk-8u171-linux-x64.rpm?/usr/local/jdk/RUN?rpm?-ivh?/usr/local/jdk/jdk-8u171-linux-x64.rpmMAINTAINER??Java-Road?"Java-Road@qq.com"
RUN?mkdir?/usr/local/jdk
COPY?jdk-8u171-linux-x64.rpm?/usr/local/jdk/
RUN?rpm?-ivh?/usr/local/jdk/jdk-8u171-linux-x64.rpm
執行如下指令:
[root@localhost?Dockerfile]#?docker?build?-t?centos/jdk?.運行結果如下:
docker images可以看到新生成的centos/jdk鏡像。
容器操作指令
創建啟動容器:
[root@localhost?~]#?docker?run?centos:7?/bin/echo'hello?world'
????????容器運行完后直接退出
交互形式創建啟動容器
[root@localhost?~]#?docker?run?-it?centos:7?/bin/bash[root@802e3623e566 /]#?ps???PID?TTY??????????TIME?CMD?????1??????????00:00:00?bash????13??????????00:00:00?ps[root@802e3623e566 /]#?exit
[root@802e3623e566 /]#?ps
???PID?TTY??????????TIME?CMD
?????1??????????00:00:00?bash
????13??????????00:00:00?ps
[root@802e3623e566 /]#?exit執行exit才能退出容器
守護狀態運行容器
[root@localhost?~]#?docker?run?-d?centos:7?/bin/sh?-c?"while?true;?do?echo?hello?world;?sleep?1;?done"
啟動已有的容器:
docker?start?容器ID例:[root@localhost?~]#?docker?start?802e3623e566
例:
[root@localhost?~]#?docker?start?802e3623e566?
停止運行的容器:
docker?stop?容器ID例:[root@localhost?~]#?docker?stop?802e3623e566
例:
[root@localhost?~]#?docker?stop?802e3623e566刪除容器:
[root@localhost?~]#?docker?stop?89566e38c7fb[root@localhost?~]#?docker?rm?89566e38c7fb
[root@localhost?~]#?docker?rm?89566e38c7fb進入運行的容器:
[root@localhost?~]#?docker?exec?-it?cbd8b1f35dcc?/bin/bash導出容器:
導出容器cbd8b1f35dcc到centos_test.tar文件[root@localhost ~]# docker export -o centos_test.tar cbd8b1f35dcc導出的tar文件可以在其他機器上,通過導入來重新運行
[root@localhost ~]# docker export -o centos_test.tar cbd8b1f35dcc
導出的tar文件可以在其他機器上,通過導入來重新運行導入容器:
把導出的文件centos_test.tar通過docker?import導入變成鏡像[root@localhost?~]#?docker?import?centos_test.tar?test/centos通過docker?images命令可以看到增加了個test/centos鏡像
[root@localhost?~]#?docker?import?centos_test.tar?test/centos
通過docker?images命令可以看到增加了個test/centos鏡像
想知道更多?掃描下面的二維碼關注我
相關推薦:
《科普 | 明星公司之Netflix》
《看我如何作死 | 將CPU、IO打爆》
《看我如何作死 | 網絡延遲、丟包、中斷一個都沒落下》
>>>Learn More<<
點個"在看"唄^_^
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的干货!全面认识Docker和基本指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看我如何作死 | 网络延迟、网络丢包、网
- 下一篇: 干货!Elasticsearch性能优化