前言
??三天時間把docker學(xué)完了,學(xué)完依舊很懵,做個小小的總結(jié)用于以后回顧
開搞
1.鏡像技術(shù)(將所有的東西都打包,一處構(gòu)建處處運(yùn)行)
?(1) 打破代碼即應(yīng)用,(運(yùn)行文檔+配置環(huán)境+運(yùn)行環(huán)境+運(yùn)行依賴包+操作系統(tǒng)發(fā)行版+內(nèi)核)
?(2) 就是高度濃縮版,小型版的linux系統(tǒng)
優(yōu)點(diǎn)
?(1) 更快速的應(yīng)用交付和部署
?(2) 更快捷的升級和擴(kuò)縮容
?(3) 更簡單的系統(tǒng)運(yùn)維
?(4) 更高效的計(jì)算資源利用三大特征:鏡像,容器,倉庫 倉庫存放鏡像,鏡像里有容器
docker
?(1) Docker:容器運(yùn)行載體或管理引擎,
?(2) 程序和配置依賴打包:可交付的運(yùn)行環(huán)境
?(3) 運(yùn)行環(huán)境:Image鏡像文件
?(4) 鏡像文件才能生成Docker容器
?(5) Image鏡像文件:容器的模板
?(6) 容器:Image鏡像文件的實(shí)例(相當(dāng)于是一個簡易版的linux環(huán)境和運(yùn)行在其中的應(yīng)用程序)
5.安裝docker yum install docker
靜靜等待就行,可以加一個阿里云鏡像加速
6.docker幫助命令
?(1) docker version
查看docker版本
?(2) docker info
顯示 Docker 系統(tǒng)信息,包括鏡像和容器數(shù)
?(3) docker --help
7.鏡像命令
?(1) docker images [option]
列出本地主機(jī)上的鏡像
??-a
: 列出本地所有鏡像(含中間鏡像層)
??-q
: 只顯示鏡像id
??--digests
: 顯示鏡像的摘要信息
??--no-trunc
: 顯示完整的鏡像信息
?(2) docker search [option]
某個xxx鏡像名稱
??-no-trunc
: 顯示完整的鏡像描述
??-s 數(shù)字
: 列出收藏?cái)?shù)不小于指定值的鏡像
??--automated
: 只列出automated build類型的鏡像
?(3)docker pull 鏡像名
從docker鏡像源服務(wù)器拉取指定鏡像或者庫鏡像
?(4)docker push 鏡像名
推送指定鏡像或者庫鏡像至docker源服務(wù)器
?(5)docker rmi 鏡像id
刪除鏡像
??-f 鏡像id
: 刪除單個
??-f $(docker images -qa)
:刪除全部
?(6)docker commit 鏡像名
提交容器副本使之成為一個新的鏡像
docker commit -m=“提交的描述信息” -a=“作者” 容器id 要創(chuàng)建的目標(biāo)鏡像名:[標(biāo)簽名]
?(7)docker build
bulid成一個鏡像文件
?? -f
: 文件地址
??-t
: 命名空間 自定義一個文件的名字(將容器卷建在這個文件夾下)
??.
: 當(dāng)前目錄下
docker build -f /mydocker/dockerfile -t zzyy/centos .
?(7)docker save 鏡像名
保存一個鏡像為一個 tar 包
7.容器命令
?(1) docker run [option] 鏡像名 [COMMAND][ARG]
新建并啟動容器
??--name="容器新名字"
: 為容器指定一個名字
??-i
: 以交互模式運(yùn)行容器,通常與-t同時連用
??-t
: 為容器分配一個偽輸入終端,通常與-i同時連用
??-p
: 映射到外部的端口
??-v
: 文件掛載的地址 /宿主機(jī)絕對路徑:/容器內(nèi)目錄 (容器數(shù)據(jù)卷用)
??-d
: 后臺運(yùn)行容器
??-e
: 設(shè)置環(huán)境變量
docker run -p 8080:8080 -d -e "SERVER_PORT=8080" -v /mnt:/mnt --name="xxxx" 鏡像名:版本號
?(2) docker ps [option]
列出當(dāng)前所有正在運(yùn)行的容器
??-a
: 列主當(dāng)前所有正在運(yùn)行的和歷史上運(yùn)行過的容器
??-l
: 顯示最近創(chuàng)建的容器
??-n
: 顯示最近n個創(chuàng)建的容器
??--no-trunc
: 不截?cái)噍敵?/p>
?(3) 退出容器
??exit
: 容器停止退出
??Ctrl+P+Q
: (容器不停止退出)退出容器
?(4)docker start 容器id或容器名
啟動容器
?(5) docker restart 容器id或容器名
重啟容器
?(6) docker stop 容器id或容器名
停止容器
?(7) docker kill 容器id或容器名
強(qiáng)制停止容器
?(8) docker rm 容器id或容器名
刪除已停止的容器
??$(docker ps -qa)
:一次性刪除多個容器
??docker ps -qa | xargs docker rm
:一次性刪除多個容器
?(9)docker logs -f -t --tail 容器id
查看容器日志
?(10)docker top 容器id
查看容器內(nèi)運(yùn)行的進(jìn)程
?(11)docker inspect 容器id
查看容器內(nèi)部細(xì)節(jié)(以json串的形式顯示)
?(12)進(jìn)入正在運(yùn)行的容器并以命令行交互
??docker exec 容器id bashShell
在容器中打開新的終端,并且啟動新的進(jìn)程
??docker attach 容器id
重新進(jìn)入 (直接進(jìn)入容器啟動命令的終端,不會啟動新的進(jìn)程)
?(13)docker cp 容器id:容器內(nèi)部路徑 目的主機(jī)路徑
從容器內(nèi)拷貝文件到主機(jī)
?(14)docker create
創(chuàng)建一個新的容器,同 run,但不啟動容器
?(15)docker exec -it 容器名或id /bin/bash
進(jìn)容器
?(16)docker pause 容器id
暫停容器
8.數(shù)據(jù)卷和數(shù)據(jù)卷容器
?(1) 在虛擬機(jī)里使用docker的時候,會發(fā)現(xiàn)虛擬機(jī)一關(guān),在打開的時候docker里的容器里面的數(shù)據(jù)可能會沒了,這時候就要對數(shù)據(jù)進(jìn)行持久化,在docker的容器中管理數(shù)據(jù)主要有兩種方式:數(shù)據(jù)卷和數(shù)據(jù)卷容器。
??(1) 數(shù)據(jù)卷: 容器內(nèi)數(shù)據(jù)直接映射到宿主機(jī),獨(dú)立與容器的生命周期,容器刪除時,不會刪除其掛載的數(shù)據(jù)卷,也不會存在類似的垃圾機(jī)制對容器存在的數(shù)據(jù)卷進(jìn)行處理。
??(2) 數(shù)據(jù)卷容器: 命名的容器掛載數(shù)據(jù)卷,其他容器通過掛載這個(父容器)實(shí)現(xiàn)數(shù)共享,掛載數(shù)據(jù)卷的容器,稱之為數(shù)據(jù)卷容器
docker run --name=test -p 8080:8080-d -v /home/admin/test:/data/test test
/*
1.此處 /home/admin/test代表主機(jī)目錄,/data/test代表容器目錄
2.可以多次使用--volumes-from參數(shù)來從多個容器掛載多個數(shù)據(jù)卷。還可以從其他已經(jīng)掛載了容器卷的容器來掛載數(shù)據(jù)卷。
*/
9.Dockerfile
?(1) Dockerfile
內(nèi)容基礎(chǔ)知識
??(1) 每條保留字指令都必須是大寫字母(事實(shí)證明小寫也可以)且后面要跟隨至少一個參數(shù)
??(2) 指令按照從上到下,順序執(zhí)行
??(3) #表示注解
??(4) 每條指令都會創(chuàng)建一個新的鏡像層,并對鏡像進(jìn)行提交
?(2) Dockerfile
指令詳解
??(1)FROM
基礎(chǔ)鏡像,當(dāng)前新的鏡像是基于那個鏡像的
FROM java:8
??(2)MAINTAINER
鏡像維護(hù)這的姓名和郵箱地址
MAINTAINER GG-LYF <2083298549@qq.com>
??(3)RUN
容器構(gòu)建時需要運(yùn)行的命令
RUN ["yum","install","vim"]
RUN yum -y install vim
??(4) EXPOSE
當(dāng)前容器對外暴露的端口號
EXPOSE 80
??(5) WOEKDIR
指定在創(chuàng)建容器后,終端默認(rèn)登錄的進(jìn)來后的工作目錄,一個落腳點(diǎn)
WORKDIR /data
??(6)ENV
用來在構(gòu)建鏡像過程中設(shè)置環(huán)境變量
ENV JAVA_HOME /usr/local/jdk1.8
ENV CLASSPATH $JAVA_HOME /lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.8.0
ENV CATALINA_BASE /usr/local/apache-tomcat-9.8.0
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_BASE/bin
??(7)ADD
在宿主機(jī)目錄下的文件拷貝進(jìn)鏡像且ADD會自動處理URL和解壓tar壓縮包
ADD jdk
ADD apache-tomcat
??(8)COPY
將從構(gòu)建上下文目錄中<源目錄>的文件 /目錄復(fù)制到鏡像內(nèi)的<目標(biāo)目鏡>位置
COPY c.txt /usr/local/cincontainer.txt
??(9) VOLUME
容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化工作
VOLUME /tem
??(10)CMD
指定容器啟動時要運(yùn)行命令,可以寫多個,但只有最后一個有用
CMD echo “success----------------------ok”
CMD /bin/bash
??(11)ENTRYPOINT
和CMD
一樣,但寫的多個可以是追加
ENTRYPOINT [“/user/local/apache-tomcat-9.8.0/bin/startup.sh”]
ENTRYPOINT ["java","-jar","/app.jar"]
??(12) ONBUILD
當(dāng)構(gòu)建一個被繼承的dockerfile時運(yùn)行命令,父鏡像在被子鏡像繼承后父鏡像的onbuild被觸發(fā)
ONBUILD RUN “被繼承了啊!!!!!!”
??(13) USER
用于指定是哪個用戶
USER root