摘要:根據(jù)鏡像文件生成容器實(shí)例。容器是一個(gè)運(yùn)行時(shí)環(huán)境,就是鯨魚(yú)背上的一個(gè)個(gè)集裝箱。這一層于我們典型的系統(tǒng)一樣,包含加載器和內(nèi)核。數(shù)據(jù)卷使得數(shù)據(jù)可以持久化和共享。
docker簡(jiǎn)介
1.docker是基于go語(yǔ)言實(shí)現(xiàn)
主要目標(biāo)是對(duì)對(duì)應(yīng)組件的封裝、分發(fā)、部署、運(yùn)行等生命周期的管理,使應(yīng)用程序及其運(yùn)行環(huán)境能夠做到“一次封裝,到處運(yùn)行”
2.docker為了解決運(yùn)行環(huán)境和配置問(wèn)題的軟件容器,方便做持續(xù)集成并有助于整體發(fā)布的容器虛擬化技術(shù)
3.docker能干些什么?
虛擬機(jī)技術(shù)
簡(jiǎn)單理解可以在一種操作系統(tǒng)里面運(yùn)行另外一種操作系統(tǒng),比如windows中運(yùn)行l(wèi)inux系統(tǒng),常見(jiàn)的是vmware;缺點(diǎn):占用資源,啟動(dòng)慢,安裝步驟繁瑣。
容器虛擬化技術(shù)
docker既是一種容器虛擬化技術(shù),docker本身是一個(gè)容器運(yùn)行載體或稱(chēng)之為管理引擎,我們把應(yīng)用程序和配置依賴(lài)打包好形成一個(gè)可交付的運(yùn)行環(huán)境,這個(gè)打包好的運(yùn)行環(huán)境就是鏡像文件,只有通過(guò)這個(gè)鏡像文件才能生成docker容器。docker 根據(jù) image 鏡像文件生成容器實(shí)例。同一個(gè)image文件可以生成多個(gè)同時(shí)運(yùn)行的容器實(shí)例。
docker 架構(gòu)
docker使用 docker 初體驗(yàn)新建并啟動(dòng)一個(gè)docker容器,使用 docker run命令即可
docker run -d -p 91:80 nginx
需要注意的是使用 docker run 命令創(chuàng)建容器時(shí),會(huì)先檢查本地是否存在指定鏡像,如果本地不存在,docker 會(huì)自動(dòng)從 dockerHub 上下載一個(gè)該鏡像并啟動(dòng)。
檢驗(yàn)docker容器是否啟動(dòng)成功
訪(fǎng)問(wèn)地址http://localhost:91/
docker的三大要素倉(cāng)庫(kù):存儲(chǔ)鏡像的地方,分為公開(kāi)倉(cāng)庫(kù)和私有倉(cāng)庫(kù)
鏡像:包含了你打包的應(yīng)用程序及其所依賴(lài)的環(huán)境
容器:用鏡像創(chuàng)建的運(yùn)行實(shí)例,可以把容器看成簡(jiǎn)易版的Linux的容器,一個(gè)運(yùn)行中的容器是一個(gè)運(yùn)行在Docker主機(jī)上的進(jìn)程,但它和主機(jī),以及所有運(yùn)行在主機(jī)上其他進(jìn)程都是隔離的。
容器是利用什么機(jī)制實(shí)現(xiàn)隔離的?
Linux 命名空間
Linux 控制組(cgroups)
docker底層原理docker是一個(gè)client-server結(jié)構(gòu)的進(jìn)程,docker守護(hù)進(jìn)程運(yùn)行在主機(jī)上,然后通過(guò)socket連接從客戶(hù)端的訪(fǎng)問(wèn),守護(hù)進(jìn)程從客戶(hù)端接受命令并管理運(yùn)行在主機(jī)上的docker容器。容器是一個(gè)運(yùn)行時(shí)環(huán)境,就是鯨魚(yú)背上的一個(gè)個(gè)集裝箱。
docker常用命令1.幫助命令
docker version docker info docker --help
2.鏡像命令
docker images : 列出本地鏡像 docker image -qa : 顯示全部鏡像id docker images --digests : 顯示鏡像簡(jiǎn)介信息 docker images --digests --no-trunc docker search tomcat : 搜索某個(gè)鏡像 docker pull tomcat : 下載鏡像到本地 等價(jià)于 docker pull tomcat:latest(默認(rèn)下最新版本) docker rmi tomact : 刪除某個(gè)鏡像 docker rmi tomcat:6.5 刪除制定版本鏡像 docker rmi -f tomcat 強(qiáng)制刪除鏡像 docker rmi -f nginx tomcat 強(qiáng)制刪除多個(gè)鏡像 docker rmi -f ${docker images -qa} 強(qiáng)制刪除全部
3.容器命令
(1) docker pull centos : 下載centos鏡像 (2) docker run [options] image —name=“容器新名字” :為容器制定一個(gè)名字 -i : 容器的image id -t : 交互式啟動(dòng) ,比如 :docker run -it 0a8b6f21d511 -d : 后臺(tái)運(yùn)行容器 -p : 制定映射端口 docker run -it -p 8080:8080 tomcat (-p 指定主機(jī)端口:docker容器暴露給宿主機(jī)的端口;-P 隨機(jī)分配端口) (3) docker ps : docker中運(yùn)行的進(jìn)程,docker ps -n 5 (4) exit: 容器停止退出 (5) docker restart docker stop docker kill docker rm (6)一次性刪除多個(gè)容器: docker rm -f $(docker ps -qa) docker ps -aq | args docker rm (7)docker run -d 容器名 : 運(yùn)行容器 (8)docker logs -f -t --tail n 容器id(-f : 跟隨最新的日志;-t :加入時(shí)間戳;--tail n : 倒數(shù)幾行): 查看容器日志 演示命令: docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done" : 每隔兩秒輸出內(nèi)容 (9) docker top 容器ID : 查看容器內(nèi)部運(yùn)行的進(jìn)程 (10) docker inspect 容器ID : 查看容器內(nèi)部細(xì)節(jié),如:docker inspect f791d79a4467 (11) docker attach 容器ID : 重新進(jìn)入未停止的容器 (12) docker exec -t f791d79a4467 ls -l /tmp : 重新進(jìn)入某個(gè)容器并執(zhí)行容器中的命令,拿到結(jié)果反給宿主機(jī) (13) docker cp 容器ID:路徑文件 /宿主機(jī)路徑 :copy容器內(nèi)容到宿主機(jī)上docker的鏡像
鏡像是一種輕量級(jí)、可執(zhí)行的獨(dú)立軟件包,用來(lái)打包軟件運(yùn)行環(huán)境和基于運(yùn)行環(huán)境開(kāi)發(fā)的軟件,它包含運(yùn)行某個(gè)軟件所需的所有內(nèi)容,包括代碼、運(yùn)行時(shí)需要的庫(kù)、環(huán)境變量和配置。
unionFS:聯(lián)合文件系統(tǒng),一層層文件系統(tǒng)組成
docker如何加載?
docker的鏡像實(shí)際上由一層一層的文件系統(tǒng)組成,這種層級(jí)文件系統(tǒng)是unionFS
bootfs(boot file system):主要包含bootloader和kernel,bootloader主要引導(dǎo)加載kernel,linux剛啟動(dòng)是會(huì)加載bootfs文件系統(tǒng),在docker鏡像最底層是bootfs文件。這一層于我們典型的Linux/unix系統(tǒng)一樣,包含boot加載器和內(nèi)核。當(dāng)boot加載完成之后整個(gè)內(nèi)核就在內(nèi)存中了,此時(shí)系統(tǒng)會(huì)卸載bootfs
rootfs(root file system):在bootfs之上,包含的就是典型linux系統(tǒng)中的/dev,/bin,/etc等目錄和文件。
docker commit -m=“提交信息” -a=“作者” 容器ID 要?jiǎng)?chuàng)建的目標(biāo)鏡像名稱(chēng):[標(biāo)簽名] docker commit -m=“helloword” -a=“feifei” 0a8b6f21d511 feifei/tomcat02:1.2docker容器數(shù)據(jù)卷
docker容器產(chǎn)生的數(shù)據(jù),如果不通過(guò)docker commit生成新的鏡像,使得數(shù)據(jù)作為鏡像的一部分保存下來(lái),那么當(dāng)容器刪除后,數(shù)據(jù)自然就沒(méi)有了,為了保存數(shù)據(jù)我們使用docker的數(shù)據(jù)卷。數(shù)據(jù)卷使得數(shù)據(jù)可以持久化和共享。
命令添加數(shù)據(jù)卷
docker run -it -v /宿主機(jī)絕對(duì)路徑目錄:/容器內(nèi)目錄 鏡像名 例如:docker run -it -v /tmp/my-volume:/tmp/my-volume centos ;宿主機(jī)目錄:/tmp/my-volume和docker容器目錄/tmp/my-volume這兩個(gè)目錄中的數(shù)據(jù)可以隨時(shí)同步,容器重啟后,也會(huì)同步; docker run -it -v /宿主機(jī)絕對(duì)路徑目錄:/容器內(nèi)目錄:ro 鏡像名 (帶權(quán)限的命令,同步到容器內(nèi)的文件read only)
這種方式不支持多臺(tái)宿主機(jī)都能夠建立數(shù)據(jù)卷
DockerFile添加
可以在Dockerfile中使用 VOLUME 指令來(lái)給鏡像添加一個(gè)或多個(gè)數(shù)據(jù)卷
1.創(chuàng)建Dockerfile文件目錄
/Users/ShiFeifei/Software/docker-config,在這個(gè)目錄下
touch Dockerfile vim Dockerfile
添加如下內(nèi)容
FROM centos RUN mkdir /myvol RUN echo "hello world" > /myvol/greeting VOLUME /myvol
2.新建一個(gè) docker 容器
docker build -f /Users/ShiFeifei/Software/docker-config/Dockerfile -t sff/centos .Dockerfile
Dockerfile 是用來(lái)構(gòu)建 Docker鏡像的構(gòu)建文件,是由一系列命令和參數(shù)構(gòu)成
Dockerfile 構(gòu)建步驟編寫(xiě)Dockerfile文件
docker build
docker run
Dockerfile 文件執(zhí)行規(guī)則關(guān)鍵字指令都必須是大寫(xiě)字母,并且后面要跟隨至少一個(gè)參數(shù)
指令按照從上到下順序執(zhí)行
#表示注釋
每條指令都會(huì)創(chuàng)建一個(gè)新的鏡像層,并對(duì)鏡像進(jìn)行提交
Dockerfile、Docker鏡像和Docker容器分別代表了軟件的三個(gè)不同階段Dockerfile是軟件的原材料
Docker鏡像是軟件的交付品
Docker容器則可以認(rèn)為是軟件的運(yùn)行態(tài)
Dockerfile面向開(kāi)發(fā),Docker鏡像成為軟件交付標(biāo)準(zhǔn),Docker容器則涉及部署與運(yùn)維,三者缺一不可,是Docker體系的基石。
Dockerfile 保留字指令FORM : 基礎(chǔ)鏡像,當(dāng)前要?jiǎng)?chuàng)建的來(lái)自于這個(gè)基礎(chǔ)鏡像
MAINTAINER : 鏡像維護(hù)者的姓名和郵箱地址
RUN : 容器構(gòu)建時(shí)需要運(yùn)行的命令
EXPOSE : 當(dāng)前容器啟動(dòng)后對(duì)外暴露的端口聲明
WORKDIR : 指定在容器創(chuàng)建后,終端默認(rèn)登錄進(jìn)來(lái)的工作目錄,可以理解為家目錄
ENV : 設(shè)置環(huán)境變量
ADD : 將宿主機(jī)目錄下的文件拷貝給鏡像,且ADD命令會(huì)自動(dòng)處理URL和解壓壓縮包
COPY : 類(lèi)似ADD,拷貝文件和目錄到鏡像中
VOLUME : 指定容器數(shù)據(jù)卷
CMD : 指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令,Dockerfile 中可以有多個(gè)CMD命令,但只有最后一個(gè)生效;CMD 會(huì)被 docker run 之后的參數(shù)覆蓋
ENTRYPOINT : 指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令,目的和CMD一樣,都是指定容器啟動(dòng)程序及參數(shù),參數(shù)不會(huì)被覆蓋,只會(huì)追加
ONBUILD :
案例1.實(shí)現(xiàn)一個(gè)功能,定制一個(gè) mycentos 支持vim、ifconfig命令,并且修改登錄后的默認(rèn)路徑
FROM centos ENV homePath /tmp WORKDIR $homePath #登錄時(shí)的目錄是 /tmp RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD /bin/bash
2.自定義一個(gè)centos,自帶 tomcat 、jdk
FROM lentos MAINTAINER shifeifei#把宿主機(jī)當(dāng)前路徑下的文件c.txt拷貝到容器的/usr/local/路徑下 COPY c.txt /usr/local/test.txt #把Java和tomcat添加到容器中 ADD jdk-8u171-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.8.tar.gz /usr/local/ #安裝vim編輯器 RUN yum -y install vim #設(shè)置工作訪(fǎng)問(wèn)時(shí)的WORKDIR路徑 ENV MYPATH /usr/local WORKDIR $MYPATH #配置Java、tomcat環(huán)境變量 ENV JVAV_HOME /usr/local/jdk1.8.0_171 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器運(yùn)行時(shí)監(jiān)聽(tīng)端口 EXPOSE 8080 #啟動(dòng)運(yùn)行tomcat #CMD [“/usr/local/apache-tomcat-9.0.8/bin/startup.sh”,"run"] CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27885.html
摘要:先簡(jiǎn)單介紹下,通常情況下我們將其稱(chēng)之為鏡像,鏡像是由多個(gè)層組成的文件,這些層用于在容器內(nèi)執(zhí)行代碼命令等。而的時(shí)候則會(huì)將此信息再次進(jìn)行編碼。 使用 Docker 時(shí),最常用的命令無(wú)非是 docker container 和 docker image 相關(guān)的子命令,當(dāng)然最初沒(méi)有管理類(lèi)命令(或者說(shuō)分組)的時(shí)候,最常使用的命令也無(wú)非是 docker run docker commit dock...
摘要:先簡(jiǎn)單介紹下,通常情況下我們將其稱(chēng)之為鏡像,鏡像是由多個(gè)層組成的文件,這些層用于在容器內(nèi)執(zhí)行代碼命令等。而的時(shí)候則會(huì)將此信息再次進(jìn)行編碼。 使用 Docker 時(shí),最常用的命令無(wú)非是 docker container 和 docker image 相關(guān)的子命令,當(dāng)然最初沒(méi)有管理類(lèi)命令(或者說(shuō)分組)的時(shí)候,最常使用的命令也無(wú)非是 docker run docker commit dock...
摘要:第篇搭建私有庫(kù)及管理界面一大致介紹基于前面的部署,容器一多非常不便于管理,于是急需一個(gè)自己的私有庫(kù)而目前市面上大多數(shù)的私有庫(kù)基本上都是后臺(tái)服務(wù)加前臺(tái)構(gòu)成,于是選來(lái)選去,最后選擇了管理界面之所以選擇這款管理界面,我就簡(jiǎn)述闡述一下,基于以下 SpringCloud(第 055 篇)CentOS7 搭建 docker-registry 私有庫(kù)及管理界面 - 一、大致介紹 1、基于前面dock...
摘要:第篇搭建私有庫(kù)及管理界面一大致介紹基于前面的部署,容器一多非常不便于管理,于是急需一個(gè)自己的私有庫(kù)而目前市面上大多數(shù)的私有庫(kù)基本上都是后臺(tái)服務(wù)加前臺(tái)構(gòu)成,于是選來(lái)選去,最后選擇了管理界面之所以選擇這款管理界面,我就簡(jiǎn)述闡述一下,基于以下 SpringCloud(第 055 篇)CentOS7 搭建 docker-registry 私有庫(kù)及管理界面 - 一、大致介紹 1、基于前面dock...
摘要:簡(jiǎn)單來(lái)說(shuō)是鏡像的源碼。例如,的鏡像鏡像,在中是一個(gè)基礎(chǔ)鏡像的鏡像也是鏡像那么鏡像和共享同一個(gè)基礎(chǔ)鏡像層,提高了存儲(chǔ)效率。 前言 只有光頭才能變強(qiáng)。 文本已收錄至我的GitHub倉(cāng)庫(kù),歡迎Star:https://github.com/ZhongFuCheng3y/3y showImg(https://segmentfault.com/img/remote/14600000180560...
閱讀 3573·2023-04-26 00:05
閱讀 959·2021-11-11 16:55
閱讀 3539·2021-09-26 09:46
閱讀 3525·2019-08-30 15:56
閱讀 919·2019-08-30 15:55
閱讀 2941·2019-08-30 15:53
閱讀 1954·2019-08-29 17:11
閱讀 822·2019-08-29 16:52