欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:運(yùn)維 Docker學(xué)習(xí)筆記

柚子快報(bào)邀請(qǐng)碼778899分享:運(yùn)維 Docker學(xué)習(xí)筆記

http://yzkb.51969.com/

Docker學(xué)習(xí)筆記

Docker鏡像、容器、工作進(jìn)程關(guān)系圖安裝與卸載Docker(CentOS)安裝卸載

常用命令幫助啟動(dòng)類(lèi)命令鏡像命令列出本地主機(jī)上的鏡像查找遠(yuǎn)程倉(cāng)庫(kù)中的指定鏡像下載鏡像查看鏡像/容器/數(shù)據(jù)卷所占的空間刪除某個(gè)鏡像問(wèn)題:什么是Docker虛懸鏡像

容器命令新建并啟動(dòng)容器列出當(dāng)前所有正在運(yùn)行的容器退出容器啟動(dòng)已經(jīng)停止的容器重啟、停止、強(qiáng)制停止容器刪除已停止的容器啟動(dòng)守護(hù)容器詳解何為守護(hù)容器?機(jī)制解析

查看容器日志查看容器內(nèi)運(yùn)行的進(jìn)程查看容器內(nèi)部細(xì)節(jié)進(jìn)入正在運(yùn)行的容器并以命令行交互(重要)docker exec命令docker attach命令兩者區(qū)別例子:進(jìn)入正在運(yùn)行的redis容器并以命令行形式進(jìn)行交互

從容器內(nèi)拷貝命令到主機(jī)上導(dǎo)入和導(dǎo)出容器(用于自己制作鏡像)方式1:export和import方式2:commit兩者區(qū)別

容器數(shù)據(jù)卷查看容器的掛載目錄(文件)容器卷之間的繼承掛載權(quán)限問(wèn)題

Dockerfile(重點(diǎn))Docker執(zhí)行Dockerfile的大致流程常用保留字*

DockerNetWork(重點(diǎn))DockerNetWork的作用docker網(wǎng)絡(luò)模式設(shè)置方式bridge模式(常用)host模式none模式container模式

自定義docker網(wǎng)絡(luò)(常用)創(chuàng)建和加入命令注意點(diǎn)(關(guān)注)

查看docker網(wǎng)絡(luò)查看網(wǎng)絡(luò)源數(shù)據(jù)

Docker Compose容器編排(重點(diǎn))安裝容器編排步驟Compose 模板文件指令

Docker鏡像、容器、工作進(jìn)程關(guān)系圖

</p><p>

安裝與卸載Docker(CentOS)

官網(wǎng)安裝教程地址

安裝

如果已經(jīng)安裝過(guò)舊版本的docker需要先通過(guò)以下命令刪除

sudo yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine

然后通過(guò)以下命令確認(rèn)CentOS的版本在7及以上(這里使用的是7.6.1810版本)

cat /etc/centos-release

然后通過(guò)以下命令安裝gcc環(huán)境

sudo yum -y install gcc

sudo yum -y install gcc-c++

然后通過(guò)以下命令安裝yum-utils

sudo yum install -y yum-utils

然后設(shè)置stable鏡像倉(cāng)庫(kù)(用于下載docker遠(yuǎn)程倉(cāng)庫(kù)中的鏡像,因?yàn)樵诖箨懰越ㄗh采用阿里或騰訊等的源) 這里采用阿里云的源

sudo yum-config-manager \

--add-repo \

http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

然后最好更新以下yum軟件包索引 注意:CentOS8要去掉fast

sudo yum makecache fast

然后要安裝Docker引擎

sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安裝完以上環(huán)境后就可以啟動(dòng)Docker了

sudo systemctl start docker

啟動(dòng)后通過(guò)以下命令測(cè)試是否啟動(dòng)完成

sudo docker version

如果出現(xiàn)以下信息則說(shuō)明安裝成功 注意:Client端和Server端的版本號(hào)要一致 </p><p> 可以再使用以下命令進(jìn)行驗(yàn)證

sudo docker run hello-world

如果出現(xiàn)以下內(nèi)容說(shuō)明docker運(yùn)行正常 </p><p>

卸載

# 停止服務(wù)

sudo systemctl stop docker

# 移除docker依賴(lài)

sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 移除本地配置文件和各種第三方依賴(lài)

sudo rm -rf /var/lib/docker

sudo rm -rf /var/lib/containerd

常用命令

幫助啟動(dòng)類(lèi)命令

</p><p>

鏡像命令

列出本地主機(jī)上的鏡像

docker images

如下圖所示: </p><p> 各個(gè)表格項(xiàng)說(shuō)明: REPOSITORY:表示鏡像的倉(cāng)庫(kù)源 TAG:鏡像的標(biāo)簽(相當(dāng)于版本號(hào)) IMAGE ID:鏡像唯一ID CREATED:鏡像創(chuàng)建時(shí)間 SIZE:鏡像大小

同一倉(cāng)庫(kù)源可以有多個(gè)TAG版本,代表這個(gè)倉(cāng)庫(kù)源的不同個(gè)版本,我們使用REPOSITORY:TAG來(lái)定義不同的鏡像。如果你不指定一個(gè)鏡像的版本標(biāo)簽,例如你只使用ubuntu,docker將默認(rèn)使用ubuntu:latest鏡像

常用參數(shù):

-a:列出本地所有的鏡像(含歷史映像層)

-q:只顯示鏡像ID

查找遠(yuǎn)程倉(cāng)庫(kù)中的指定鏡像

docker search 鏡像名稱(chēng)

比如查找redis鏡像: </p><p> 各個(gè)表格項(xiàng)說(shuō)明: NAME:鏡像名稱(chēng) DESCRIPTION:鏡像說(shuō)明 STARS:點(diǎn)贊數(shù)量 OFFICIAL:是否是官方的 AUTOMATED:是否是自動(dòng)構(gòu)建的

常用參數(shù):

--limit :只列出N個(gè)鏡像,默認(rèn)25個(gè)

比如:docker search --limit 5 redis

下載鏡像

docker pull 鏡像名稱(chēng)[:TAG]

沒(méi)有TAG就是最新版 等價(jià)于

docker pull 鏡像名字:latest

查看鏡像/容器/數(shù)據(jù)卷所占的空間

docker system df

如下: </p><p>

刪除某個(gè)鏡像

docker rmi 某個(gè)鏡像名字或ID

當(dāng)被刪除的鏡像已經(jīng)創(chuàng)建了實(shí)例容器后,需要用以下參數(shù)強(qiáng)制刪除:

-f

比如:docker rmi -f redis

強(qiáng)制刪除多個(gè):

docker rmi -f 鏡像名1[:TAG] 鏡像名2[:TAG] ...

問(wèn)題:什么是Docker虛懸鏡像

倉(cāng)庫(kù)名、標(biāo)簽都是的鏡像,俗稱(chēng)虛懸鏡像dangling image

容器命令

新建并啟動(dòng)容器

docker run [options] image [command] [arg...]

run執(zhí)行流程圖 </p><p> 常用選項(xiàng)(options,重點(diǎn)):

--name="容器新名字" 為容器指定一個(gè)名稱(chēng);

-d:后臺(tái)運(yùn)行容器并返回容器ID,也即啟動(dòng)守護(hù)式容器(后臺(tái)運(yùn)行);

-i:以交互模式運(yùn)行容器,通常與t同時(shí)使用;

-t:為容器重新分配一個(gè)偽輸入終端,通常與-i同時(shí)使用;

也即啟動(dòng)交互式容器(前臺(tái)有偽終端,等待交互);

-P:隨機(jī)端口映射,大寫(xiě)P

-p:指定端口映射,小寫(xiě)p

釋義: 1.啟動(dòng)一個(gè)交互式容器,比如一個(gè)centos系統(tǒng) </p><p> 如果使用的不是鏡像的latest版本則需要在后面加上版本號(hào)

啟動(dòng)完成后注意觀察終端的用戶(hù)名稱(chēng),會(huì)變?yōu)樾陆K端的名稱(chēng)。此時(shí)可以進(jìn)行交互 </p><p>

2.端口映射的作用 </p><p>

列出當(dāng)前所有正在運(yùn)行的容器

docker ps [options]

</p><p> 常用選項(xiàng):

-a:列出當(dāng)前所有正在運(yùn)行的容器+歷史上運(yùn)行過(guò)的

-l:顯示最近創(chuàng)建的容器

-n:顯示最近n個(gè)創(chuàng)建的容器

-q:靜默模式,只顯示容器編號(hào)

退出容器

1、使用exit命令退出 run進(jìn)去容器,exit退出,容器停止 2、ctrl+p+q run進(jìn)去容器,ctrl+p+q退出,容器不停止

啟動(dòng)已經(jīng)停止的容器

docker start 容器ID或者容器名

重啟、停止、強(qiáng)制停止容器

#重啟

docker restart 容器ID或者容器名

#停止

docker stop 容器ID或者容器名

#強(qiáng)制停止

docker kill 容器ID或者容器名

刪除已停止的容器

一定要先停止容器才能刪除

docker rm 容器ID

常用選項(xiàng)

-f:強(qiáng)制刪除某個(gè)容器,即使正在運(yùn)行

一次性刪除多個(gè)容器實(shí)例

docker rm -f $(docker ps -a -q)

docker ps -a -q | xargs docker rm

啟動(dòng)守護(hù)容器詳解

何為守護(hù)容器?

在大部分的場(chǎng)景下,我們希望docker的服務(wù)是在后臺(tái)運(yùn)行的,我們可以過(guò) -d 指定容器的后臺(tái)運(yùn)行模式。

機(jī)制解析

很重要的一點(diǎn): Docker容器后臺(tái)運(yùn)行,就必須有一個(gè)前臺(tái)進(jìn)程 容器運(yùn)行的命令如果不是那些一直掛起的命令(比如運(yùn)行top,tail),就是會(huì)自動(dòng)退出的。

例子:以守護(hù)容器的方式啟動(dòng)redis </p><p>

查看容器日志

docker logs 容器ID

</p><p>

查看容器內(nèi)運(yùn)行的進(jìn)程

docker top 容器ID

</p><p>

查看容器內(nèi)部細(xì)節(jié)

docker inspect 容器ID

</p><p>

進(jìn)入正在運(yùn)行的容器并以命令行交互(重要)

docker exec命令

docker exec [options] 容器ID 命令行環(huán)境(bash或者/bin/bash或者/bin/sh)

常用選項(xiàng)

-d:后臺(tái)運(yùn)行容器并返回容器ID,也即啟動(dòng)守護(hù)式容器(后臺(tái)運(yùn)行);

-i:以交互模式運(yùn)行容器,通常與t同時(shí)使用;

-t:為容器重新分配一個(gè)偽輸入終端,通常與-i同時(shí)使用;

也即啟動(dòng)交互式容器(前臺(tái)有偽終端,等待交互);

docker attach命令

docker attach 容器ID

兩者區(qū)別

attach直接進(jìn)入容器啟動(dòng)命令的終端,不會(huì)啟動(dòng)新的進(jìn)程用exit退出,會(huì)導(dǎo)致容器的停止。 exec是在容器中打開(kāi)新的終端,并且可以啟動(dòng)新的進(jìn)程用exit退出,不會(huì)導(dǎo)致容器的停止。

推薦使用exec

例子:進(jìn)入正在運(yùn)行的redis容器并以命令行形式進(jìn)行交互

</p><p>

從容器內(nèi)拷貝命令到主機(jī)上

docker cp 容器ID:容器內(nèi)路徑 目的主機(jī)路徑

導(dǎo)入和導(dǎo)出容器(用于自己制作鏡像)

方式1:export和import

注意:導(dǎo)入的容器會(huì)作為一個(gè)鏡像?。。?/p>

#導(dǎo)出

docker export 容器ID > 文件名.tar(或者一個(gè)新文件的絕對(duì)路徑,只有文件名即導(dǎo)入到當(dāng)前目錄下)

# 導(dǎo)入

cat 文件名.tar(或者一個(gè)新文件的絕對(duì)路徑) | docker import - 鏡像用戶(hù)/鏡像名:鏡像版本號(hào)

鏡像用戶(hù)、鏡像名、鏡像版本號(hào)均可自定義,注意:橫杠和后面的內(nèi)容直接有空格

export導(dǎo)出容器的內(nèi)容流作為一個(gè)tar歸檔文件[對(duì)應(yīng)import命令] import 從tar包中的內(nèi)容創(chuàng)建一個(gè)新的文件系統(tǒng)再導(dǎo)入為鏡像[對(duì)應(yīng)export命令] </p><p>

方式2:commit

通過(guò)該命令將一個(gè)容器處理成一個(gè)鏡像

docker commit -m="提交的信息" -a="作者" 容器ID 要?jiǎng)?chuàng)建的目標(biāo)鏡像名[:版本號(hào)]

兩者區(qū)別

方式一相當(dāng)于先把一個(gè)容器打包成壓縮包然后導(dǎo)入成一個(gè)鏡像其本質(zhì)是一個(gè)壓縮包,每次都是一個(gè)整體。方式二相當(dāng)于在Base鏡像的基礎(chǔ)上擴(kuò)展,如下圖: </p><p>

容器數(shù)據(jù)卷

主要作用: 1.將容器內(nèi)的數(shù)據(jù)備份到宿主機(jī)對(duì)應(yīng)目錄中,防止數(shù)據(jù)丟失 2.在讀寫(xiě)權(quán)限允許的情況下,可以在宿主機(jī)目錄中對(duì)映射的容器內(nèi)對(duì)應(yīng)文件進(jìn)行修改而不必進(jìn)入容器修改。簡(jiǎn)化操作 </p><p> 語(yǔ)法:

1.使用命令 </p><p> </p><p> 使用多個(gè)-v命令可以?huà)燧d多個(gè)文件或目錄 如果要設(shè)置讀寫(xiě)權(quán)限則在后面加上即可,如下 (默認(rèn)為rw): </p><p> </p><p> 這里的權(quán)限限制的是容器內(nèi)的目錄或文件而不是宿主機(jī) 2.使用docker-compose編排服務(wù) </p><p>

</p><p>

個(gè)人理解: 比如在宿主機(jī)A中有個(gè)xxx.txt文件,在容器B中有個(gè)yyy.txt文件。 此時(shí)通過(guò) -v命令 將宿主機(jī)A中的xxx.txt文件與容器B中的yyy.txt文件進(jìn)行映射(即將容器B中的yyy.txt文件掛載到宿主機(jī)A中的xxx.txt文件)。這種映射可以是文件,也可以是目錄。 此時(shí)如果容器中對(duì)應(yīng)文件是可讀寫(xiě)的,那么當(dāng)在容器B內(nèi)修改yyy.txt文件的內(nèi)容時(shí)宿主機(jī)A中的xxx.txt文件的內(nèi)容也會(huì)相應(yīng)更改,反之亦然。 如果映射的是目錄也是同理,比如在宿主機(jī)A的XXX目錄中新建了一個(gè)xxx.txt文件則在容器內(nèi)對(duì)應(yīng)的YYY目錄中也會(huì)新增一個(gè)xxx.txt文件,反之亦然。 上述操作,即使容器已經(jīng)停止了,只要再啟動(dòng)回來(lái)也依舊能進(jìn)行同步。

查看容器的掛載目錄(文件)

通過(guò)以下命令查看:

docker inspect 容器ID

</p><p>

容器卷之間的繼承

語(yǔ)法:

1.使用命令 </p><p>

個(gè)人理解: 現(xiàn)在有兩個(gè)容器B1和B2,其中容器B1已經(jīng)與宿主機(jī)建立了某種映射關(guān)系?,F(xiàn)在通過(guò)以上命令將容器B2繼承容器B1的映射關(guān)系。此時(shí)容器B2與宿主機(jī)的映射關(guān)系就相同了。此時(shí)哪怕容器B1停止甚至銷(xiāo)毀了,容器B2與宿主機(jī)之間的映射關(guān)系都不會(huì)消失。

掛載權(quán)限問(wèn)題

</p><p> 如果使用命令則加上--privileged=true即可: 如果使用的是docker-compose編排服務(wù)的方式則通過(guò)以下配置開(kāi)啟權(quán)限: </p><p>

Dockerfile(重點(diǎn))

Dockerfile是用來(lái)構(gòu)建Docker鏡像的文本文件,是由一條條構(gòu)建鏡像所需的指令和參數(shù)構(gòu)成的腳本。 相當(dāng)于一個(gè)清單,里面包含構(gòu)建當(dāng)前鏡像所需要的所有構(gòu)建命令。

在Dockerfile中: 1:每條保留字指令都必須為大寫(xiě)字母且后面要跟隨至少一個(gè)參數(shù) 2:指令按照從上到下,順序執(zhí)行 3:#表示注釋 4:每條指令都會(huì)創(chuàng)建一個(gè)新的鏡像層并對(duì)鏡像進(jìn)行提交

Docker執(zhí)行Dockerfile的大致流程

(1)docker從基礎(chǔ)鏡像運(yùn)行一個(gè)容器 (2)執(zhí)行一條指令并對(duì)容器作出修改 (3)執(zhí)行類(lèi)似docker commit的操作提交一個(gè)新的鏡像層 (4) docker再基于剛提交的鏡像運(yùn)行一個(gè)新容器 (5)執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成 </p><p>

常用保留字*

FROM 基礎(chǔ)鏡像,當(dāng)前新鏡像是基于哪個(gè)鏡像的,指定一個(gè)已經(jīng)存在的鏡像作為模板,第一條必須是from

MAINTAINER(已棄用) 鏡像維護(hù)者的姓名和郵箱地址

RUN 指定容器構(gòu)建時(shí)需要運(yùn)行的命令 兩種格式: 1.shell格式:RUN <命令行命令> <命令行命令>等同于,在終端操作的shell命令。 2.exec格式 RUN [“可執(zhí)行文件”,“參數(shù)1”,“參數(shù)2”] 例如: RUN [ “./test.php”, “dev”, “offline”]等價(jià)于RUN ./test.php dev offline

EXPOSE 當(dāng)前容器對(duì)外暴露出的端口

WORKDIR 指定在創(chuàng)建容器后,終端默認(rèn)登錄進(jìn)來(lái)的工作目錄,一個(gè)落腳點(diǎn)。即運(yùn)行該容器后所在的容器內(nèi)部目錄 </p><p>

USER 指定該鏡像以什么樣的用戶(hù)去執(zhí)行,如果都不指定,默認(rèn)是root

ENV 用來(lái)在構(gòu)建鏡像過(guò)程中設(shè)置環(huán)境變量 </p><p>

VOLUME 容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化工作

ADD與COPY ADD:將宿主機(jī)目錄下的文件拷貝進(jìn)鏡像里的目錄且會(huì)自動(dòng)處理URL和解壓tar壓縮包 </p><p> COPY:拷貝文件和目錄到鏡像中。將從構(gòu)建上下文目錄中<源路徑>的文件/目錄復(fù)制到新的一層的鏡像內(nèi)的<目標(biāo)路徑>位置 </p><p>

CMD與ENTRYPOINT 都是指定容器啟動(dòng)后(run之后) 要干的事情 CMD: </p><p> </p><p> ENTRYPOINT: </p><p> </p><p>

DockerNetWork(重點(diǎn))

</p><p>

docker在啟動(dòng)后會(huì)產(chǎn)生一個(gè)名為docker0的虛擬網(wǎng)橋: </p><p>

DockerNetWork的作用

1.用于進(jìn)行docker的網(wǎng)絡(luò)管理和容器調(diào)用之間的規(guī)劃 2.容器ip變動(dòng)時(shí)候可以通過(guò)服務(wù)名直接網(wǎng)絡(luò)通信而不受到影響。docker容器的ip會(huì)因?yàn)槿萜鞯闹貑ⅰ⒅匦聞?chuàng)建等產(chǎn)生變動(dòng)所以推薦用服務(wù)名來(lái)進(jìn)行網(wǎng)絡(luò)通信,避免寫(xiě)死ip

針對(duì)第二個(gè)作用例子如下: 我們?cè)谌萜骶幣艜r(shí),編排了兩個(gè)服務(wù)mysql和redis: </p><p> 同時(shí)將它們劃歸到了同一個(gè)名為darkforest_net的自定義docker網(wǎng)絡(luò)下 </p><p> 此時(shí)在springboot項(xiàng)目的配置文件中就可以直接采用服務(wù)名來(lái)連接服務(wù)了,而無(wú)需寫(xiě)死ip地址: </p><p> 采用這種方式后,無(wú)論mysql和redis兩個(gè)服務(wù)的ip地址如何變化,docker都能自動(dòng)映射。無(wú)需手動(dòng)變更ip

docker網(wǎng)絡(luò)模式

</p><p> </p><p>

設(shè)置方式

</p><p>

bridge模式(常用)

</p><p> </p><p> </p><p> 例子: 通過(guò)ip addr命令查看宿主機(jī)中的ip分配情況: </p><p> 以同樣的方式查看容器中的ip分配情況: </p><p> 可以注意到是存在對(duì)應(yīng)關(guān)系的,這里描述的就是上面圖中bridge上的情況。

host模式

</p><p> </p><p> </p><p>

none模式

</p><p> </p><p>

container模式

</p><p> 要注意:諸如tomcat等容器會(huì)默認(rèn)使用8080端口,此時(shí)如果有個(gè)tomcat容器采用這種方式共用另一個(gè)tomcat容器的網(wǎng)絡(luò)模式則會(huì)造成端口沖突(因?yàn)閕p和端口都一樣)。此時(shí)可以選擇更改其中一個(gè)tomcat容器的默認(rèn)端口(8080)。

自定義docker網(wǎng)絡(luò)(常用)

作用:將一個(gè)或一組容器劃歸到同一個(gè)自定義網(wǎng)絡(luò)中(即處在同一網(wǎng)段),以便通過(guò)服務(wù)名實(shí)現(xiàn)容器間的數(shù)據(jù)互通和進(jìn)行網(wǎng)絡(luò)管理。通過(guò)創(chuàng)建多個(gè)自定義網(wǎng)絡(luò)來(lái)管理多組容器

自定義網(wǎng)絡(luò)默認(rèn)使用bridge模式

創(chuàng)建和加入命令

創(chuàng)建自定義網(wǎng)絡(luò)命令:

docker network create 自定義網(wǎng)絡(luò)名稱(chēng)

docker-compose配置文件中: </p><p>

加入自定義網(wǎng)絡(luò)選項(xiàng):

--network 自定義的網(wǎng)絡(luò)名稱(chēng)

docker-compose配置文件中: </p><p>

注意點(diǎn)(關(guān)注)

1.采用docker-compose配置文件的方式創(chuàng)建自定義網(wǎng)絡(luò)時(shí),網(wǎng)絡(luò)名稱(chēng)會(huì)帶上所在目錄的前綴 </p><p> 在lighthouse目錄下執(zhí)行該docker-compose.yml文件后查看當(dāng)前所有的docker網(wǎng)絡(luò) </p><p> 可以發(fā)現(xiàn)多了一個(gè)所在目錄的前綴

2.docker-compose配置文件中為容器服務(wù)配置的網(wǎng)絡(luò),一定要在docker-compose配置文件中創(chuàng)建。不能先創(chuàng)建再執(zhí)行會(huì)報(bào)找不到網(wǎng)絡(luò)的錯(cuò),即便加上目錄前綴也沒(méi)用。(docker版本:20.10.21;docker-compose版本:2.12.2) </p><p>

查看docker網(wǎng)絡(luò)

命令:

docker network ls

</p><p>

查看網(wǎng)絡(luò)源數(shù)據(jù)

命令:

docker network inspect 網(wǎng)絡(luò)ID

</p><p>

Docker Compose容器編排(重點(diǎn))

</p><p> </p><p>

安裝

見(jiàn)官網(wǎng)地址 官網(wǎng)下載較慢,可以使用國(guó)內(nèi)網(wǎng)站提供的鏡像

容器編排步驟

</p><p> </p><p> </p><p> 實(shí)際生產(chǎn)場(chǎng)景中一般使用一下命令來(lái)將容器實(shí)例運(yùn)行為后臺(tái)服務(wù):

docker-compose up -d

Compose 模板文件指令

模板文件是使用 Docker Compose 的核心,涉及到的指令關(guān)鍵字也比較多。默認(rèn)的模板文件名稱(chēng)為 docker-compose.yml ,格式為YAML 格式。一個(gè) docker-compose.yml 文件可以分為三層:

#第一層 版本號(hào)

version: "3.8" #代表使用docker-compose項(xiàng)目的版本號(hào)

#第二層:services 服務(wù)配置

services:

web:

build: .

ports: #宿主機(jī)和容器的端口映射

- "5000:5000"

volumes:

- .:/code

redis:

image: "redis:alpine"

# 第三層 其他配置 網(wǎng)絡(luò)、卷、全局規(guī)劃

...

build 指令

指定 Dockerfile 所在文件夾的路徑(可以是絕對(duì)路徑,或者相對(duì) docker-compose.yml 文件的路徑)。 Compose 將會(huì)利用它自動(dòng)構(gòu)建這個(gè)鏡像,然后使用這個(gè)鏡像。

version: "3.8"

services:

web:

build: . #指定Dockerfile的上下文目錄為當(dāng)前目錄

如上例子:要求構(gòu)建web鏡像的Dockerfile與 docker-compose.yml 文件在同一目錄下。

你也可以使用 context 指令指定 Dockerfile 所在文件夾的路徑。 使用 dockerfile 指令指定 Dockerfile 文件名。 使用 arg 指令指定構(gòu)建鏡像時(shí)的變量。 如下例子:

version: '3'

services:

webapp:

build:

context: ./dir #指定Dockerfile的上下文目錄為當(dāng)前目錄的dir目錄下

dockerfile: Dockerfile-alternate #指定要運(yùn)行的Dockerfile文件名為Dockerfile-alternate

args:

buildno: 1

command 指令

覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令,類(lèi)似于docker run image 命令 以下面的Dockerfile文件為例,容器啟動(dòng)后執(zhí)行的是 java -jar apps.jar

FROM openjdk:8-jre

EXPOSE 8081

ENV APP_PATH=/apps

WORKDIR $APP_PATH

COPY apps.jar $APP_PATH

ENTRYPOINT ["java","-jar"]

CMD ["apps.jar"]

如果我們想要容器啟動(dòng)后執(zhí)行的是 java -jar test.jar, 在docker-compose.yml文件中使用指令 command: [“test.jar”]

version: '3'

services:

webapp:

build:

context: ./dir #定Dockerfile的上下文目錄為當(dāng)前目錄的dir目錄下

dockerfile: Dockerfile-alternate

args:

buildno: 1

command: ["test.jar"]

container_name 指令(不推薦使用)

指定容器名稱(chēng)。默認(rèn)將會(huì)使用 所在目錄名_服務(wù)名稱(chēng)_序號(hào) 這樣的格式。

container_name: docker-web-container

注意: 指定容器名稱(chēng)后,該服務(wù)將無(wú)法進(jìn)行擴(kuò)展(scale),因?yàn)?Docker 不允許多個(gè)容器具有相同的名稱(chēng)。

depends_on 指令

解決容器的依賴(lài)、啟動(dòng)先后的問(wèn)題。以下例子中會(huì)先啟動(dòng) redis 、db 再啟動(dòng) web:

version: '3'

services:

web:

build: .

depends_on: # web服務(wù)依賴(lài)于db和web服務(wù)

- db

- redis

redis:

image: redis

db:

image: postgres

注意:在啟動(dòng)web服務(wù)時(shí),并不會(huì)等待 redis 、db 服務(wù)進(jìn)入ready狀態(tài),而只是等到它們被啟動(dòng)狀態(tài)(running狀態(tài))。

environment 指令

設(shè)置環(huán)境變量,相當(dāng)于 docker run -e。你可以使用數(shù)組或字典兩種格式。

只給定名稱(chēng)的變量會(huì)自動(dòng)獲取運(yùn)行 Compose 的宿主機(jī)上對(duì)應(yīng)變量的值,可以用來(lái)防止泄露不必要的數(shù)據(jù)。

version: '3'

services:

mysql:

image: mysql:5.7

ports:

- "3306:3306"

environment:

MYSQL_ROOT_PASSWORD: root #字典格式

#====================================================

environment:

- "MYSQL_ROOT_PASSWORD=root" #數(shù)組格式

- "SESSION_SECRET"

env_file 指令

從文件中獲取環(huán)境變量,可以為單獨(dú)的文件路徑或列表。 如果通過(guò) docker-compose -f FILE 方式來(lái)指定 Compose 模板文件,則 env_file 中變量的路徑會(huì)基于模板文件路徑。 如果有變量名稱(chēng)與 environment 指令沖突,則按照慣例,以 environment 為準(zhǔn)。

env_file: .env

env_file: #指定多個(gè)環(huán)境變量文件

- ./common.env

- ./.env

- /opt/secrets.env

環(huán)境變量文件中每一行必須符合格式,支持 # 開(kāi)頭的注釋行。

環(huán)境變量文件 .env:推薦使用這種命名,因?yàn)樵贚inux下,這種方式命名的文件屬于隱藏文件,一定程度上防止泄露不必要的數(shù)據(jù)。

expose 指令

用來(lái)指定鏡像構(gòu)建過(guò)程中容器暴露的端口號(hào),但不映射到宿主機(jī),只被連接的服務(wù)訪(fǎng)問(wèn)。 該指令compose配置文件中一般不用,都在Dockerfile文件中使用EXPOSE指定。

image 指令

指定創(chuàng)建容器實(shí)例服務(wù)所依賴(lài)的鏡像,一般為鏡像名稱(chēng)或鏡像 ID。如果鏡像在本地不存在,Compose 將會(huì)嘗試?yán)∵@個(gè)鏡像,相當(dāng)于 docker run image(鏡像名)。

networks 指令

指定啟動(dòng)容器時(shí)使用的網(wǎng)絡(luò),相當(dāng)于 docker run --network 詳情見(jiàn)Docker network章節(jié)

version: "3"

services:

some-service:

networks:

- some-network #指定使用的網(wǎng)絡(luò)

- other-network

networks: #創(chuàng)建網(wǎng)絡(luò)

some-network:

other-network:

ports 指令

指定宿主機(jī)和容器端口映射,或者僅僅指定容器的端口(宿主將會(huì)隨機(jī)選擇端口)都可以。 </p><p> 注意:當(dāng)使用 HOST:CONTAINER格式來(lái)映射端口時(shí),如果你使用的容器端口小于 60 并且沒(méi)放到引號(hào)里,可能會(huì)得到錯(cuò)誤結(jié)果,因?yàn)閅AML會(huì)自動(dòng)解析xx:yy這種數(shù)字格式為 60 進(jìn)制。為避免出現(xiàn)這種問(wèn)題,建議數(shù)字串都采用引號(hào)包括起來(lái)的字符串格式。

volumes 指令

用來(lái)指定宿主機(jī)目錄(或文件)和容器目錄(或文件)映射。目錄(或文件)不存在時(shí)會(huì)自動(dòng)創(chuàng)建 詳情見(jiàn)容器數(shù)據(jù)卷章節(jié)

version: "3"

services:

my_src:

image: mysql:8.0

volumes: #數(shù)據(jù)卷名稱(chēng)掛載

- mysql_data:/var/lib/mysql

volumes: #定義數(shù)據(jù)卷名稱(chēng)

mysql_data:

restart 指令

指定容器退出后的重啟策略為始終重啟。該命令對(duì)保持服務(wù)始終運(yùn)行十分有效。

restart: always

柚子快報(bào)邀請(qǐng)碼778899分享:運(yùn)維 Docker學(xué)習(xí)筆記

http://yzkb.51969.com/

相關(guān)閱讀

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19493454.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪(fǎng)問(wèn)

文章目錄