Docker簡介
什么是docker
官方解釋:
Docker is the company driving the container movement and the only container platform provider to address every application across the hybrid cloud. Today’s businesses are under pressure to digitally transform but are constrained by existing applications and infrastructure while rationalizing an increasingly diverse portfolio of clouds, datacenters and application architectures. Docker enables true independence between applications and infrastructure and developers and IT ops to unlock their potential and creates a model for better collaboration and innovation.
Google翻譯:
Docker是推動集裝箱運(yùn)動的公司东跪,也是唯一一家應(yīng)對整個混合云中的每個應(yīng)用的集裝箱平臺提供商畸陡。 當(dāng)今的企業(yè)面臨著數(shù)字化轉(zhuǎn)型的壓力,但受到現(xiàn)有應(yīng)用程序和基礎(chǔ)架構(gòu)的制約虽填,同時合理化日益多樣化的云丁恭,數(shù)據(jù)中心和應(yīng)用程序架構(gòu)產(chǎn)品組合。 Docker實現(xiàn)了應(yīng)用程序和基礎(chǔ)架構(gòu)與開發(fā)人員和IT操作員之間的真正獨(dú)立性卤唉,從而發(fā)揮他們的潛力并創(chuàng)建更好的協(xié)作和創(chuàng)新模式涩惑。
為什么用docker
在微服務(wù)的大背景下仁期,一臺物理機(jī)或者云主機(jī)可能要運(yùn)行很多應(yīng)用桑驱。應(yīng)用必須依賴于開發(fā)環(huán)境竭恬。當(dāng)我們遇到拓展物理機(jī)、云主機(jī)熬的、應(yīng)用遷移等場景痊硕,必然要重新搭建開發(fā)環(huán)境。這時押框,虛擬化技術(shù)就很好地保證環(huán)境一致岔绸、配置一致,并且讓你更高效地遷移應(yīng)用橡伞。
Docker正是應(yīng)對這種場景的虛擬化技術(shù)盒揉。例如java,只要機(jī)器上安裝了JVM兑徘,一份代碼到處運(yùn)行刚盈。應(yīng)用好比java,只要機(jī)器上安裝docker挂脑,我們事先保存的鏡像可以到處運(yùn)行藕漱。這些鏡像可以是nginx、php崭闲、mysql肋联、數(shù)據(jù)倉庫等,無論你的主機(jī)從ubuntu遷移到centos刁俭,還是windows遷移linux橄仍,只要主機(jī)安裝了docker,就能迅速地部署好新環(huán)境牍戚,并且保持環(huán)境沙兰、配置一致。
詳情參考 《Docker從入門到實踐》—— “為什么用Docker”
鏡像翘魄、容器鼎天、倉庫
鏡像,是特殊的文件系統(tǒng)暑竟,他包含程序斋射、配置、資源等但荤;
容器罗岖,鏡像的實例。就像是類和實例一樣腹躁,鏡像是靜態(tài)的定義桑包,容器是鏡像運(yùn)行時的實體。容器可以被創(chuàng)建纺非、啟動哑了、停止赘方、刪除、暫停等弱左。
倉庫窄陡,用于保存鏡像的服務(wù)。
CentOS安裝docker
安裝之前拆火,建議先yum -y upgrade
更新軟件包跳夭。
官方安裝腳本
curl -sSL https://get.docker.com/ | sh
官方安裝指南:docker/docker-install
阿里云安裝腳本
由于國內(nèi)墻的原因,如果安裝官方腳本很慢们镜,可以試試阿里云安裝腳本:
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
如果你是其他操作系統(tǒng)币叹,參考一下《安裝 Docker》
Windows安裝docker
官方文檔Install Docker Toolbox on Windows挺詳細(xì)的了,下載安裝docker toolbox模狭。
如果遇到:
This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory.
修改一下BIOS設(shè)置:
重啟電腦后按F2或F10進(jìn)入BIOS界面(不同主板型號進(jìn)入BIOS所需按鍵不同)套硼。 進(jìn)入BIOS界面:Configuratio > Intel Virtualization Technology > Enabled。 注:主板不一樣其BISO中顯示關(guān)鍵詞也不一樣的胞皱,主要是找到Virtual或Virtualization將其設(shè)置為Enabled邪意。
重啟docker
service docker restart
這一步很重要,如果不重啟反砌,docker pull
時會有如下錯誤:
Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon. Is the docker daemon running on this host?)...
鏡像
搜索鏡像
你可以在Docker Hub或Docker Store上搜索你要的鏡像雾鬼。例如,你要找nginx
:
1.搜索nginx
2.瀏覽官方nginx鏡像詳情宴树,可以看到有很多版本(準(zhǔn)確來說是tag
)選擇
拉取鏡像
從 Docker Registry 獲取鏡像的命令是 docker pull
抢呆,官方文檔茧吊。其命令格式為:
docker pull [選項] name[:tag]
例如嚼松,拉取剛才搜到的nginx:latest
docker pull nginx
如果你想拉取某個tag
的nginx
虾啦,則執(zhí)行docker pull nginx:{tag}
,例如docker pull nginx:1.13
锭吨。如不寫tag
蠢莺,默認(rèn)latest
。
如果出現(xiàn)如下信息零如,說明安裝成功
Using default tag: latest
latest: Pulling from library/nginx
8176e34d5d92: Pull complete
cb1142c3ae99: Pull complete
45b531966c63: Pull complete
Digest: sha256:0ffc09487404ea43807a1fd9e33d9e924d2c8b48a7b7897e4d1231a396052ff9
Status: Downloaded newer image for nginx:latest
列出本地鏡像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 9e988ed19567 43 hours ago 109MB
說明已拉取一個nginx:latest
鏡像到本地了躏将。
刪除鏡像
使用docker rmi
命令刪除鏡像,官方文檔考蕾。格式是:
docker rmi -f {repository}:{tag}
或
docker rmi -f {image id}
例如祸憋,刪除剛才安裝的nginx:latest
,docker rmi -f nginx:latest
或docker rmi -f 9e988ed19567
肖卧。
容器
啟動容器有兩種方式:
- 基于鏡像新建一個容器并啟動蚯窥;
- 重新啟動在終止?fàn)顟B(tài)(stopped)的容器。
新建并啟動
基于鏡像啟動新容器,用docker run
命令拦赠,官方文檔巍沙,格式:
docker run [options] image [command] [arg...]
我們啟動nginx
:
docker run --name my_nginx -p 80:80 -d nginx
(如果啟動指定tag
nginx,則docker run ... nginx:{tag}
即可)
options說明:
--name 指定容器名矛紫,"--name my_nginx"指定容器名為"my_nginx";
-p 映射端口,"-p 80:80"表示映射容器80端口到主機(jī)80端口牌里,
參數(shù)格式ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
-d 在后臺運(yùn)行颊咬,并打印container id
查看容器狀態(tài)
$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
fcc368a4d5c0 nginx "nginx -g 'daemon of…" ... 0.0.0.0:80->80/tcp my_nginx
(省略了CREATED
& STATUS
字段)
如果my_nginx
存在,證明容器在運(yùn)行牡辽。假如服務(wù)器ip是45.77.146.10
喳篇,在瀏覽器打開:
出現(xiàn)nginx畫面,證明nginx容器正常運(yùn)行态辛,并成功映射80端口麸澜。
進(jìn)入容器
使用docker exec
命令,官方文檔:
$ docker exec -it my_nginx bash
root@fcc368a4d5c0:#
對容器的操作奏黑,就像普通linux那樣炊邦。我們定位到/usr/share/nginx/html/
目錄,列出所有文件:
# cd /usr/share/nginx/html/
# ls
50x.html index.html
目錄下有50x.html
和index.html
兩個文件熟史,我們新建一個test.html
:
echo "<html><header><title>測試頁面</title></header>test</html>" >> test.html
在瀏覽器打開http://45.77.146.10/test.html
:
停止容器
使用docker stop
命令馁害,官方文檔,格式:
docker stop [options] container
停止my_nginx
容器:
docker stop my_nginx
(也可以指定container id
停止容器蹂匹,docker stop fcc368a4d5c0
)
查看停止?fàn)顟B(tài)容器
剛才my_nginx
容器碘菜,只是停止了,并沒有銷毀限寞。執(zhí)行命令:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fcc368a4d5c0 nginx "nginx -g 'daemon of…" 17 minutes ago Exited (0) 7 seconds ago my_nginx
我們看到my_nginx
處于停止?fàn)顟B(tài)忍啸。當(dāng)已存在name
為my_nginx
,就不可以再run
一個--name my_nginx
的容器履植。
我們試試docker run --name my_nginx -d nginx
计雌,會報錯:
docker: Error response from daemon: Conflict.
The container name "/my_nginx" is already in use by container "fcc368a4d5c0f7e0c1fb9bf60780623f1ad5613d68a6496e5fd41bd0a05c3b0a". You have to remove (or rename) that container to be able to reuse that name.
重啟容器
docker start my_nginx
然后查看容器狀態(tài)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fcc368a4d5c0 nginx "nginx -g 'daemon of…" 24 minutes ago Up 7 minutes 0.0.0.0:80->80/tcp my_nginx
my_nginx已重啟,保留著之前的狀態(tài)玫霎。
刪除容器
刪除容器前白粉,必須先停止容器。刪除命令:
docker rm my_nginx
再次查看終止?fàn)顟B(tài)容器鼠渺,docker ps -a
:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
my_nginx
已被銷毀鸭巴。銷毀的容器不能再用docker start
啟動,必須用docker run
新建容器拦盹。
關(guān)于作者
我是鍵盤男鹃祖。
在廣州生活,在互聯(lián)網(wǎng)公司上班普舆,猥瑣文藝碼農(nóng)恬口。喜歡科學(xué)校读、歷史,玩玩投資祖能。