摘要:查看,則可以看到成功了一個(gè)執(zhí)行命令則可以查看鏡像的層級(jí)執(zhí)行命令鏡像標(biāo)簽名則可以生成一個(gè)運(yùn)行程序。
Docker容器 概述 1、之前項(xiàng)目的部署方式的缺點(diǎn)
通過物理機(jī)方式部署,如圖所示
部署非常慢
成本非常高
資源浪費(fèi)
難于遷移和擴(kuò)展
可能會(huì)被限定硬件廠商
2、虛擬化技術(shù)的出現(xiàn)通過虛擬化的技術(shù),我們可以使用一臺(tái)物理機(jī)部署多個(gè)app,每個(gè)app獨(dú)立運(yùn)行在一個(gè)VM里
虛擬化技術(shù)的優(yōu)點(diǎn):
資源池 ———— 一個(gè)物理機(jī)的資源分配到了不同的虛擬機(jī)里
很容易擴(kuò)展 ———— 加物理機(jī)器or加虛擬機(jī)
很容易云化 ———— 亞馬遜AWS,阿里等
虛擬化的局限性
每一個(gè)虛擬機(jī)都是一個(gè)完整的操作系統(tǒng),要給其分配資源,當(dāng)虛擬機(jī)數(shù)量增多時(shí),操作系統(tǒng)本身消耗的資源勢(shì)必增多
3、容器技術(shù)的出現(xiàn)容器解決了什么問題?
解決了開發(fā)和運(yùn)維之間的矛盾
在開發(fā)和運(yùn)維之間搭建了一個(gè)橋梁,是實(shí)現(xiàn)devops最佳解決方案
什么是容器?
對(duì)軟件和其依賴的標(biāo)準(zhǔn)化打包
應(yīng)用之間相互隔離
共享同一個(gè)OS Kernel
可以運(yùn)行在很多主流操作系統(tǒng)上
注:容器和虛擬機(jī)的區(qū)別在于容器是APP層面的隔離,而虛擬化是物理資源層面的隔離
Docker的架構(gòu)和底層技術(shù) Docker PlatformDocker提供了一個(gè)開發(fā),打包,運(yùn)行app的平臺(tái)
把a(bǔ)pp和底層infrastructure隔離開來
其三層模型如圖:
Docker Engine后臺(tái)進(jìn)行(dockerd)
REST API Server
CLI接口(docker)
底層技術(shù)支持其主要利用Linux的底層技術(shù)
Namespaces:做隔離pid,net,ipc,mnt,uts
Control groups:做資源限制
Union file systems:Container和image的分層
Docker Image概述 什么是Image文件和meta data的集合(root filesystem)
分層的,并且每一層都可以添加改變刪除文件,成為一個(gè)新的image
不同的image可以共享相同的layer
Image本身是read-only的
Image的獲取方式1:Build from Dockerfile
方式2:Pull from Registry
例如:輸入命令 sudo docker pull ubuntu:14.04,則會(huì)從Registry中拉出Image,Registry類似于github的作用,默認(rèn)都是從docker hub上面拉取,上面會(huì)有官方和第三方的版本
輸入命令 sudo docker image ls則可以顯示所拉去的Image
如何做一個(gè)自己的Base Image1.首先創(chuàng)建一個(gè)可以執(zhí)行的程序,下面用一個(gè)C語言的hello程序做例子
2.通過dockerfile把這個(gè)可執(zhí)行文件打成一個(gè)Image
我們?cè)趆ellow文件當(dāng)前目錄下創(chuàng)建一個(gè)Dockerfile文件,如下:
3.執(zhí)行命令:docker build -t yunduan/hello-world . (-t表示指示表情,"."表示在當(dāng)前路徑下尋找dockerfile),執(zhí)行以后,出現(xiàn)如下界面表示執(zhí)行成功。
4.查看image,則可以看到成功build了一個(gè)image,執(zhí)行命令docker history +[IMAGE ID]則可以查看鏡像的層級(jí)
,執(zhí)行命令docker run + [鏡像標(biāo)簽名]則可以生成一個(gè)container運(yùn)行程序。
通過Image創(chuàng)建(copy)
在Image layer之上建立一個(gè)container layer(可讀寫)
類比面向?qū)ο螅侯惡蛯?shí)例
Image負(fù)責(zé)app的存儲(chǔ)和分發(fā),Container負(fù)責(zé)運(yùn)行app
Container相關(guān)命令查詢container狀態(tài) docker container ls -a
創(chuàng)建容器 docker run centos
創(chuàng)建容器 docker run -it centos
移除容器 docker container rm + [container ID]
移除鏡像 docker image rm + [image ID]
顯示所有containerID docker container ls -aq
移除所有的container docker rm $(docker container ls -aq)
構(gòu)建自己的Docker鏡像命令一:docker container commit(Create a new image from a container"s changes)
這個(gè)命令表示當(dāng)你在容器中做出了改變之后,可以重新構(gòu)建Image
通過這個(gè)例子可以看出,其就在centos鏡像上重新構(gòu)建了一層
命令二:docker image build(Build an image from a Dockerfile)
Dockerfile語法梳理FROM
原則:盡量使用官方的image作為base image!
FROM scratch #制作base image FROM centos #使用base image FROM ubuntu:14.04
LABEL
原則:Metadata不可少!相當(dāng)于代碼的注釋
LABEL maintainer="[email protected]" LABEL version="1.0" LABEL description="This is description"
RUN
作用:執(zhí)行命令并創(chuàng)建新的Image Layer
原則:為了美觀,復(fù)雜的RUN請(qǐng)用反斜線換行!避免無用分層,合并多條命令成一行!
RUN yum update && yum install -y vim python-dev #反斜線換行
RUN apt-get update && apt-get install -y perl pwgen --no-install-recommends && rm -rf /var/lib/apt/lists/* #注意清理cache
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME"
WORKDIR
作用:設(shè)定當(dāng)前目錄,類似于cd
原則:用WORKDIR,不要用RUN cd!盡量使用絕對(duì)目錄
WORKDIR /root
WORKDIR /test #如果沒有會(huì)自動(dòng)創(chuàng)建test目錄 WORKDIR demo RUN pwd #輸出結(jié)果應(yīng)該是 /test/demo
ADD and COPY
作用:把本地文件添加到Docker image里面
原則:大部分情況,COPY優(yōu)先于ADD!ADD除了COPY還有額外功能(解壓)!添加遠(yuǎn)程文件/目錄請(qǐng)使用curl或者wget!
ADD hello /
ADD test.tar.gz / #添加到根目錄并解壓
WORKDIR /root ADD hello test/ # /root/test/hello
WORKDIR /root COPY hello test/
ENV
作用:設(shè)置一個(gè)環(huán)境變量,引用常量
原則:盡量使用ENV增加可維護(hù)性!
ENV MYSQL_VERSION 5.6 # 設(shè)置常量 RUN apt-get install -y mysql-server= "${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* # 引用常量
VOLUME and EXPOSE (存儲(chǔ)和網(wǎng)絡(luò))
CMD and ENTRYPOINT
CMD:設(shè)置容器啟動(dòng)后默認(rèn)執(zhí)行的命令和參數(shù)
注釋:1.容器啟動(dòng)時(shí)默認(rèn)執(zhí)行的命令 2.如果docker run指定了其他命令,CMD命令被忽略 3.如果定義了多個(gè)CMD,只有最后一個(gè)會(huì)執(zhí)行
ENTRYPOINT:設(shè)置容器啟動(dòng)時(shí)運(yùn)行的命令
注釋:1.讓容器以應(yīng)用程序或者服務(wù)的形式運(yùn)行 2.不會(huì)被忽略,一定會(huì)執(zhí)行 3.最佳實(shí)踐:寫一個(gè)shell腳本作為entrypoint
1.Shell格式
RUN apt-get install -y vim CMD echo "hello docker" ENTRYPOINT echo "hello docker"
2.Exec格式
RUN ["apt-get","install","-y","vim"] CMD [" /bin/echo" , "hello docker" ] ENTRYPOINT ["/bin/echo" , "hello docker"]
3.Shell和Exec格式
Dockerfile1 A
FROM centos ENV name Docker ENTRYPOINT echo "hello $name"
Dockerfile2
FROM centos ENV name Dokcer ENTRYPOINT ["/bin/bash", "-c","echo hello $name" ]鏡像發(fā)布
docker login
docker push
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76750.html
摘要:系統(tǒng)有兩個(gè)程序服務(wù)端和客戶端。其中服務(wù)端是一個(gè)服務(wù)進(jìn)程,管理著所有的容器??蛻舳藙t扮演著服務(wù)端的遠(yuǎn)程控制器,可以用來控制的服務(wù)端進(jìn)程。守護(hù)進(jìn)程會(huì)處理復(fù)雜繁重的任務(wù),例如建立運(yùn)行發(fā)布你的容器??蛻舳撕褪刈o(hù)進(jìn)程之間通過或者進(jìn)行通信。 預(yù)期學(xué)習(xí)目標(biāo) Docker基本概念 配置本地Docker環(huán)境 容器的生命周期與配置 端口映射和容器鏈接 利用volume保存持久化容器數(shù)據(jù) 檢查容器日志 監(jiān)...
摘要:時(shí)間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。必填用于執(zhí)行命令,當(dāng)執(zhí)行完畢后,將產(chǎn)生一個(gè)新的文件層??蛇x指定此鏡像啟動(dòng)時(shí)默認(rèn)執(zhí)行命令??蛇x用于指定需要暴露的網(wǎng)絡(luò)端口號(hào)??蛇x向鏡像中掛載一個(gè)卷組。 時(shí)間:2017年09月16日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無 學(xué)習(xí)源碼:無 第一章:課程簡(jiǎn)介 1-1 課程介紹 Docke...
摘要:下的使用筆記安裝確認(rèn)是否安裝成功搜索鏡像獲取鏡像查看本地所有鏡像運(yùn)行鏡像,運(yùn)行起來的鏡像就叫做容器了,仔細(xì)看,你會(huì)發(fā)現(xiàn)終端交互的用戶名變掉了,說明我們進(jìn)入到了容器的內(nèi)部。個(gè)人理解是因?yàn)楫a(chǎn)生數(shù)據(jù)需要映射。創(chuàng)建成功后會(huì)返回這個(gè)鏡像的信息。 ubuntu 14.10下docker的使用筆記1 docker 安裝 curl -sSL https://get.docker.com/ | sh ...
摘要:下的使用筆記安裝確認(rèn)是否安裝成功搜索鏡像獲取鏡像查看本地所有鏡像運(yùn)行鏡像,運(yùn)行起來的鏡像就叫做容器了,仔細(xì)看,你會(huì)發(fā)現(xiàn)終端交互的用戶名變掉了,說明我們進(jìn)入到了容器的內(nèi)部。個(gè)人理解是因?yàn)楫a(chǎn)生數(shù)據(jù)需要映射。創(chuàng)建成功后會(huì)返回這個(gè)鏡像的信息。 ubuntu 14.10下docker的使用筆記1 docker 安裝 curl -sSL https://get.docker.com/ | sh ...
摘要:學(xué)習(xí)背景近些年,如果你是一名開發(fā),那么這個(gè)熱門的技術(shù)名詞你一定聽說過,我也不例外,但是因?yàn)槠綍r(shí)沒接觸過,所以一直都沒動(dòng)力去了解使用。 學(xué)習(xí)背景 近些年,如果你是一名開發(fā),那么Docker這個(gè)熱門的技術(shù)名詞你一定聽說過,我也不例外,但是因?yàn)槠綍r(shí)沒接觸過,所以一直都沒動(dòng)力去了解使用。最近在折騰自己維護(hù)在github上的項(xiàng)目的時(shí)候,發(fā)現(xiàn)項(xiàng)目所依賴的外部環(huán)境比較多,比如zookeeper、re...
摘要:持久的標(biāo)準(zhǔn)輸入是交互式的半邊天,標(biāo)志則是另外半邊天,它告訴為要?jiǎng)?chuàng)建的容器分配一個(gè)偽終端。而且一旦刪除容器,鏡像也會(huì)被刪除。顯示最后個(gè)容器,不論這些容器正在運(yùn)行還是已經(jīng)停止。 命令行下創(chuàng)建一個(gè)我們能與之進(jìn)行交互的容器,而不是一個(gè)運(yùn)行后臺(tái)服務(wù)的容器。docker run -i -t ubuntu /bin/bash-i標(biāo)志保證容器STDIN是開啟的,盡管我們并沒有附著到容器中。持久的標(biāo)準(zhǔn)輸...
閱讀 1368·2019-08-30 15:44
閱讀 2112·2019-08-30 11:04
閱讀 529·2019-08-29 15:17
閱讀 2552·2019-08-26 12:12
閱讀 3139·2019-08-23 18:09
閱讀 931·2019-08-23 15:37
閱讀 1530·2019-08-23 14:43
閱讀 2933·2019-08-23 13:13