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