網(wǎng)站首頁 編程語言 正文
Ⅰ. 幫助啟動類命令
啟動 docker
systemctl start docker
停止 docker
systemctl stop docker
重啟 docker
systemctl restart docker
查看 docker 狀態(tài)
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: 鏡像創(chuàng)建時間
- SIZE: 鏡像大小
選項:
- -a: 列出本地所有的鏡像
- -q: 只顯示鏡像 ID
docker search
在 hup 服務(wù)器上尋找鏡像,如果沒有配置國內(nèi)鏡像默認就是在 hup.docker.com 上查找。
- NAME: 鏡像名稱
- DESCRIPTION: 鏡像說明
- STARS: STAR 數(shù)
- OFFICIAL: 是否是官方的
- AUTOMATED: 是否是自動構(gòu)建的
選項:
- –limit: 只列出 N 個鏡像,默認 25 個
docker pull
拉取指定鏡像
如果沒有指定 TAG,默認就是最新版,即 docker pull ubuntu:latest
docker system df
查看鏡像/容器/數(shù)據(jù)卷所占用的空間
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 顯示最近創(chuàng)建的容器
- -n 顯示最近 n 個創(chuàng)建的容器
- -q 只顯示容器 ID
退出容器
兩種退出方式
- exit 退出,容器停止
- ctrl + p ctrl + q 退出,容器不停止
啟動已經(jīng)停止的容器
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
啟動守護式容器(后臺服務(wù)器)
docker run -d 鏡像名
請注意,雖然是叫做守護容器,但是如果你的容器內(nèi)部沒有一個前臺進程,即使是使用 docker run -d
運行的容器也會馬上結(jié)束。
因此,需要將我們要運行的程序以前臺進程的形式進行,如下圖所示:
查看容器日志
docker logs 容器ID或者容器名
查看容器內(nèi)運行的進程
docker top 容器ID或者容器名
查看容器內(nèi)部細節(jié)
docker inspect 容器ID或者容器名
進入正在運行的容器
docker exec -it 容器ID或容器名 shell
docker attach 容器ID或容器名
attach
直接進入容器啟動命令的終端,不會啟動新的進程,用 exit 退出,會導(dǎo)致容器的停止。
exec
是在容器中打開新的終端,并且可以啟動新的進程,用 exit 退出,不會導(dǎo)致容器的停止。
推薦用 docket exec
進入正在運行的容器。
從容器內(nèi)拷貝文件到主機上
容器->主機
docker cp 容器ID或容器名:容器內(nèi)路徑 目的主機路徑
主機->容器
docker cp 文件名 容器名:容器內(nèi)路徑
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wObynC2F-1660483281740)(https://incipe.oss-cn-shenzhen.aliyuncs.com/image-20220813165403516.png)]
導(dǎo)入和導(dǎo)出容器
export 導(dǎo)出容器的內(nèi)容流作為一個 tar 歸檔文件[對應(yīng) import 命令]
import 從 tar 包中的內(nèi)容創(chuàng)建一個新的文件系統(tǒng)再導(dǎo)入為鏡像[對應(yīng) export 命令]
docker export 容器ID或容器名 >> 文件名.tar
cat 文件名.tar | docker import -鏡像用戶/鏡像名:鏡像版本號
Ⅳ. 構(gòu)建并發(fā)布自己的鏡像(非Dockerfile方式)
當在創(chuàng)建的容器內(nèi)搭建好了一系列的環(huán)境后,怎么發(fā)布出去給別人用呢?這時就需要 docker commit
命令。
比如新創(chuàng)建的環(huán)境是沒有 vim 編輯器的,當我們在自己的容器中裝好 vim,就可以發(fā)布成新的鏡像。
然后我們執(zhí)行 apt-get update
apt-get install vim
安裝 vim。注意:剛剛運行的容器需要先運行 apt-get update
如此一來我們的容器里面就有了一個 vim 編輯器,現(xiàn)在把其發(fā)布成一個鏡像。
docker commit -m="提交的描述信息" -a="作者" 容器名或容器ID 要創(chuàng)建的鏡像名:[標簽]
把自己制作的鏡像發(fā)布到阿里云容器服務(wù)器或者Docker官網(wǎng)(首先要在容器服務(wù)器網(wǎng)站創(chuàng)建命名空間和倉庫)。
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:[鏡像版本號]
Ⅴ. 容器數(shù)據(jù)卷
數(shù)據(jù)卷是一個可供一個或者多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:
- 數(shù)據(jù)卷可以在容器之間共享和重用
- 對數(shù)據(jù)卷的修改會立馬生效
- 對數(shù)據(jù)卷的更新,不會影響鏡像
- 數(shù)據(jù)卷默認會一直存在,即使容器被刪除
注意:數(shù)據(jù)卷的使用,類似于 Linux 下對目錄或文件進行 mount,鏡像中的被指定為掛載點的目錄中的文件會復(fù)制到數(shù)據(jù)卷中(僅數(shù)據(jù)卷為空時會復(fù)制)
簡而言之,就是把容器內(nèi)的重要數(shù)據(jù)備份長期保存到本地主機目錄。
docker run -it --privileged=true -v /主機絕對路徑目錄:/容器內(nèi)目錄:[ro(read only, default is read write)] 鏡像名
然后在 docker 指定的目錄下生成的文件就會被實時的同步到主機相應(yīng)的目錄了。
執(zhí)行 docker inspect 容器名或容器ID
即可查看掛載的位置。
注意:可以指定多個數(shù)據(jù)卷~
數(shù)據(jù)同步規(guī)則如下:
- docker修改,主機同步修改
- 主機修改,docker修改
- docker stop,主機修改,docker 啟動同步數(shù)據(jù)
數(shù)據(jù)卷之間的繼承
docker run -it --privileged=true --volumes-from 父類 --name=容器名字 鏡像
只要某個容器繼承了數(shù)據(jù)卷,那么就會共享數(shù)據(jù)卷,即無論哪一方修改共享目錄,都會同步,即使 docker stop。
Ⅵ. Dockerfile
前文提到了,我們可以通過 docker commit
定制每一層所添加的配置,文件,但是每次我們添加一層時,都需要 commit 命令,會顯的很麻煩,這時就需要 Dockerfile ,把每一層修改、安裝、構(gòu)建、操作的命令都寫入一個腳本,用這個腳本來構(gòu)建、定制鏡像,那么之前提及的無法重復(fù)的問題、鏡像構(gòu)建透明性的問題、體積的問題就都會解決。
Dockerfile基礎(chǔ)知識
- 每個保留字都必須為大寫字母,并且后面至少要跟一個參數(shù)
- 指令從上到下,順序執(zhí)行
- # 表示注釋
- 每條指令都會創(chuàng)建一個新的鏡像層并對鏡像進行提交
Docker執(zhí)行Dockerfile的大致流程
- docker 從基礎(chǔ)鏡像運行一個容器
- 執(zhí)行一條指令并對容器作出修改
- 執(zhí)行類似 docker commit 的操作提交一個新的鏡像層
- docker 再基于剛剛提交的鏡像運行一個新容器
- 執(zhí)行 dockerfile 中的下一條指令,直到所有指令都執(zhí)行完成
Dockerfile保留字
- FROM 表示當前新鏡像基于哪個鏡像,指定一個已經(jīng)存在的鏡像作為模板,第一條必須是 FROM
- LABEL 維護鏡像的作者信息
- RUN 容器構(gòu)建的時候需要運行的命令
- 兩種格式
- shell 格式
- exec 格式
- RUN 實在 docker build 時運行
- 兩種格式
- EXPOSE 當前容器對外暴露出的端口
- WORKDIR 指定在創(chuàng)建容器后,終端默認登錄進來的工作目錄
- USER 指定該鏡像以什么樣的用戶去執(zhí)行,如果不指定,默認是 root
- ENV 用來構(gòu)建鏡像過程中設(shè)置環(huán)境變量
- ADD 將宿主機目錄下的文件拷貝進鏡像且會自動處理 URL 和解 tar 包
- COPY 類似 ADD,拷貝主機文件和目錄到鏡像中
- VOLUME 上文說的數(shù)據(jù)卷
- CMD 指定容器啟動后要干的事情
- Dockerfile 可以有多個 CMD 指令,但是只有最后一個生效,CMD 會被 docker run 之后的指令替換
- 跟 RUN 的區(qū)別
- RUN 是在 docker build 后執(zhí)行
- CMD 實在 docker run 后執(zhí)行
- ENTRYPOINT 容器啟動時要運行的命令,類似于 CMD 命令,但是 ENTRYPOINT 不會被 docker run 后面的指令覆蓋,而且這些指令會被當作參數(shù)送給 ENTRYPOINT 指令指定的程序
更多的參考 Dockerfile reference
原文鏈接:https://blog.csdn.net/qq_43826212/article/details/126336544
相關(guān)推薦
- 2022-04-06 Python數(shù)據(jù)結(jié)構(gòu)之循環(huán)鏈表詳解_python
- 2022-09-16 記一次SQL優(yōu)化的實戰(zhàn)記錄_數(shù)據(jù)庫其它
- 2023-01-17 SqlServer事務(wù)語法及使用方法詳解_MsSql
- 2022-10-14 yum 倉庫管理 yum-config-manager
- 2022-03-16 VS2022?安裝.NET4.5目標包的方法_實用技巧
- 2023-04-04 C語言對于volatile與gcc優(yōu)化的探究_C 語言
- 2022-06-06 uniApp、API ‘offCompassChange‘ is not yet implement
- 2022-09-12 jQuery事件注冊的實現(xiàn)示范_jquery
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支