認(rèn)識(shí)Docker?
Docker是一個(gè)開(kāi)源的容器引擎,它基于LXC容器技術(shù),使用Go語(yǔ)言開(kāi)發(fā)。
源代碼托管在Github上,并遵從Apache2.0協(xié)議。
Docker采用C/S架構(gòu),其可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。
Docker是開(kāi)發(fā),運(yùn)行和部署應(yīng)用程序的開(kāi)放管理平臺(tái).開(kāi)發(fā)人員能利用docker開(kāi)發(fā)和運(yùn)行應(yīng)用程序, 運(yùn)維人員能利用docker部署和管理應(yīng)用程序。
簡(jiǎn)單來(lái)說(shuō):Docker就是一種快速解決生產(chǎn)問(wèn)題的一種技術(shù)手段。
為什么使用Docker?
- 跨環(huán)境一致性
- 降低配置開(kāi)發(fā)環(huán)境、生產(chǎn)環(huán)境的復(fù)雜度和成本
- 可移植性較強(qiáng)。可在多個(gè)平臺(tái)使用:比如:亞馬遜、谷歌、微軟等
- 隔離性。能保證每個(gè)容器中的資源隔離性。
- 實(shí)現(xiàn)程序的快速部署和分發(fā)
例如:
1,我在本地寫(xiě)代碼,可直接通過(guò)docker與同事進(jìn)行共享,實(shí)現(xiàn)協(xié)同工作。方便。
2,在服務(wù)器上刪除一些應(yīng)用程序是很難的,但是docker就不一樣了,不會(huì)產(chǎn)生依賴(lài)關(guān)系沖突。
3,在docker寫(xiě)完代碼后,可直接進(jìn)行自動(dòng)測(cè)試和手動(dòng)測(cè)試
4,如果在開(kāi)發(fā)環(huán)境中,發(fā)現(xiàn)錯(cuò)誤的話(huà),直接在開(kāi)發(fā)環(huán)境中修改,然后去測(cè)試環(huán)境中測(cè)試和驗(yàn)證
5,如果開(kāi)發(fā)完成之后,交付時(shí),直接交付docker就行了。
docker與虛擬機(jī)的區(qū)別?
相同點(diǎn):
- docker與虛擬機(jī)一樣,都對(duì)物理硬件資源共享
- 而且他們的生命周期基本=相似(創(chuàng)建、啟動(dòng)、暫停、關(guān)閉))
- 他們都可以安裝自己的應(yīng)用,比如mysql,redis,nginx等
- 同虛擬機(jī)一樣,創(chuàng)建完容器后,戶(hù)存在 var/lib/docker/containers
不同點(diǎn):
- 虛擬機(jī)的創(chuàng)建、啟動(dòng)、關(guān)閉都是基于一個(gè)完整的操作系統(tǒng),一個(gè)虛擬機(jī)就是一個(gè)完整的操作系統(tǒng),而docker是直接運(yùn)行在宿主機(jī)上的,所以docker更像是一系列的進(jìn)程
- 容器是輕量級(jí)的,虛擬機(jī)是重量級(jí)的,容器的創(chuàng)建、啟動(dòng)和關(guān)閉肯定都比虛擬機(jī)要執(zhí)行的效率快得多。
- 這也就意味著,在給定的硬件上能運(yùn)行很多個(gè)容器,卻不能運(yùn)行太多的虛擬機(jī)。
相應(yīng)的,docker也有一些缺點(diǎn):依賴(lài)網(wǎng)絡(luò)、?依賴(lài)操作系統(tǒng)、銀行U盾等場(chǎng)景不能用
Docker基礎(chǔ)命令?
docker 安裝:
查看支持的docker版本
apt-cache madison docker-ce
安裝docker
apt-get install docker-ce -y
注:可以指定版本安裝docker:
apt-get install docker-ce=<VERSION> -y
啟動(dòng)docker
systemctl start docker
systemctl status docker
注意:
?ubuntu安裝完畢后,默認(rèn)就開(kāi)啟服務(wù)了
檢查docker是否安裝成功
sudo docker run hello-world
顯示: hello from Docker! 表示已經(jīng)安裝成功
提示:
提示1: 如果不想每次都輸入sudo, 執(zhí)行,
sudo usermod -a -G docker $USER
提示2: 如果沒(méi)有鏡像,會(huì)去下載
啟動(dòng),停止docker服務(wù),監(jiān)測(cè)狀態(tài)
啟動(dòng)
sudo service docker start
停止
sudo service docker stop
重啟docker
sudo service docker restart
狀態(tài)檢查
sudo service docker status
容器的管理?
容器就類(lèi)似于我們運(yùn)行起來(lái)的一個(gè)操作系統(tǒng),而且這個(gè)操作系統(tǒng)啟動(dòng)了某些服務(wù)。
這里的容器指的是運(yùn)行起來(lái)的一個(gè)Docker鏡像
容器類(lèi)操作:
1,查看容器
最簡(jiǎn)單的命令
docker ps -a
查看所有運(yùn)行的容器
docker container ls
查看運(yùn)行和停止的容器
docker container ls -all
2,查看nginx容器全部信息
docker inspect nginx
3,查看所有的容器編號(hào)
docker ps -q
docker ps -a -q
4,運(yùn)行,停止運(yùn)行容器、刪除容器
運(yùn)行容器
sudo docker container start 容器名或id
停止容器
docker container stop 容器名或id
docker container kill 容器名或id
刪除容器
sudo docker container rm 容器名或id
5,進(jìn)入創(chuàng)建的容器(myubuntu)
docker exec -it myubuntu /bin/bash
6 ,使用鏡像,創(chuàng)建交互式容器
docker run [option] --name=容器名稱(chēng) 鏡像 [傳入的命的命令]
例如:
docker run -it --name=myubuntu ubuntu
解釋: 使用ubuntu鏡像創(chuàng)建交互式容器, 名字為myubuntu
退出容器: ctrl + d
7,通過(guò)nginx容器創(chuàng)建nginx:v1.0鏡像
docker commit -m 'add ifconfig' -a 'carry' nginx1 nginx:v1.0
8,守護(hù)進(jìn)程nginx
讓Docker容器在后臺(tái)以守護(hù)形式運(yùn)行。此時(shí)可以通過(guò)添加-d參數(shù)來(lái)實(shí)現(xiàn)
docker run -d nginx
鏡像類(lèi)管理:
Docker鏡像是什么?
它是一個(gè)只讀的文件,就類(lèi)似于我們安裝操作系統(tǒng)時(shí)候所需要的那個(gè)iso光盤(pán)鏡像,通過(guò)運(yùn)行這個(gè)鏡像來(lái)完成各種應(yīng)用的部署。這里的鏡像就是一個(gè)能被docker運(yùn)行起來(lái)的一個(gè)程序
鏡像操作:
1,查看所有docker鏡像
docker image ls
或者: docker images
2,查看所有docker歷史鏡像
docker history xxx
3,拉取云端鏡像 | 下載鏡像(pull)
docker image pull xxx
搜索鏡像: docker image search xxx
4,鏡像備份 (tag 原鏡像 新鏡像)
docker tag hello-world:latest hello-world:v2.0
5,刪除鏡像
docker rmi xxx
docker image rm 鏡像名或id
6,刪除未使用的鏡像(慎用)
docker image prune
7,導(dǎo)出鏡像(save -o)
docker save -o my_hello_world.tar hello-world:latest
8,導(dǎo)入鏡像(load -i 本地鏡像包)加載本地鏡像
docker load -i my_hello_world.tar
參考官方資料
Docker 官網(wǎng):http://www.docker.com
Github Docker 源碼:https://github.com/docker/docker