??最近暫停了對SpringCloud的繼續(xù)學(xué)習(xí),是因?yàn)橛腥苏fSpringCloud脫離了docker,devops就像一道大餐沒有加鹽一樣。有時(shí)候馬不停蹄的去學(xué)習(xí)是為了想縮小與別人的差距,但是,個(gè)人覺得要學(xué)精一樣?xùn)|西,還是必須要學(xué)會(huì)一些輔助性或者基本的技能才行。好了,話不多說,這里就簡單總結(jié)下自己學(xué)到的docker方面的內(nèi)容
1.什么是docker
??官方說docker是一個(gè)開源工程,可以將任何應(yīng)用以輕量級容器的形式進(jìn)行打包和發(fā)布。(有點(diǎn)抽象)
??其實(shí)docker可以粗糙的理解為輕量級的虛擬機(jī),但是它又不是虛擬機(jī)。
??虛擬機(jī)是在宿主HostOS上有一個(gè)Hepervisor層上虛擬出硬件,在這個(gè)虛擬硬件上我們會(huì)安裝獨(dú)立的GuestOS,然后在里面運(yùn)行各種各樣的程序。
??docker和虛擬機(jī)不一樣的是,它有一層Docker Engine,它很好的利用了Host OS里面的namespace,然后將應(yīng)用程序分離,因?yàn)闆]有虛擬層這一層,所以它的運(yùn)行速度比虛擬機(jī)快,啟動(dòng)成本也比虛擬機(jī)快很多,這就是docker為什么深受青睞的原因
2.docker的架構(gòu)
DOCKER_HOST是我們進(jìn)行docker操作的虛擬機(jī),在這里運(yùn)行了一個(gè)叫做Docker daemon的核心程序,通過它可以下載鏡像,運(yùn)行容器。那么我們?nèi)绾闻c這個(gè)Docker daemon進(jìn)行交互呢?通過Client的命令與之交互(很廢話~)。最右邊的Registry是提供鏡像的地方,所有的用戶都可以在這上面拉取鏡像,或者是放鏡像上去。
3.docker的hello world
??3.1啟動(dòng)docker daemon進(jìn)程
??service docker start
??3.2拉取一個(gè)ubuntu鏡像
??sudo docker pull ubuntu
??3.3運(yùn)行ubuntu鏡像,并輸出一個(gè)hello docker
??docker run ubuntu echo hello docker
??大家可以想象下,如果沒有docker,我們啟動(dòng)一個(gè)虛擬機(jī),然后打印一個(gè)hello docker要耗費(fèi)多長時(shí)間現(xiàn)在有了docker可以說是非常的方便。
??3.4docker images展示目前所有下載的鏡像
??3.5docker ps展示docker目前運(yùn)行的進(jìn)程
4.利用docker玩轉(zhuǎn)Nginx
??4.1docker run -p 8080:80 -d nginx運(yùn)行nginx,將80端口映射為8080端口,-d是后臺(tái)運(yùn)行的意思
??4.2docker cp index.html 1e3533e84086://usr/share/nginx/html將一個(gè)靜態(tài)頁面放入到容器中
??4.3docker stop 1e3533e84086
當(dāng)我們stop掉,再次啟動(dòng)nginx的時(shí)候,我們會(huì)發(fā)現(xiàn)之前放進(jìn)去的頁面失效了。
??4.4docker commit -m 'fun' ce54f745d1c3 可以通過這個(gè)命令提交我們的改動(dòng),也可以寫成docker commit -m '隨便寫' ce54f745d1c3 nginx-fun,指定一個(gè)名字,可以通過docker images看到nginx-fun,否則看到的是none
??4.5docker rmi 120f1ee8f07b刪除掉不需要的鏡像
??4.6docker ps -a可以展示歷史進(jìn)程
??4.7docker rm ce54f745d1c3 1e3533e84086刪掉歷史進(jìn)程(可以刪除多個(gè))
5.dockerfile介紹
之前我們通過commit創(chuàng)建了一個(gè)新的鏡像,這里我們用dockerfile來生成新的鏡像
??5.1新建一個(gè)dockerfile
FROM ubuntu
MAINTAINER zzm
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
EXPOSE 80
??5.2創(chuàng)建新鏡像
docker build -t zzm/hello-nginx .
??5.3運(yùn)行新鏡像
docker run -d -p 80:80 zzm/hello-nginx
??詳細(xì)的dockerfile語法可以見Docker Dockerfile 定制鏡像
6.volume介紹
??6.1定義:提供獨(dú)立于容器之外的持久化存儲(chǔ)
??6.2作用:我們知道docker容器里面是不會(huì)保存任何東西的,但是如果我們的容器里面用的數(shù)據(jù)庫想要保存數(shù)據(jù)信息該怎么辦呢?這個(gè)時(shí)候volume的作用就非常大了,通過它可以掛載容器之外的一些目錄或磁盤,這樣在容器之外修改了相應(yīng)的內(nèi)容,容器內(nèi)部還是能感知到的。
7.鏡像倉庫
8.容器app
關(guān)于docker-compose的優(yōu)缺點(diǎn),大家可以看看這篇文章:
docker compose