DOCKER
Docker介紹影片
https://www.youtube.com/watch?v=37b3cWIIxUg&list=PLmOn9nNkQxJFX0YVLDw5EMUL-4cVzXL33&index=1
Docker下載
https://docs.docker.com/engine/install/centos/
Docker 鏡像安裝步驟:
1.搜索鏡像
2.拉取鏡像
3.查看鏡像
4.啟動鏡像
5.停止容器
6.移除容器
Docker概念
Docker hub上存放image,當image pull到本機並啟動時,會生成container…











Docker命令
一.幫助命令:
1.查看版本:docker version
2.查看所有資訊:docker info
3.查看說明書:docker –help
二.鏡像命令:
1.列出本地主機上的鏡像:docker images
a.列出本地所有的鏡像(包含中間映像層): -a
b.只顯示鏡像ID: -q
c.顯示鏡像的摘要資訊: –digests
d.顯示完整的鏡像資訊: –no-trunc
2.在docker hub上找鏡像檔案:docker search 某個鏡像名字
docker search [option] 鏡像名字
option:
a.顯示完整的鏡像描述: –no-trunc
b.只列出automated build類型的鏡像: –automated
3.下載鏡像:docker pull 某個鏡像名字
docker pull 某個鏡像名字[:版本(省略為最新版)]
4.刪除鏡像:docker rmi 某個鏡像名字{版本(省略為最新版)}
a.刪除單個: docker rmi -f 鏡像ID
b.刪除多個: docker rmi -f 鏡像ID1 鏡像ID2 …
c.刪除全部: docker rmi -f $(docker images -qa或-x)
三.容器命令:


1.新建並啟動容器(run鏡像時就會創建新的容器):docker run [OPTIONS] IMAGE[COMMAND][ARG…]
option說明:
1.為容器指定一個名字:–name="容器新名字"
2.後台運行容器,並返回容器ID,也即啟動守護式容器:-d
3.以交互(互動)(前台)模式運行容器,通常與-t同時使用:-i
4.為容器重新分配一個偽輸入終端,通常與-i同時使用:-t
5.隨機端口映射:-P

6.指定端口映射,有以下四種格式:-p
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
備註:docker run -it 容器名或容器ID 為啟動交互式容器
2.列出當前所有正在運行的容器:docker ps [OPTIONS]
option說明:
1.列出當前所有正在運行的容器+歷史上運行過的:-a
2.顯示最近創建的容器:-l
3.顯示最近n個創建的容器:-n
4.只顯示容器編號:-q
5.不截斷輸出(完整輸出):–no-trunc
3.退出容器:
1.容器停止退出:exit
2.容器不停止退出:ctrl+P+Q
4.啟動容器:docker start 容器ID或容器名
5.重啟容器:docker restart 容器ID或容器名
6.停止容器:docker stop 容器ID或容器名
7.強制停止容器:docker kill 容器ID或容器名
8.刪除已停止的容器:docker rm 容器ID
9.一次性刪除多個容器:
1.docker rm -f $(docker ps -a -q)
2.docker ps -a -q | xargs docker rm
10.啟動守護式容器(後台):docker run -d 容器名
11.查看容器日誌:docker logs -f -t –tail 容器ID
1.加入時間戳:-t
2.隨時間印出最新的日誌:-f
3.顯示最後多少條:–tail
12.查看容器內運行的進程:docker top 容器ID
13.查看容器內部細節:docker inspect 容器ID
14.進入正在運行的容器並以命令進行交互:
(1)docker exec -it 容器ID bashShell

(2)重新進入docker attach 容器ID
差別:
attach是直接進入容器啟動命令的終端,不會啟動新的進程
exec是在容器中打開新的終端,並且可以啟動新的進程
15.從容器內複製文件到主機上:docker cp 容器ID:文件在容器內路徑 主機目的地路徑
四.Docker鏡像commit操作補充:

1.docker commit提交容器副本使之成為一個新的鏡像
2.docker commit -m="提交的描述訊息" -a="作者" 容器ID 要創建的目標鏡像名:[標籤名(版本)]

五.Docker容器數據卷:

1.用途:(1)容器的持久化(2)容器間繼承與共享數據

2.容器內添加:
(1)直接命令添加:
a.命令:docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 鏡像名
b.查看數據卷是否掛載成功
c.容器和宿主機之間數據共享
d.容器停止退出後,主機修改後數據是否同步
e.命令(帶權限)(容器內之連結文件只可讀不可寫):docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:ro 鏡像名
(2)DockerFile添加:
a.根目錄下新建mydocker文件夾並進入
b.可以在DockerFile中使用VOLUME指令來給鏡像添加一個或多個數據卷


就是

c.File構建
d.build後生成鏡像(記得在最後面加空格和.)

圖中獲得一個新鏡像zzyy/centos
e.run容器

3.數據卷容器:


容器間傳遞共享:–volumes-from




DockerFile
一.介紹:


centos的DockerFile例子

小註釋:
docker run -it centos
等同執行
CMD ["/bin/bash"]
docker run -it centos /bin/bash
等同執行
CMD ["/bin/bash"]
CMD ["/bin/bash"]




二.保留字指令:
1.FROM:基礎鏡像,當前新鏡像是基於哪個鏡像的
2.MAINTAINER:鏡像維護者的姓名和email地址
3.RUN:容器構建時需要運行的命令
4.EXPOSE:當前容器對外暴露出的端口
5.WORKDIR:指定在創建容器後,終端默認登入的進來工作目錄,一個落腳點(若沒寫默認為根目錄)
6.ENV:用來在構建鏡像過程中設置環境變量

7.ADD:將宿主機目錄下的文件複製進鏡像且ADD命令會自動處理URL和解壓tar壓縮包
8.COPY:類似ADD,複製文件和目錄到鏡像中。將從構建上下文目錄中<源路徑>的文件/目錄複製到新的一層的鏡像內的<目標路徑>位置(但不像ADD會自動處理URL和解壓tar壓縮包)
(1)COPY src destination
(2)COPY ["src","destination"]
9.VOLUME:容器數據卷,用於數據保存和持久化工作
10.CMD:指定一個容器啟動時要運行的命令(Dockerfile中可以有多個CMD指令,但只有最後一個生效,CMD會被docker run之後的參數替換)

11.ENTRYPOINT:指定一個容器啟動時要運行的命令(ENTRYPOINT的目的和CMD一樣,都是在指定容器啟動程序及參數)(ENTRYPOINT不會像CMD被覆蓋,而是加在後面)
12.ONBUILD:當構建一個被繼承的Dockerfile時運行命令,父鏡像在被子繼承後父鏡像的onbuild被觸發


總結:

三.例子:
* Base鏡像(scratch):Docker Hub中99%的鏡像都是通過在base鏡像中安裝和配置需要的軟件構建出來的

1.自定義鏡像mycentos:





2.CMD和ENTRYPOINT的比較:
CMD:


ENTRYPOINT:




curl解釋:

3.自定義鏡像Tomcat9:


Tomcat9的DockerFile:









總結:
