一祝峻、安裝docker
- 確定是CentOS7及以上版本
cat /etc/redhat-release
- 卸載舊版本
https://docs.docker.com/engine/install/centos/
yum安裝gcc相關(guān)
yum -y install gcc
yum -y install gcc-c++
- 安裝需要的軟件包
yum install -y yum-utils
- 設(shè)置stable鏡像倉(cāng)庫(kù)
- 官網(wǎng)要求(不推薦)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 阿里云(推薦)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum軟件包索引
yum makecache fast
- 安裝DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
- 啟動(dòng)docker
systemctl start docker
- 測(cè)試
docker version
docker run hello-world
- 卸載
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
二晌端、docker鏡像相關(guān)命令
- 啟動(dòng)docker
systemctl start docker
- 停止docker
systemctl stop docker
- 重啟docker
systemctl restart docker
- 查看docker狀態(tài)
systemctl status docker
- 開(kāi)機(jī)啟動(dòng)
systemctl enable docker
- 查看docker概要信息
docker info
- 查看docker總體幫助文檔
docker --help
- 查看docker命令幫助文檔
docker 具體命令 --help
- 列出本地主機(jī)上的鏡像
docker images
選項(xiàng)說(shuō)明
選項(xiàng) | 功能 |
---|---|
-a | 列出本地所有的鏡像(含歷史映像層) |
-q | 只顯示鏡像ID |
- 在倉(cāng)庫(kù)中查詢某個(gè)鏡像
docker search [OPTIONS] 鏡像名字
選項(xiàng)說(shuō)明
選項(xiàng) | 功能 |
---|---|
--limit | 只列出N個(gè)鏡像,默認(rèn)25個(gè) |
- 下載鏡像(沒(méi)有TAG就是最新版)
docker pull 鏡像名字[:TAG]
- 查看鏡像/容器/數(shù)據(jù)卷所占的空間
docker system df
- 刪除鏡像
docker rmi -f 鏡像/ID
三医瘫、docker容器相關(guān)命令
- 新建+啟動(dòng)容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
選項(xiàng)說(shuō)明
選項(xiàng) | 功能 |
---|---|
--name="容器新名字" | 為容器指定一個(gè)名稱 |
-d | 后臺(tái)運(yùn)行容器并返回容器ID,也即啟動(dòng)守護(hù)式容器(后臺(tái)運(yùn)行) |
-i | 以交互模式運(yùn)行容器昔搂,通常與 -t 同時(shí)使用 |
-t | 為容器重新分配一個(gè)偽輸入終端竹观,通常與 -i 同時(shí)使用 |
-P | 隨機(jī)端口映射,大寫(xiě)P |
-p | 指定端口映射遭赂,小寫(xiě)p |
-v | 宿主機(jī)路徑與容器內(nèi)路徑映射 |
- 退出容器
run進(jìn)去容器循诉,exit退出,容器停止:
exit
run進(jìn)去容器撇他,ctrl+p+q退出茄猫,容器不停止:
ctrl + p + q
- 啟動(dòng)已停止運(yùn)行的容器
docker start 容器ID或者容器名
- 重啟容器
docker restart 容器ID/容器名
- 停止容器
docker stop 容器ID/容器名
- 強(qiáng)制停止容器
docker kill 容器ID/容器名
- 刪除已停止的容器
- 一次性刪除多個(gè)容器實(shí)例
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
- 查看容器日志
docker logs 容器ID
- 查看容器內(nèi)運(yùn)行的進(jìn)程
docker top 容器ID
- 查看容器內(nèi)部細(xì)節(jié)
docker inspect 容器ID
- 進(jìn)入正在運(yùn)行的容器并以命令行交互
docker exec -it 容器ID bash
是在容器中打開(kāi)新的終端狈蚤,并且可以啟動(dòng)新的進(jìn)程用exit退出,不會(huì)導(dǎo)致容器的停止划纽。
docker attach 容器ID
直接進(jìn)入容器啟動(dòng)命令的終端脆侮,不會(huì)啟動(dòng)新的進(jìn)程用exit退出,會(huì)導(dǎo)致容器的停止勇劣。
- 從容器內(nèi)拷貝文件到主機(jī)上
docker cp 容器ID:容器內(nèi)路徑 目的主機(jī)路徑
- 導(dǎo)出容器
docker export 容器ID > 文件名.tar
導(dǎo)出容器的內(nèi)容留作為一個(gè)tar歸檔文件[對(duì)應(yīng)import命令]
- 導(dǎo)入容器
cat 文件名.tar | docker import - 鏡像用戶/鏡像名:鏡像版本號(hào)
從tar包中的內(nèi)容創(chuàng)建一個(gè)新的文件系統(tǒng)再導(dǎo)入為鏡像[對(duì)應(yīng)export]
四靖避、docker常用命令
- 提交容器副本使之成為一個(gè)新的鏡像
docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]
docker commit -m="提交的描述信息" -a="作者" 容器ID 要?jiǎng)?chuàng)建的目標(biāo)鏡像名:[標(biāo)簽名]
五、DockerFile解析
Dockerfile是用來(lái)構(gòu)建Docker鏡像的文本文件芭毙,是由一條條構(gòu)建鏡像所需的指令和參數(shù)構(gòu)成的腳本筋蓖。
- 編寫(xiě)Dockerfile文件
案例(創(chuàng)建一個(gè)微服務(wù)鏡像)
FROM openjdk:8
# 作者
MAINTAINER debei
# VOLUME 指定臨時(shí)文件目錄為/tmp,在主機(jī)/var/lib/docker目錄下創(chuàng)建了一個(gè)臨時(shí)文件并鏈接到容器的/tmp
VOLUME /tmp
# 將jar包添加到容器中并更名為traffic-sso-eureka-1.0-SNAPSHOT.jar
ADD traffic-sso-eureka-1.0-SNAPSHOT.jar traffic-sso-eureka-1.0-SNAPSHOT.jar
# 運(yùn)行jar包
RUN bash -c 'touch /traffic-sso-eureka-1.0-SNAPSHOT.jar'
ENTRYPOINT ["java","-jar","/traffic-sso-eureka-1.0-SNAPSHOT.jar","--spring.config.location=/home/server/config/sso-eureka.yml"]
#暴露8080端口作為微服務(wù)
EXPOSE 8080
- docker build命令構(gòu)建鏡像
docker build -t 新鏡像名字:TAG .
注意退敦,上面TAG后面有個(gè)空格粘咖,有個(gè)點(diǎn)
- docker run依鏡像運(yùn)行容器實(shí)例
docker run -it 新鏡像名字:TAG
DockerFile常用保留字指令
- FROM
基礎(chǔ)鏡像,當(dāng)前新鏡像是基于哪個(gè)鏡像的侈百,指定一個(gè)已經(jīng)存在的鏡像作為模板瓮下,第一條必須是from - MAINTAINER
鏡像維護(hù)者的姓名和郵箱地址 - RUN
容器構(gòu)建時(shí)需要運(yùn)行的命令,RUN是在 docker build時(shí)運(yùn)行钝域,兩種格式:shell格式讽坏、exec格式 - EXPOSE
當(dāng)前容器對(duì)外暴露出的端口 - WORKDIR
指定在創(chuàng)建容器后,終端默認(rèn)登陸的進(jìn)來(lái)工作目錄例证,一個(gè)落腳點(diǎn) - USER
指定該鏡像以什么樣的用戶去執(zhí)行路呜,如果都不指定,默認(rèn)是root - ENV
用來(lái)在構(gòu)建鏡像過(guò)程中設(shè)置環(huán)境變量 - ADD
將宿主機(jī)目錄下的文件拷貝進(jìn)鏡像且會(huì)自動(dòng)處理URL和解壓tar壓縮包 - COPY
類似ADD织咧,拷貝文件和目錄到鏡像中胀葱。將從構(gòu)建上下文目錄中 <源路徑> 的文件/目錄復(fù)制到新的一層的鏡像內(nèi)的 <目標(biāo)路徑> 位置
COPY src dest
COPY ["src", "dest"]
<src源路徑>:源文件或者源目錄
<dest目標(biāo)路徑>:容器內(nèi)的指定路徑,該路徑不用事先建好笙蒙,路徑不存在的話抵屿,會(huì)自動(dòng)創(chuàng)建。
- VOLUME
容器數(shù)據(jù)卷捅位,用于數(shù)據(jù)保存和持久化工作 - CMD
指定容器啟動(dòng)后的要干的事情
Dockerfile 中可以有多個(gè) CMD 指令轧葛,但只有最后一個(gè)生效,CMD 會(huì)被 docker run 之后的參數(shù)替換
和RUN命令的區(qū)別:CMD是在docker run 時(shí)運(yùn)行艇搀,RUN是在 docker build時(shí)運(yùn)行尿扯。
- ENTRYPOINT
指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令
類似于 CMD 指令,但是ENTRYPOINT不會(huì)被docker run后面的命令覆蓋焰雕,而且這些命令行參數(shù)會(huì)被當(dāng)作參數(shù)送給 ENTRYPOINT 指令指定的程序
如果 Dockerfile 中如果存在多個(gè) ENTRYPOINT 指令姜胖,僅最后一個(gè)生效。
虛懸鏡像
倉(cāng)庫(kù)名淀散、標(biāo)簽都是<none>的鏡像右莱,俗稱dangling image
查看
docker image ls -f dangling=true
刪除所有的虛懸鏡像
docker image prune