全面认识Docker和基本指令
Docker逐漸成為虛擬化技術(shù)的佼佼者,Java架構(gòu)師之路接下來會推出一系列的Docker相關(guān)技術(shù)文章,Docker技術(shù)也是架構(gòu)師的必備技能。
什么是Docker
Docker 是一個開源的應(yīng)用容器引擎,基于Go語言,誕生于2013年初,最初發(fā)起者是dotCloud公司,開發(fā)者可以打包應(yīng)用到一個輕量級、可移植的容器中,然后發(fā)布到主流Linux系統(tǒng)上運行。
為什么用Docker
-
持續(xù)交付和部署:使用Docker可以通過定制應(yīng)用鏡像來實現(xiàn)持續(xù)集成,持續(xù)交付,部署。開發(fā)人員構(gòu)建后的鏡像,結(jié)合持續(xù)集成系統(tǒng)進(jìn)行集成測試,而運維人員則可以在生產(chǎn)環(huán)境中快速部署該鏡像,也可以結(jié)合持續(xù)部署系統(tǒng)進(jìn)行自動部署。
-
更高效的資源利用:Docker是基于內(nèi)核級的虛擬化,可以實現(xiàn)更高效的性能,同時對資源的額外需求很低,相比傳統(tǒng)虛擬機(jī)方式,相同配置的主機(jī)能夠運行更多的應(yīng)用。
-
更輕松的遷移和擴(kuò)展:Docker容器幾乎可以在任何平臺上運行,同時支持主流的操作系統(tǒng)發(fā)行版本。
-
更快速的啟動時間:傳統(tǒng)的虛擬機(jī)技術(shù)啟動應(yīng)用服務(wù)往往需要數(shù)分鐘,而Docker容器應(yīng)用,由于直接運行于宿主內(nèi)核,無需啟動完整的操作系統(tǒng),因此可以做到妙級,甚至毫秒級的啟動時間,大大的節(jié)約了開發(fā),測試,部署的時間。
-
Docker與傳統(tǒng)虛擬機(jī)差異
傳統(tǒng)虛擬化方式
Docker虛擬化方式
傳統(tǒng)虛擬化是在硬件層面實現(xiàn)虛擬化,需要有額外的虛擬機(jī)管理應(yīng)用和虛擬機(jī)操作系統(tǒng)層,而Docker容器是在操作系統(tǒng)層面實現(xiàn)虛擬化,直接復(fù)用本地主機(jī)操作系統(tǒng),更加輕量級。
核心概念
-
Docker鏡像:類似于虛擬機(jī)里的鏡像,是一個只讀的模板,一個獨立的文件系統(tǒng),使用鏡像可以創(chuàng)建容器,可以理解為鏡像是容器的基石。
-
Docker容器:是由Docker鏡像創(chuàng)建的運行實例,類似于輕量級的沙箱,每個容器之間都是相互隔離的。支持的操作有啟動,停止,刪除等。
-
Docker倉庫:類似于經(jīng)常使用的代碼倉庫,如github,它是Docker集中存放鏡像文件的倉所,國內(nèi)也有網(wǎng)易,阿里等鏡像倉庫。??????????
-
鏡像操作指令
-
獲取鏡像:
docker pull centos? ? (默認(rèn)獲取centos最新的鏡像)
docker pull centos:7 (獲取指定標(biāo)簽鏡像)
-
查看本地鏡像:
docker images
-
查看鏡像詳細(xì)信息:
docker inspect centos:7?
-
查看鏡像歷史:
docker history centos:7
-
刪除鏡像:
A:使用標(biāo)簽刪除:docker rmi centos
B:使用ID刪除:docker rimi
-
構(gòu)建鏡像:
A:使用docker commit命令
B:使用Dockerfile構(gòu)建
-
使用docker commit
例:構(gòu)建一個帶有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.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 標(biāo)簽為2.0的鏡像
-
使用Dockerfile構(gòu)建
實際使用中不推薦使用docker commit構(gòu)建,應(yīng)使用更靈活和強(qiáng)大的Dockerfile構(gòu)建docker鏡像,直接舉例來認(rèn)識Dockerfile。
例:構(gòu)建一個帶有jdk的centos7鏡像
[root@localhost?Dockerfile]#?mkdir?Dockerfile
[root@localhost?Dockerfile]#?cd?Dockerfile
編寫Dockerfile:
FROM?centos:7
MAINTAINER??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
執(zhí)行如下指令:
[root@localhost?Dockerfile]#?docker?build?-t?centos/jdk?.
運行結(jié)果如下:
docker images可以看到新生成的centos/jdk鏡像。
- 容器操作指令
-
-
創(chuàng)建啟動容器:
[root@localhost?~]#?docker?run?centos:7?/bin/echo'hello?world'
????????容器運行完后直接退出
?
-
交互形式創(chuàng)建啟動容器
[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
執(zhí)行exit才能退出容器
?
-
守護(hù)狀態(tài)運行容器
?
[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
?
-
停止運行的容器:
docker?stop?容器ID
例:
[root@localhost?~]#?docker?stop?802e3623e566
?
-
刪除容器:
[root@localhost?~]#?docker?stop?89566e38c7fb
[root@localhost?~]#?docker?rm?89566e38c7fb
?
-
進(jìn)入運行的容器:
[root@localhost?~]#?docker?exec?-it?cbd8b1f35dcc?/bin/bash
?
-
導(dǎo)出容器:
導(dǎo)出容器cbd8b1f35dcc到centos_test.tar文件
[root@localhost ~]# docker export -o centos_test.tar cbd8b1f35dcc
導(dǎo)出的tar文件可以在其他機(jī)器上,通過導(dǎo)入來重新運行
?
-
導(dǎo)入容器:
把導(dǎo)出的文件centos_test.tar通過docker?import導(dǎo)入變成鏡像
[root@localhost?~]#?docker?import?centos_test.tar?test/centos
通過docker?images命令可以看到增加了個test/centos鏡像
-
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/starsyh/p/9243975.html
總結(jié)
以上是生活随笔為你收集整理的全面认识Docker和基本指令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建模元件有哪些在MapleSim中
- 下一篇: 检测SDWebImage有没有缓存图片