遇到這些問(wèn)題可以考慮使用Docker
-
合作開(kāi)發(fā)的時(shí)候,在本機(jī)可以跑,別人的電腦跑不起來(lái)
- 這里我們拿Java Web應(yīng)用程序舉例几迄,我們一個(gè)Java Web應(yīng)用程序涉及很多東西,比如JDK木羹、tomcat解孙、spring等等。當(dāng)這些其中某一項(xiàng)版本不一致的時(shí)候脐瑰,可能就會(huì)導(dǎo)致應(yīng)用程序跑不起來(lái)這種情況廷臼。Docker則將程序直接打包成鏡像,直接運(yùn)行在容器中即可寂恬。
-
服務(wù)器自己的程序掛了莱没,結(jié)果發(fā)現(xiàn)是別人程序出了問(wèn)題把內(nèi)存吃完了,自己程序因?yàn)閮?nèi)存不夠就掛了
- 這種也是一種比較常見(jiàn)的情況饰躲,如果你的程序重要性不是特別高的話臼隔,公司基本上不可能讓你的程序獨(dú)享一臺(tái)服務(wù)器的躬翁,這時(shí)候你的服務(wù)器就會(huì)跟公司其他人的程序共享一臺(tái)服務(wù)器盯拱,所以不可避免地就會(huì)受到其他程序的干擾,導(dǎo)致自己的程序出現(xiàn)問(wèn)題狡逢。Docker就很好解決了環(huán)境隔離的問(wèn)題奢浑,別人程序不會(huì)影響到自己的程序。
-
公司要弄一個(gè)活動(dòng)雀彼,可能會(huì)有大量的流量進(jìn)來(lái),公司需要再多部署幾十臺(tái)服務(wù)器
- 在沒(méi)有Docker的情況下袜刷,要在幾天內(nèi)部署幾十臺(tái)服務(wù)器莺丑,這對(duì)運(yùn)維來(lái)說(shuō)是一件非常折磨人的事,而且每臺(tái)服務(wù)器的環(huán)境還不一定一樣萧豆,就會(huì)出現(xiàn)各種問(wèn)題昏名,最后部署地頭皮發(fā)麻。用Docker的話份殿,我只需要將程序打包到鏡像嗽交,你要多少臺(tái)服務(wù),我就給你跑多少容器夫壁,極大地提高了部署效率。
Docker特點(diǎn)
- 標(biāo)準(zhǔn)化交付:Docker將應(yīng)用打包成標(biāo)準(zhǔn)化單元梅肤,用于交付、部署俊啼;
- 輕量級(jí):容器及包含了軟件運(yùn)行所需的所有環(huán)境左医,而且非常輕量級(jí)
- 高可靠:容器化的應(yīng)用程序,可以在任何Linux環(huán)境中始終如一的運(yùn)行
- 隔離性:容器化的應(yīng)用程序跛十,具備隔離性秕硝,這樣多團(tuán)隊(duì)可以共享同一Linux系統(tǒng)資源
虛擬機(jī)和Docker比較
特性 | 容器 | 虛擬機(jī) |
---|---|---|
啟動(dòng) | 秒級(jí) | 分鐘級(jí) |
硬盤(pán)使用 | 一般為MB | 一般為GB |
性能 | 接近原生硬件 | 弱雞 |
系統(tǒng)支持量 | 單機(jī)可跑幾十個(gè)容器 | 單機(jī)幾個(gè)虛擬OS |
運(yùn)行環(huán)境 | 主要在Linux | 主要在window |
相關(guān)概念
- 宿主機(jī):安裝Docker守護(hù)進(jìn)程的Linux服務(wù)器远豺,稱之為宿主機(jī)。
- 鏡像image:就相當(dāng)于是一個(gè) root 文件系統(tǒng)霎苗。除了提供容器運(yùn)行時(shí)所需的程序榛做、庫(kù)内狸、資源、配置等文件外昆淡,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)昂灵。
- 容器container:容器是鏡像運(yùn)行后的實(shí)體,可以啟動(dòng)眨补,停止,刪除含思,暫停等操作。
- 倉(cāng)庫(kù)repository:存放鏡像的中心饲做,最常使用的Registry公開(kāi)服務(wù)遏弱,是官方的Docker Hub,這也是默認(rèn)的 Registry泪姨,并擁有大量的高質(zhì)量的官方鏡像虹脯。
遇到問(wèn)題
docker容器中無(wú)法使用vim命令
執(zhí)行命令:apt-get update
執(zhí)行命令:apt-get install vim -y
常用命令
- systemctl start docker 啟動(dòng)docker服務(wù)
- systemctl stop docker 停止docker服務(wù)
- systemctl status docker 查看docker服務(wù)狀態(tài)
- systemctl enable docker 開(kāi)機(jī)啟動(dòng)docker服務(wù)
- docker info 查看docker概要信息
- docker -v 查看版本
- docker images 查看本地所有鏡像
- docker search 鏡像名稱
- docker pull 鏡像名稱
- docker rmi 鏡像ID
- docker rmi 鏡像ID 刪除鏡像
- docker ps 查看容器
- docker run 參數(shù) 鏡像名稱:鏡像標(biāo)簽 /bin/bash 創(chuàng)建容器:交互式、守護(hù)式
創(chuàng)建容器常用的參數(shù)說(shuō)明:
## 命令參數(shù)詳解
-i:表示運(yùn)行容器,如果不加該參數(shù)那么只是通過(guò)鏡像創(chuàng)建容器唇敞,而不啟動(dòng)咒彤。
-t:表示容器啟動(dòng)后會(huì)進(jìn)入其命令行。加入這兩個(gè)參數(shù)后旷档,容器創(chuàng)建就能登錄進(jìn)去歇拆。即分配一個(gè)偽終端(如果 只加it兩個(gè)參數(shù),創(chuàng)建后就會(huì)自動(dòng)進(jìn)去容器)厂庇。
-d:在run后面加上-d參數(shù),則會(huì)創(chuàng)建一個(gè)守護(hù)式容器在后臺(tái)運(yùn)行(這樣創(chuàng)建容器后不會(huì)自動(dòng)登錄容器)输吏。
--name :為創(chuàng)建的容器命名。
-v:表示目錄映射關(guān)系(前者是宿主機(jī)目錄贯溅,后者是映射到宿主機(jī)上的目錄)它浅,可以使用多個(gè)-v做多個(gè)目錄 或文件映射。注意:最好做目錄映射姐霍,在宿主機(jī)上做修改,然后共享到容器上黔衡。
-p:表示端口映射,前者是宿主機(jī)端口夜牡,后者是容器內(nèi)的映射端口侣签。可以使用多個(gè)-p做多個(gè)端口映射影所,例如: 可以將Docker中Tomcat容器的8080端口映射到宿主機(jī)上的某一個(gè)端口8080猴娩,那么以后訪問(wèn)tomcat只需 要:http://宿主機(jī)的IP:8080/
進(jìn)入容器之后,初始化執(zhí)行的命令:/bin/bash卷中;可寫(xiě)可不寫(xiě)
- docker run -it --name=容器名稱 鏡像名稱:標(biāo)簽 /bin/bash 交互式
- docker run -di --name=容器名稱 鏡像名稱(或鏡像ID):標(biāo)簽 /bin/bash 守護(hù)式
- docker exec -it 容器名稱 (或者容器ID) /bin/bash 進(jìn)入容器
- docker start 容器名稱(或者容器ID) 啟動(dòng)容器
- docker stop 容器名稱(或者容器ID) 停止容器
- docker rm 容器名稱(容器ID) 刪除容器(無(wú)法刪除正在運(yùn)行的容器蟆豫,需要先停止容器)
數(shù)據(jù)卷
數(shù)據(jù)卷是宿主機(jī)中的一個(gè)目錄或文件,當(dāng)容器目錄和數(shù)據(jù)卷目錄綁定后栈幸,對(duì)方的修改會(huì)立即同步帮辟。
一個(gè)數(shù)據(jù)卷可以被多個(gè)容器同時(shí)掛載,一個(gè)容器也可以被掛載多個(gè)數(shù)據(jù)卷织阅。
簡(jiǎn)單來(lái)說(shuō)數(shù)據(jù)卷本質(zhì)其實(shí)是共享文件夾荔棉,是宿主機(jī)與容器間數(shù)據(jù)共享的橋梁蒿赢。
命令:
- docker run ... –v 宿主機(jī)目錄(文件):容器內(nèi)目錄(文件) ...
- 如果宿主機(jī)目錄不存在,會(huì)自動(dòng)創(chuàng)建