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:

總結: