網站首頁 編程語言 正文
Ⅰ. 幫助啟動類命令
啟動 docker
systemctl start docker
停止 docker
systemctl stop docker
重啟 docker
systemctl restart docker
查看 docker 狀態
systemctl status docker
開機啟動
systemctl enable docker
查看 docker 信息
docker info
查看 docker 幫助文檔
docker --help
查看 docker 命令幫助文檔
docker 具體命令 --help
Ⅱ. 鏡像類命令
docker images
列出本地主機上的鏡像
- REPOSITORY: 倉庫鏡像的倉庫源
- TAG: 鏡像的標簽版本號(同一倉庫源可以有多個 TAG 版本,使用 REPOSITORY:TAG 來定義不同的鏡像)
- IMAGE ID: 鏡像 ID
- CREATED: 鏡像創建時間
- SIZE: 鏡像大小
選項:
- -a: 列出本地所有的鏡像
- -q: 只顯示鏡像 ID
docker search
在 hup 服務器上尋找鏡像,如果沒有配置國內鏡像默認就是在 hup.docker.com 上查找。
- NAME: 鏡像名稱
- DESCRIPTION: 鏡像說明
- STARS: STAR 數
- OFFICIAL: 是否是官方的
- AUTOMATED: 是否是自動構建的
選項:
- –limit: 只列出 N 個鏡像,默認 25 個
docker pull
拉取指定鏡像
如果沒有指定 TAG,默認就是最新版,即 docker pull ubuntu:latest
docker system df
查看鏡像/容器/數據卷所占用的空間
docker rmi
刪除某個鏡像
刪除單個:docker rmi -f 鏡像ID
刪除多個:docker rmi -f 鏡像名1:TAG 鏡像名2:TAG
刪除全部:docker rmi -f $(docker images -qa)
Ⅲ. 容器類命令
新建并啟動容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
選項
- –name=“容器的名字”
- -d 后臺運行容器并返回容器 ID,也即啟動守護式容器
- -i 以交互模式運行容器,通常跟 -t 同時使用
- -t 為容器重新分配一個偽 tty(終端),通常與 -i 同時使用
- -P(大寫)隨機端口映射
- -p(小寫)指定端口映射
列出當前所有正在運行的容器
docker ps
選項
- -a 列出所有容器,不加 -a 只會顯示正在運行的容器
- -l 顯示最近創建的容器
- -n 顯示最近 n 個創建的容器
- -q 只顯示容器 ID
退出容器
兩種退出方式
- exit 退出,容器停止
- ctrl + p ctrl + q 退出,容器不停止
啟動已經停止的容器
docker start 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
強制停止容器
docker kill 容器ID或者容器名
刪除已停止的容器
docker rm 容器ID或者容器名
沒有停止的容器加上選項 -f
既可以刪除。
一次性刪除多個容器實列 docker rm -f $(docker ps -aq)
或者 docker ps -a -q | xargs docker rm
啟動守護式容器(后臺服務器)
docker run -d 鏡像名
請注意,雖然是叫做守護容器,但是如果你的容器內部沒有一個前臺進程,即使是使用 docker run -d
運行的容器也會馬上結束。
因此,需要將我們要運行的程序以前臺進程的形式進行,如下圖所示:
查看容器日志
docker logs 容器ID或者容器名
查看容器內運行的進程
docker top 容器ID或者容器名
查看容器內部細節
docker inspect 容器ID或者容器名
進入正在運行的容器
docker exec -it 容器ID或容器名 shell
docker attach 容器ID或容器名
attach
直接進入容器啟動命令的終端,不會啟動新的進程,用 exit 退出,會導致容器的停止。
exec
是在容器中打開新的終端,并且可以啟動新的進程,用 exit 退出,不會導致容器的停止。
推薦用 docket exec
進入正在運行的容器。
從容器內拷貝文件到主機上
容器->主機
docker cp 容器ID或容器名:容器內路徑 目的主機路徑
主機->容器
docker cp 文件名 容器名:容器內路徑
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wObynC2F-1660483281740)(https://incipe.oss-cn-shenzhen.aliyuncs.com/image-20220813165403516.png)]
導入和導出容器
export 導出容器的內容流作為一個 tar 歸檔文件[對應 import 命令]
import 從 tar 包中的內容創建一個新的文件系統再導入為鏡像[對應 export 命令]
docker export 容器ID或容器名 >> 文件名.tar
cat 文件名.tar | docker import -鏡像用戶/鏡像名:鏡像版本號
Ⅳ. 構建并發布自己的鏡像(非Dockerfile方式)
當在創建的容器內搭建好了一系列的環境后,怎么發布出去給別人用呢?這時就需要 docker commit
命令。
比如新創建的環境是沒有 vim 編輯器的,當我們在自己的容器中裝好 vim,就可以發布成新的鏡像。
然后我們執行 apt-get update
apt-get install vim
安裝 vim。注意:剛剛運行的容器需要先運行 apt-get update
如此一來我們的容器里面就有了一個 vim 編輯器,現在把其發布成一個鏡像。
docker commit -m="提交的描述信息" -a="作者" 容器名或容器ID 要創建的鏡像名:[標簽]
把自己制作的鏡像發布到阿里云容器服務器或者Docker官網(首先要在容器服務器網站創建命名空間和倉庫)。
docker login --username=XXXXXX registry.cn-shenzhen.aliyuncs.com
docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/incipe/test:[鏡像版本號]
docker push registry.cn-shenzhen.aliyuncs.com/incipe/test:[鏡像版本號]
Ⅴ. 容器數據卷
數據卷是一個可供一個或者多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:
- 數據卷可以在容器之間共享和重用
- 對數據卷的修改會立馬生效
- 對數據卷的更新,不會影響鏡像
- 數據卷默認會一直存在,即使容器被刪除
注意:數據卷的使用,類似于 Linux 下對目錄或文件進行 mount,鏡像中的被指定為掛載點的目錄中的文件會復制到數據卷中(僅數據卷為空時會復制)
簡而言之,就是把容器內的重要數據備份長期保存到本地主機目錄。
docker run -it --privileged=true -v /主機絕對路徑目錄:/容器內目錄:[ro(read only, default is read write)] 鏡像名
然后在 docker 指定的目錄下生成的文件就會被實時的同步到主機相應的目錄了。
執行 docker inspect 容器名或容器ID
即可查看掛載的位置。
注意:可以指定多個數據卷~
數據同步規則如下:
- docker修改,主機同步修改
- 主機修改,docker修改
- docker stop,主機修改,docker 啟動同步數據
數據卷之間的繼承
docker run -it --privileged=true --volumes-from 父類 --name=容器名字 鏡像
只要某個容器繼承了數據卷,那么就會共享數據卷,即無論哪一方修改共享目錄,都會同步,即使 docker stop。
Ⅵ. Dockerfile
前文提到了,我們可以通過 docker commit
定制每一層所添加的配置,文件,但是每次我們添加一層時,都需要 commit 命令,會顯的很麻煩,這時就需要 Dockerfile ,把每一層修改、安裝、構建、操作的命令都寫入一個腳本,用這個腳本來構建、定制鏡像,那么之前提及的無法重復的問題、鏡像構建透明性的問題、體積的問題就都會解決。
Dockerfile基礎知識
- 每個保留字都必須為大寫字母,并且后面至少要跟一個參數
- 指令從上到下,順序執行
- # 表示注釋
- 每條指令都會創建一個新的鏡像層并對鏡像進行提交
Docker執行Dockerfile的大致流程
- docker 從基礎鏡像運行一個容器
- 執行一條指令并對容器作出修改
- 執行類似 docker commit 的操作提交一個新的鏡像層
- docker 再基于剛剛提交的鏡像運行一個新容器
- 執行 dockerfile 中的下一條指令,直到所有指令都執行完成
Dockerfile保留字
- FROM 表示當前新鏡像基于哪個鏡像,指定一個已經存在的鏡像作為模板,第一條必須是 FROM
- LABEL 維護鏡像的作者信息
- RUN 容器構建的時候需要運行的命令
- 兩種格式
- shell 格式
- exec 格式
- RUN 實在 docker build 時運行
- 兩種格式
- EXPOSE 當前容器對外暴露出的端口
- WORKDIR 指定在創建容器后,終端默認登錄進來的工作目錄
- USER 指定該鏡像以什么樣的用戶去執行,如果不指定,默認是 root
- ENV 用來構建鏡像過程中設置環境變量
- ADD 將宿主機目錄下的文件拷貝進鏡像且會自動處理 URL 和解 tar 包
- COPY 類似 ADD,拷貝主機文件和目錄到鏡像中
- VOLUME 上文說的數據卷
- CMD 指定容器啟動后要干的事情
- Dockerfile 可以有多個 CMD 指令,但是只有最后一個生效,CMD 會被 docker run 之后的指令替換
- 跟 RUN 的區別
- RUN 是在 docker build 后執行
- CMD 實在 docker run 后執行
- ENTRYPOINT 容器啟動時要運行的命令,類似于 CMD 命令,但是 ENTRYPOINT 不會被 docker run 后面的指令覆蓋,而且這些指令會被當作參數送給 ENTRYPOINT 指令指定的程序
更多的參考 Dockerfile reference
原文鏈接:https://blog.csdn.net/qq_43826212/article/details/126336544
相關推薦
- 2024-07-15 SpringBoot使用EasyExcel導出Excel(含設置下拉框、表頭凍結)
- 2023-02-10 jupyter?notebook如何使用matlab_python
- 2022-07-25 軟件測試業務梳理的實用技巧_應用技巧
- 2022-08-13 Spring中@Bean注解的作用以及如何使用
- 2022-09-04 Docker-Compose?容器集群的快速編排方法_docker
- 2022-08-15 Dubbo3基礎配置安裝及整合Springboot
- 2023-07-02 Python中列出目錄中的文件的五種方法小結_python
- 2023-01-13 Pytorch中的modle.train,model.eval,with?torch.no_grad
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支