- 幫助命令
- docker version
- 顯示 docker 版本訊息
- docker info
- 顯示 docker 更詳細的訊息
- docker --help
- 顯示 docker 指令列表
- docker version
- 鏡像命令
docker run [options] IMAGE [COMMAND][ARG...]
- options
- --name="容器新名稱": 為容器指定一個名稱
- -d: 後台運行容器,並返回容器ID,也即啟動守護式容器
- -i: 以交互模式運行容器,通常與 -t 同時使用
- -t: 為容器重新分配一個偽輸入終端,通常與 -t 同時使用
- -P: 隨機 port 映射
- -p: 指定 port 映射,有以下四種格式
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
- 範例
docker run -it [IMAGE_ID] or [IMAGE_NAME]
- 啟動容器並進入 docker 容器內
docker run -it --name=mydocker ubuntu:18.04
docker run -it --name=mydocker ubuntu:18.04 /bin/bash
- 用 bash 形式
- 容器命令
- docker ps
- 顯示所有 docker 正在執行的容器
- options
- -a: 顯示當前所有正在運行的容器 + 歷史上運行過的
- -l: 顯示上一個運行容器的訊息
- -n: 顯示最近n個創建的容器
- -q: 靜默模式,只顯示容器編號
- --no-trunc: 不截斷輸出
- 範例
docker ps -a
docker ps -l
docker ps -n
docker ps -n 3
- 顯示 3 個最近運行的
docker ps -q
docker ps -lq
- -l 是顯示上一個運行容器的訊息,加上 q 就會只顯示容器編號
- docker 退出容器
- 兩種退出方式
- exit
- 容器停止退出
- ctrl + P + Q
- 容器不停止退出
- exit
- 兩種退出方式
- docker 啟動重啟停止
docker start [CONTAINER_ID] or [CONTAINER_NAME]
- docker 重啟
docker restart [CONTAINER_ID] or [CONTAINER_NAME]
- docker 停止
docker stop [CONTAINER_ID] or [CONTAINER_NAME]
- docker 強制停止
docker kill [CONTAINER_ID] or [CONTAINER_NAME]
- docker 刪除容器
docker rm [CONTAINER_ID] or [CONTAINER_NAME]
- docker 強制刪除容器(正在運行的)
docker rm -f [CONTAINER_ID] or [CONTAINER_NAME]
- docker 一次性刪除多個容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
- docker ps
- 重要
- 啟動守護式容器
docker run -d [CONTAINER_ID] or [CONTAINER_NAME]
- 如果沒有命令的話,一啟動就會停止
- 可以用 shell 不讓容器停止
docker run -d ubuntu:18.04 /bin/bash -c "while true; do echo hello; sleep 2; done"
- 查看容器日誌
docker logs -f -t --tall [CONTAINER_ID] or [CONTAINER_NAME]
- -t 是加入時間戳
- -f 跟隨最新的日誌印出
- --tail 數字 顯示最後多少條
- 範例
docker logs [CONTAINER_ID] or [CONTAINER_NAME]
docker logs -t [CONTAINER_ID] or [CONTAINER_NAME]
docker logs -t -f --tail 3 [CONTAINER_ID] or [CONTAINER_NAME]
- 只顯示 3 條訊息
- 查看容器內運行的 process
docker top [CONTAINER_ID] or [CONTAINER_NAME]
- 查看容器內部細節
docker inspect [CONTAINER_ID] or [CONTAINER_NAME]
- 顯示容器內部所有細節
- 進入正在運行的容器並以命令行交互
docker exec it [CONTAINER_ID] or [CONTAINER_NAME] bashShell
- 重新進入
docker attach [CONTAINER_ID] or [CONTAINER_NAME]
- 上面兩個區別
- attach
- 直接進入容器啟動命令的終端,不會啟動新的 process
- exec
- 是在容器中打開新的終端,並且可以啟動新的 process
- 範例
docker exec -t [CONTAINER_ID] or [CONTAINER_NAME] ls -l
- 送指令到容器內直接拿到結果
docker exec -t [CONTAINER_ID] or [CONTAINER_NAME] /bin/bash
ordocker exec -t [CONTAINER_ID] or [CONTAINER_NAME] bash
- bash 形式進入到容器內,但不能互動。
- 使用 it 就可以在容器互動了。
- attach
- 從容器內拷貝文件到主機上
- docker cp [CONTAINER_ID] or [CONTAINER_NAME]:CONTAINER路徑 目的本機路徑
- 範例
docker cp [CONTAINER_ID] /tmp/hello.txt /root
- 範例
- docker cp [CONTAINER_ID] or [CONTAINER_NAME]:CONTAINER路徑 目的本機路徑
- 啟動守護式容器
- 小總結
- 常用命令
- attach 當前 shell 下 attach 連接指定運行鏡像
- build 通過 Dockerfile 客制鏡像
- commit 提交當前容器為新的鏡像
- cp 從容器中複製指定文件或者目錄到主機上
- create 創建一個新的容器,同 run,當不啟動容器
- diff 查看 docker 容器變化
- events 從 docker 服務獲取容器實時事件
- exec 在已存在的容器上運行命令
- export 導出容器的內容留作為一個 tar 歸檔文件[對應 import]
- history 顯示一個鏡像形成歷史
- images 顯示系統當前鏡像
- import 從 tar 包中的內容創建一個新的文件系統映像[對應export]
- info 顯示系統相關訊息
- inspect 查看容器詳細訊息
- kill kill 指定 docker 容器
- load 從一個 tar 包加載一個鏡像[對應 save]
- login 註冊或登入一個 docker 源伺服器
- logout 從當前 Docker registry 退出
- logs 輸出當前容器日誌訊息
- port 查看映射 port 對應容器內部源 port
- pause 暫停容器
- ps 列出容器列表
- pull 從 docker 鏡像伺服器拉取指定鏡像或者庫鏡像
- restart 重新啟動運行的容器
- rm 移除一個或多個容器
- rmi 移除一個或多個鏡像 [無容器使用該鏡像才可刪除,否則需刪除相關容器才可以繼續或 -f 強制刪除]
- run 創建一個新的容器並運行一個命令
- save 保存一個鏡像為 tar 包
- search 在 docker hub 中搜尋鏡像
- start 啟動容器
- stop 停止容器
- tag 給源中鏡像打上標籤
- top 查看容器中運行的 process 訊息
- unpause 取消暫停容器
- version 查看 docker 版本訊息
- wait 擷取容器停止時的退出狀態值
- 常用命令
- options
- -a: 列出本機所有的鏡像(含中間印象層)
- -q: 只顯示鏡像ID
- --digests: 顯示鏡像的摘要訊息
- --no-trunc: 顯示完整的鏡像訊息
- 範例
docker images
docker images -a
docker images -d
- 網站
- options
- --no-trunc: 顯示完整的鏡像訊息
- -s: 列出星星操過指定值得鏡像
- --automated: 只列出 automated build 類型的鏡像。
- 範例
docker search nginx
docker search -s 30 nginx
docker search -s 30 --no-trunc nginx
docker pull nginx
等同於docker pull nginx:latest
- 刪除單個
docker rmi [IMAGE_ID] or [IMAGE_NAME]
- 不給版本預設刪除
- 刪除多個
docker rmi -f [IMAGE_NAME]:TAG [IMAGE_NAME]:TAG
- 刪除全部
docker rmi -f $(docker images -q)
- q 指的是顯示本機所有的Image ID
- a 指的是過往與當前活著的全部 ID
- 1.docker commit
- 提交容器副本使之成為一個新的鏡像
- 2.docker commit -m
- 提交描述訊息
- 3.docker commit -a
- 作者
- 範例:
docker commit -a "dudulu" -m "提交" [IMAGE_ID] or [IMAGE_NAME] 自定義名稱
docker commit -a "dudulu" -m "First Commit" 1qaz2wsx3edc myimage:48.7.63
- 是什麼
- 類似 Redis 裡面的 rdb 和 aof 文件
- 能做什麼
- 容器得持久化
- 容器間繼承 + 共享數據
- 數據卷
- 直接命令添加
- 命令
docker run -it -v /本機絕對路徑:/容器內目錄 鏡像名
docker run -it -v /Users/dudulu/Desktop/All/Docker/LearnDocker/mydata:/mydata ubuntu:18.04
- 查看數據卷是否掛載成功
- 容器和本機之間數據共享
- 容器停止後,主機修改數據是否同步
- 命令(帶權限,只能讀不能寫)
docker run -it -v /本機絕對路徑:/容器內目錄:ro 鏡像名
docker run -it -v /Users/dudulu/Desktop/All/Docker/LearnDocker/mydata:/mydata:ro ubuntu:18.04
- ro = Read-only
- 命令
- Dockerfile 添加
- 跟目錄下創建 Dockerfile
- 可在 Docker 中使用 VOLUME 指令給鏡像增加一個或多個數據卷
- File 構建
- build 後生成鏡像
- 獲得一個新鏡像
- -f = dockerfile 在哪裡
- -t = 自定義名字
- 範例
docker build -f ./DockerfileTest/Dockerfile -t dudulu/ubuntu .
- run 容器
- VOLUME 默認位置要用
docker inspect [CONTAINER_ID] or [CONTAINER_NAME]
之後查看 Volumes 或者 Mounts- Mac 找不到 VOLUME 位置,但是 Ubuntu 有找到。
- 備註
- 如果 Docker 掛載本機目錄 Docker 出現 cannot open directory.:Permission denied
- 在掛載目錄後多加一個 --privileged-true 參數即可
- docker run -it -v /Users/dudulu/Desktop/All/Docker/LearnDocker/mydata:/mydata --privileged-true ubuntu:18.04`
- 在掛載目錄後多加一個 --privileged-true 參數即可
- 如果 Docker 掛載本機目錄 Docker 出現 cannot open directory.:Permission denied
- 直接命令添加
- 數據卷容器
- 先啟動一個父容器
docker run -it --name dc01 dudulu/ubun:1.0
- dc02/dc03 繼承自 dc01
docker run -it --name dc02 --volumes-from dc01 dudulu/ubun:1.0
docker run -it --name dc03 --volumes-from dc01 dudulu/ubun:1.0
- 回到 dc01 可以看到 02/03 都能互相新增資料並共享。
- 刪除 dc01,dc02 修改後 dc03 是否可以訪問(可以)。
- 刪除 dc02,dc03 是否可以訪問(可以)。
- 新增 dc04 繼承 dc03 後在刪除 dc03, dc04 是否有共享數據(有)。
docker run -it --name dc04 --volumes-from dc03 dudulu/ubun:1.0
- 結論: 容器之間設置訊息的傳遞,數據卷的生命週期一直持續到沒有容器使用它為止。
- 先啟動一個父容器
- 特點
- 1.數據卷可在容器之間共享或重用
- 2.數據卷中的更改可以直接生效
- 3.數據卷中的更改不會包含在鏡像的更新中
- 4.數據卷的生命週期一直持續到沒有容器使用它為止
- 是什麼
- Dockerfile 是用來創建 Docker 鏡像的創建文件,是由一系列命令和參數組成的腳本。
- 創建三步驟
- 編寫 Dockerfile 文件
- docker build
- docker run
- DockerFile 構建過程解析
- Dockerfile 內容基礎知識
- 每條保留字指令都必須為大寫字母且後面一定要跟隨至少一個參數
- 指令按照從上到下,順序執行
- "#表示注釋"
- 每條指令都會創建一個新的鏡像層,並對鏡像進行提交
- Docker 執行 Dockerfile 的大致流程
- docker 從基礎鏡像運行一個容器
- 執行一條指令並對容器作出修改
- 執行類似 docker commit 的操作提交一個新的鏡像層
- docker 在基於剛提交的鏡像運行一個新容器
- 執行 dockerfile 中的下一條指令直到所有指令都執行完成
- Dockerfile 內容基礎知識
- DockerFile 體系結構
- FROM
- 基礎鏡像,當前新鏡像是基於哪個鏡像的
- MAINTAINER
- 鏡像維護者的姓名和電子信箱
- RUN
- 容器創建時需要運行的命令
- EXPOSE
- 容器對外暴露出的端口
- WORKDIR
- 創建容器後,終端默認登入進來的工作目錄,工作路徑
- ENV
- 用來創建鏡像過程中設定環境變量
ENV MY_PATH /usr/mytest
- 這個環境變量可以在後續的任何 RUN 指令中使用,這就如同在命令前面指定了環境變量前綴一樣
- 也可以在其他指令中直接使用這些環境變量
- 比如:
WORKDIR $MY_PATH
- 用來創建鏡像過程中設定環境變量
- ADD
- 將本機目錄下的文件複製到鏡像且 ADD 命令會自動處理 URL 和解壓 tar 壓縮檔
- COPY
- 類似 ADD,複製文件和目錄到鏡像中
- 將從創建上下文目錄中 <來源路徑> 的文件/目錄複製到新一層的鏡像內 <目標路徑> 位置
- COPY src dest
- COPY ["src", "dest"]
- VOLUME
- 容器數據卷,用於數據保存和持久化工作
- CMD
- 容器啟動時要運行的命令與 RUN 相似
- Dockerfile 中可以有多個 CMD 指令,但只有最後一個生效,CMD 會被 docker run 之後的參數替換
- ENTRYPOINT
- 容器啟動時要運行的命令
- ENTRYPOINT 的目的和 CMD 一樣,都是在指定容器啟動程式及參數
- ONBUILD
- 當創建一個被繼承的 Dockerfile 時運行命令,父鏡像在被子繼承後父鏡像的 onbuild 會觸發
- FROM