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