docker是什么
官方解釋
docker是一個開源的容器應(yīng)用引擎,基于go語言澳化。我們可以用docker部署出一個個的容器崔步,每一個容器可以看作是一個虛擬的系統(tǒng)。這就類似于我們在我們的電腦上安裝了虛擬機(比如centos缎谷,Ubuntu等)井濒,只是docker性能更強,占用空間更少列林,并且擁有更豐富的功能瑞你。
個人理解
如果重裝過系統(tǒng),或者安裝過虛擬機都知道希痴,所謂安裝系統(tǒng)都需要一個鏡像者甲,這個鏡像可以是官方提供的原版鏡像,也可以是某些人制作了預(yù)裝了某些軟件的ghost鏡像砌创;而使用docker部署容器虏缸,也需要鏡像,這些鏡像也是可以是純正的系統(tǒng)文件嫩实,也可以是預(yù)裝了軟件的鏡像寇钉,我們使用預(yù)裝了軟件的鏡像部署出來的容器,容器就有那個軟件舶赔,甚至啟動容器后會自動運行那個軟件扫倡,比如一個redis的鏡像可以直接運行出一個redis服務(wù)的容器,而不需要我們?nèi)ト萜髦邢螺d安裝部署redis竟纳;一個鏡像甚至可以快速部署出多個容器撵溃;比如你只需要咔咔咔,就可以快速部署出多個redis服務(wù)锥累。
docker和傳統(tǒng)VM有什么不同
從理論上說Docker Container概念并不新鮮,各種虛擬機也起著類似的作用缘挑。Docker Container和普通的虛擬機Image相比,最大的區(qū)別是它并不包含操作系統(tǒng)內(nèi)核,它和宿主機共用一套操作系統(tǒng)內(nèi)核桶略。
Docker 的作用
現(xiàn)實中语淘,我們要海運各種不同的貨物诲宇,比如火車,汽車惶翻,大型器械姑蓝,或者其他各種小件商品,如果直接把他們丟到船上吕粗,會出現(xiàn)這些商品隨地滑落纺荧,并且不便整理,為了解決這個問題颅筋,我們發(fā)明了集裝箱宙暇。
簡單的說Docker是一個構(gòu)建在LXC之上的,基于進程容器(Processcontainer)的輕量級VM解決方案。Docker的初衷也就是將各種應(yīng)用程序和他們所依賴的運行環(huán)境打包成標(biāo)準(zhǔn)的container/image,進而發(fā)布到不同的平臺上運行议泵。
那么docker的作用有哪些呢占贫?
- Docker解決了運行環(huán)境和配置問題,方便發(fā)布先口,也就方便做持續(xù)集成靶剑。,比如同一份代碼在我這邊明明可以正常運行,但是到你那邊卻出現(xiàn)了問題池充。這可能就是環(huán)境問題了桩引。如果用docker的話,將整個環(huán)境都一起打包過去收夸,那么不存在環(huán)境問題了坑匠。
- 更輕量的虛擬化,節(jié)省了虛擬機的性能損耗卧惜。
docker的結(jié)構(gòu)
核心概念
- 鏡像
類似于安裝系統(tǒng)的ISO文件/ghost文件厘灼,各種軟件和應(yīng)用的集成。 - 容器
類似于虛擬機咽瓷,是鏡像部署以后出來的東西设凹。 - 倉庫
存放鏡像的一個場所,我們可以從這個倉庫中獲取各種各樣的鏡像文件茅姜;它有公共倉庫和私有倉庫闪朱,公共倉庫是docker公司自己的倉庫,私有倉庫我們可以自己搭建钻洒。
架構(gòu)
相比普通虛擬機奋姿,docker省去操作系統(tǒng),整個層級簡化素标;普通虛擬機基于虛擬化的硬件平臺称诗,而docker則是直接在宿主平臺上運行各種應(yīng)用。其本質(zhì)是在底層使用LXC啟動一個Linux Container,通過cgroup/namespace等機制對不同的container內(nèi)運行的應(yīng)用程序進行隔離,權(quán)限管理和quota分配等每個container擁有自己獨立的各種命名空間(亦即資源)包括:PID進程, MNT文件系統(tǒng), NET網(wǎng)絡(luò), IPC, UTS主機名等头遭。
docker的安裝
- 安裝必要的一些系統(tǒng)工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加軟件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新并安裝 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
- 創(chuàng)建目錄并且添加daemon.json文件
sudo mkdir /etc/docker
vim /etc/docker/daemon.json
{
"storage-driver": "devicemapper"
}
- 啟動docker
sudo systemctl start docker
- 重看docker是否啟動成功和docker信息
sudo docker info
運行一個docker實例
例子:運行一個apache服務(wù)器的容器寓免,查看實例癣诱,并且進入容器中。
- 使用httpd的鏡像運行一個Apache服務(wù)器容器
docker run -d -p 8020:80 httpd
-- 這里的-p 8020:80
是指把docker容器中的Apache服務(wù)器的80端口映射到本機的8020端口袜香。 - 查看實例
docker ps
[root@centos _data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db242c680ba9 httpd "httpd-foreground" 2 days ago Up 23 hours 0.0.0.0:8020->80/tcp pedantic_franklin
-- 已經(jīng)可以看到一個container_id為db242c680ba9的httpd鏡像容器在運行撕予。
- 進入容器并且查看
docker exec -it db242c680ba9 bash
-- 我們都說docker容器是一個輕量級的虛擬機,用exec命令我們就可以進入這個虛擬機中困鸥,如果想退出就是用exec嗅蔬。 - 訪問我們開啟的Apache服務(wù)
ps -aux | grep docker-proxy
-- 宿主機中用該命令查看我們開啟docker容器的ip為172.17.0.4剑按。
curl -i 172.17.0.4
-- 訪問服務(wù)