docker 初体验
docker 初體驗(yàn)
在參加RoboCup仿真組的時(shí)候遇到了一個(gè)很奇怪的問(wèn)題,實(shí)驗(yàn)平臺(tái)運(yùn)行的環(huán)境是java9+,但是智能體代碼的運(yùn)行環(huán)境是java8(高版本不可以)。本來(lái)打算起一個(gè)虛擬機(jī)來(lái)運(yùn)行兩份不同的代碼,不過(guò)室友告訴我一個(gè)更好的解決方案,使用docker——更輕量高效的解決方案。
什么是docker
摘自docker中文社區(qū):Docker是一個(gè)開(kāi)源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。開(kāi)發(fā)者在筆記本上編譯測(cè)試通過(guò)的容器可以批量地在生產(chǎn)環(huán)境中部署,包括VMs(虛擬機(jī))、bare metal、OpenStack 集群和其他的基礎(chǔ)應(yīng)用平臺(tái)。
為什么我們使用docker
我們已經(jīng)有了虛擬機(jī)這樣的很成熟的解決方案,那么我們?yōu)槭裁葱枰褂胐ocker 呢?
一開(kāi)始我將docker理解為一個(gè)更輕量級(jí),更優(yōu)化的虛擬機(jī),但是事實(shí)上他們是不同的機(jī)制。
看到一個(gè)很有趣的形容:
- 物理機(jī):一個(gè)獨(dú)棟別墅,有一個(gè)房子,獨(dú)立地基,獨(dú)立花園
- 虛擬機(jī):一棟公寓樓,一棟樓里里有很多單獨(dú)套間,所有套間的住戶共享這棟樓,同時(shí)不共享水電,也不能進(jìn)入別人的房子。
- 容器:一棟樓,樓房里有很多套件,每個(gè)套間里有小房間,住戶只擁有一個(gè)小房間,同一套間的多個(gè)住戶共享套間的所有資源,不能進(jìn)入別人的小房間。
舉個(gè)栗子
以我遇到的情況為例:
- 如果我使用虛擬機(jī):
- 創(chuàng)建一個(gè)虛擬機(jī),安裝ubuntu,在虛擬機(jī)中配置JAVA10的環(huán)境,運(yùn)行實(shí)驗(yàn)平臺(tái)
- 創(chuàng)建一個(gè)虛擬機(jī),安裝ubuntu,在虛擬機(jī)中配置JAVA8的環(huán)境,運(yùn)行開(kāi)發(fā)平臺(tái)
- 如果我使用docker容器:
- 安裝ubuntu的鏡像
- 創(chuàng)建一個(gè)容器,配置JAVA10的環(huán)境,運(yùn)行實(shí)驗(yàn)平臺(tái)
- 創(chuàng)建一個(gè)容器,配置JAVA8的環(huán)境,運(yùn)行開(kāi)發(fā)平臺(tái)
這樣說(shuō)可能還是沒(méi)有體現(xiàn) docker 的特點(diǎn)我們來(lái)畫一個(gè)簡(jiǎn)單的圖(為了更形象加上了一個(gè)CentOS靈魂畫手上線)
超簡(jiǎn)單使用入門
安裝
安裝這種小事,自己去官網(wǎng)看咯~
ps:我使用的是deepin15.7系統(tǒng),安裝可以戳–>博客
下面的操作將以u(píng)buntu為例~
搜索/查看/添加/刪除鏡像
- 搜索鏡像:docker search ubuntu
- 下載鏡像:docker pull ubuntu
- 查看已經(jīng)下載的所有鏡像:docker images
- 刪除鏡像:
啟動(dòng)新容器
- docker run -i -t ubuntu:latest
其中參數(shù)-i指交互式,-t指臨時(shí)終端
我個(gè)人感覺(jué)與其說(shuō)是啟動(dòng)容器,不如說(shuō)是創(chuàng)建一個(gè)新的容器,因?yàn)槊看斡蒙厦娴闹噶顒?chuàng)建的容器都是不同的,在這里就不得不提一下踩的一個(gè)坑:假設(shè)我們先創(chuàng)建了一個(gè)容器并進(jìn)行改動(dòng),下次如果還想使用這個(gè)改動(dòng)過(guò)的容器不應(yīng)該使用docker run 而是docker start,這個(gè)我們后面再提~
由于我們沒(méi)有為這個(gè)容器命名,所以docker為這個(gè)容器分配了一個(gè)隨機(jī)id,也就是上面圖片中的d8a37fb0aaf8
退出當(dāng)前容器
- 在容器的終端中輸入exit或者ctrl+D
- (這個(gè)就不截圖了吧,,,,)
查看容器
- docker ps :列出當(dāng)前所有正在運(yùn)行的container
- docker ps -l:列出最近一次啟動(dòng)的container
- docker ps -a :列出所有的container(包含歷史,即運(yùn)行過(guò)的container)
- docker ps -q :列出最近一次運(yùn)行的container ID
根據(jù)上面的docker ps -a命令我們可以看到我已經(jīng)創(chuàng)建過(guò)兩個(gè)容器。
啟動(dòng)并進(jìn)入容器
上面我提到,如果我在一個(gè)容器里面進(jìn)行了修改并退出,那么當(dāng)我下次docker run的時(shí)候并不會(huì)進(jìn)入這個(gè)我修改過(guò)的容器而是創(chuàng)建一個(gè)新的容器,大家可以嘗試一下下面的代碼:
docker run -i www.longboshyl.cn www.fengshen157.com -t ubuntu:www.dfgjpt.com/ latest /bin/bash # 創(chuàng)建一個(gè)容器 # 下面的操作是在容器中的操作 touch /home/test.txt # 在新容器的home目錄下創(chuàng)建一個(gè)test.txt文件夾 exit # 退出當(dāng)前容器 docker run -i -t www.zhongdayule.cn/ ubuntu:latest /bin/bash # 再創(chuàng)建一個(gè)容器 # 下面的操作是在容器中的操作 cd /home # 進(jìn)入home目錄 ls # 查看home目錄下的所有內(nèi)容,(當(dāng)然是空的)這是為什么呢~因?yàn)椴煌娜萜饔凶约邯?dú)立的改動(dòng)層,不同的容器是不互通數(shù)據(jù)滴~
所以如果我們要使用一個(gè)容器的時(shí)候要執(zhí)行的命令是docker start [容器名/容器id],當(dāng)然在執(zhí)行這條命令之后是沒(méi)有任何反應(yīng)的,還要再加上一條docker attach [容器名/容器id],也可以使用docker exec -i -t [容器id] /bin/bash,->看圖
創(chuàng)建命名的容器
上面我們進(jìn)行的所有操作都是通過(guò)容器id進(jìn)行的,但是這樣很繁瑣,如果創(chuàng)建了多個(gè)容器可能會(huì)混亂,在docker run的時(shí)候我們就可以進(jìn)行命名
docker run docker run -i -t ubuntu:latest /bin/bash?
轉(zhuǎn)載于:https://www.cnblogs.com/qwangxiao/p/9744180.html
總結(jié)
以上是生活随笔為你收集整理的docker 初体验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [国家集训队]部落战争
- 下一篇: Number Theory Proble