docker 命令詳解官方地址
https://docs.docker.com/engine/reference/
基本命令
docker version ##查看docker版本信息
docker info ##顯示docker的系統(tǒng)信息题画,包括鏡像和容器數(shù)量
docker --help ##docker 幫助命令##
docker inspect -f "{{ .RestartCount }}" 容器 ##查看容器啟動(dòng)次數(shù)命令
docker inspect -f "{{ .State.StartedAt }}" 容器 ##查看容器最后一次啟動(dòng)時(shí)間
docker inspect -f "{{ .Config.Env }}" 容器 ##查看容器環(huán)境配置
鏡像命令
docker images ##查看所有本機(jī)上的鏡像
docker search ##搜索
docker search XXX --filter=stars=3000 ##搜索星大于3000的鏡像
docker pull XXX:TAG ##獲取鏡像
docker rmi XXX ##刪除XXX鏡像,可以通過(guò)ID或者名稱刪除
docker rmi -f $(docker images -aq) ##刪除所有鏡像
容器命令
docker run --help
docker run [可選參數(shù)] images
#參數(shù)說(shuō)明
--name =“Name” 容器名字 XXX ,用來(lái)區(qū)分容器
-d 后臺(tái)方式運(yùn)行
-it 使用交互方式運(yùn)行母谎,進(jìn)入容器查看內(nèi)容
-p 指定容器的端口 -p 8080:8080
-p ip:主機(jī)端口:容器端口
-p 主機(jī)端口:容器端口 (常用)
-p 容器端口
-p 隨機(jī)指定端口
docker stats ##查看cpu的狀態(tài)
列出所有運(yùn)行的容器
docker ps
列出當(dāng)前正在運(yùn)行的容器
-a ##列出所有運(yùn)行過(guò)的容器(包括曾經(jīng)運(yùn)行過(guò)的)
-n =急但? ##顯示最近創(chuàng)建的容器
-q ##只顯示容器的編號(hào)
退出容器
exit ##直接容器停止并退出
ctrl + p + Q ##容器不停止退出
刪除容器
docker rm 容器id ##刪除指定容器
docker rm -f $(docker ps -aq) ##刪除所有容器
docker ps -a -q | xargs docker rm ##刪除所有容器
啟動(dòng)和停止容器的操作
docker start 容器id/name #啟動(dòng)指定容器
docker stop 容器id/name #停止指定的容器
docker restart 容器id/name #重啟指定容器
docker kill 容器id/name #強(qiáng)制停止當(dāng)前容器
常用的其他命令
docker run
-d 后臺(tái)啟動(dòng)容器(常見的坑,docker 容器使用后臺(tái)運(yùn)行篱昔,就必須要一個(gè)前臺(tái)進(jìn)程,docker發(fā)現(xiàn)沒(méi)有應(yīng)用,就會(huì)自動(dòng)停止)
docker logs --help
docker logs -f 容器id
docker logs -tf --tail 10 容器id ##顯示最新10條命令
docker top 容器id
docker inspect --help
docker inspect 容器id/name
- 進(jìn)入當(dāng)前正在運(yùn)行的容器
#我們通常容器都是使用后臺(tái)方式運(yùn)行的膨桥,需要進(jìn)入容器蛮浑,修改一些配置
#命令
docker exec -it 容器id/name /bin/bash
docker exec -it 容器id/name /bin/sh
#exec 進(jìn)入容器后開啟一個(gè)新的終端,可以在里面操作(常用)
docker attach 容器id/name
#進(jìn)入容器正在執(zhí)行的終端只嚣,不會(huì)啟動(dòng)新的進(jìn)程
docker cp 容器id:容器內(nèi)路徑 目的主機(jī)的路徑
docker commit
docker commit 提交容器成為一個(gè)新的副本
##命令和git原理類似
docker commit -m ="提交的描述信息 " -a="作者" 容器id/name 目標(biāo)鏡像名:[TAG]
docker容器數(shù)據(jù)卷
##方式一:直接使用命令掛載 -v
docker run -it -v 主機(jī)目錄:容器內(nèi)目錄
啟動(dòng)成功之后可以通過(guò) docker inspect 容器id/name 查掛載是否成功
##具名和匿名掛載
-v 容器內(nèi)路徑 ##匿名掛載
-v 卷名:容器內(nèi)路徑 #具名掛載
-v /宿主機(jī)路徑:容器內(nèi)路徑 #指定路徑掛載
docker File
docker build --help
docker build -f 目錄地址 -t 文件名 . #注意后邊的點(diǎn)不要漏掉了
#注意腳本指令都是大寫的
docker run -it --name docker02 --vlumes-from docker01 XXX/centos:latest(卷共享)
##容器卷的生命周期是一直持續(xù)到?jīng)]有人使用為止陵吸,但是一旦持久化到了本地,這個(gè)時(shí)候介牙,本地的數(shù)據(jù) 是不會(huì)刪除的
##指令
FROM #格式:FROM image或FROM image:tag 【Dockerfile中第一條指令必須是FROM指令壮虫,且在同一個(gè)Dockerfile中創(chuàng)建多個(gè)鏡像時(shí),可以使用多個(gè)FROM指令】
MAINTAINER #格式為MAINTAINER user_name user_email 【指定維護(hù)者信息RUN】
RUN #格式為RUN command或 RUN["EXECUTABLE","PARAM1","PARAM2".....]【前者在shell終端中運(yùn)行命令环础,/bin/sh -c command囚似,例如:/bin/sh -c "echo hello";后者使用exec執(zhí)行线得,指定其他運(yùn)行終端使用RUN["/bin/bash","-c","echo hello"] 饶唤,每條RUN指令將當(dāng)前的鏡像基礎(chǔ)上執(zhí)行指令,并提交為新的鏡像贯钩,命令較長(zhǎng)的時(shí)候可以使用\來(lái)?yè)Q行 】
ADD #格式:ADD src dest 【該命令將復(fù)制指定本地目錄中的文件到容器中的dest中募狂,src可以是是一個(gè)絕對(duì)路徑,也可以是一個(gè)URL或一個(gè)tar文件角雷,tar文件會(huì)自動(dòng)解壓為目錄】
WORKDIR #格式: WORKDIR /path 【為后續(xù)的RUN CMD ENTRYPOINT指定配置工作目錄祸穷,可以使用多個(gè)WORKDIR指令,若后續(xù)指令用的是相對(duì)路徑勺三,則會(huì)基于之前的命令指定路徑】
VOLUME #格式: VOLUME ["/data"] 【作用是創(chuàng)建在本地主機(jī)或其他容器可以掛載的數(shù)據(jù)卷雷滚,用來(lái)存放數(shù)據(jù)】
EXPOSE #格式: EXPOSE port [port2,port3,...] 【例如EXPOSE 80這條指令告訴Docker服務(wù)器暴露80端口,供容器外部連接使用吗坚。在啟動(dòng)容器的使用使用-P祈远,Docker會(huì)自動(dòng)分配一個(gè)端口和轉(zhuǎn)發(fā)指定的端口,使用-p可以具體指定使用哪個(gè)本地的端口來(lái)映射對(duì)外開放的端口】
CMD #支持三種格式:
# CMD ["executable","param1","param2"]商源,使exec執(zhí)行车份,這是推薦的方。
# CMD command param1 param2 在/bin/sh中執(zhí)行
# CMD ["param1","param2"] 提供給ENTERYPOINT的默認(rèn)參數(shù)
#CMD用于指定容器啟動(dòng)時(shí)執(zhí)行的命令牡彻,每個(gè)Dockerfile只能有一個(gè)CMD命令扫沼,多個(gè)CMD命令只執(zhí)行最后一個(gè)。若容器啟動(dòng)時(shí)指定了運(yùn)行的命令讨便,則會(huì)覆蓋掉CMD中指定的命令
ENTRYPOINT #格式有兩種:
#ENTRYPOINT ["executable","param1","param2"]
#ENTRYPOINT command param1,param2 會(huì)在shell中執(zhí)行浴井。
#用于配置容器啟動(dòng)后執(zhí)行的命令命锄,這些命令不能被docker run提供的參數(shù)覆蓋项郊。和CMD一樣芒粹,每個(gè)Dockerfile中只能有一個(gè)ENTRYPOINT,當(dāng)有多個(gè)時(shí)最后一個(gè)生效(我們運(yùn)行容器時(shí)追加的命令废菱,是直接拼接在ENTRYPOINT 命令后面的)
USER #格式:USER username 【指定容器運(yùn)行時(shí)的用戶名或UID技矮,后續(xù)的RUN也會(huì)使用指定的用戶抖誉。要臨時(shí)使用管理員權(quán)限可以使用sudo。在USER命令之前可以使用RUN命令創(chuàng)建需要的用戶衰倦。例如:RUN groupadd -r docker && useradd -r -g docker docker】
ONBUILD #格式:ONBUILD [INSTRUCTION] 【該配置指定當(dāng)所創(chuàng)建的鏡像作為其他新建鏡像的基礎(chǔ)鏡像時(shí)所執(zhí)行的指令】
COPY #格式:COPY src desc 【復(fù)制本地主機(jī)src目錄或文件到容器的desc目錄袒炉,desc不存在時(shí)會(huì)自動(dòng)創(chuàng)建】
ENV #格式:EVN key value 【用于指定環(huán)境變量,這些環(huán)境變量樊零,后續(xù)可以被RUN指令使用我磁,容器運(yùn)行起來(lái)之后,也可以在容器中獲取這些環(huán)境變量】
docker build
#創(chuàng)建好Dockerfile之后驻襟,通過(guò)docker build命令來(lái)創(chuàng)建鏡像夺艰,該命令首先會(huì)上傳Dockerfile文件給Docker服務(wù)器端,服務(wù)器端將逐行執(zhí)行Dockerfile中定義的指令沉衣。
#通常建議放置Dockerfile的目錄為空目錄郁副。另外可以在目錄下創(chuàng)建.dockerignore文件,讓Docker忽略路徑下的文件和目錄豌习,這一點(diǎn)與Git中的配置很相似存谎。
#通過(guò) -t 指定鏡像的標(biāo)簽信息,例如:docker build -t regenzm/first_image . 【"."指定的是Dockerfile所在的路徑】
docker 網(wǎng)絡(luò)
查看所有的docker網(wǎng)絡(luò)
docker network ls
##網(wǎng)絡(luò)模式
bridge #橋接docker(默認(rèn))
none #不配置網(wǎng)絡(luò)
host #和宿主機(jī)共享網(wǎng)絡(luò)
container #容器網(wǎng)絡(luò)聯(lián)通(用的少肥隆,局限很大)
自定義docker網(wǎng)絡(luò)
好處:不同的集群使用不同的網(wǎng)絡(luò)既荚,保證集群是安全和健康的
docker network --help
docker network create --help
docker網(wǎng)絡(luò)聯(lián)通