網(wǎng)站首頁 編程語言 正文
Docker Compose 是什么
Docker Compose 是 Docker 官方編排(Orchestration)項(xiàng)目之一,負(fù)責(zé)快速在集群中部署分布式應(yīng)用。
Compose 定位是 「定義和運(yùn)行多個(gè) Docker 容器的應(yīng)用(Defining and running multicontainer Docker applications)」,其前身是開源項(xiàng)目 Fig。
Compose 中有兩個(gè)重要的概念
- 服務(wù) ( service ):一個(gè)應(yīng)用的容器,實(shí)際上可以包括若干運(yùn)行相同鏡像的容器實(shí)例。
- 項(xiàng)目 ( project ):由一組關(guān)聯(lián)的應(yīng)用容器組成的一個(gè)完整業(yè)務(wù)單元,在 dockercompose.yml 文件中定義。
Docker Compose 作用
Docker Compose 提供以下命令來管理應(yīng)用程序的整個(gè)生命周期:
- 1、啟動,停止和重建服務(wù)。
- 2、查看運(yùn)行服務(wù)的狀態(tài)。
- 3、流式運(yùn)行服務(wù)的日志輸出。
- 4、在服務(wù)上運(yùn)行一次性命令。
前言
使用一個(gè)Dockerfile模板文件可以定義一個(gè)單獨(dú)的應(yīng)用容器,如果需要定義多個(gè)容器就需要服務(wù)編排。下面介紹Docker官方產(chǎn)品,Docker Compose。
Dockerfile可以讓用戶管理一個(gè)單獨(dú)的應(yīng)用容器,而compose則允許用戶在一個(gè)模板(yaml格式)中定義一組相關(guān)聯(lián)的應(yīng)用容器(被稱為一個(gè)project,即項(xiàng)目)
例如一個(gè)web服務(wù)再加上后端的數(shù)據(jù)庫服務(wù)容器等。
一、Docker-compose簡介
1、docker-compose基礎(chǔ)概念
docker-compose項(xiàng)目是docker官方的開源項(xiàng)目, 負(fù)責(zé)實(shí)現(xiàn)對docker容器集群的快速編排。
docker-compose將所管理的容器分為三層, 分別是工程(project),服務(wù)(service)以及容器(containner)
- docker-compose運(yùn)行目錄下的所有文件(docker-compose.yml文件、extends文件或環(huán)境變量等)組成一個(gè)工程,如無特殊指定,工程名即為當(dāng)前目錄名。
- 一個(gè)工程當(dāng)中,可以包含多個(gè)服務(wù),每個(gè)服務(wù)中定義了容器運(yùn)行的鏡像、參數(shù)、依賴。
- 一個(gè)服務(wù)中可以包括多個(gè)容器實(shí)例,docker-compose并沒有解決負(fù)載均衡的問題。因此需要借助其他工具實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)及負(fù)載均衡,比如consul。
docker-compose的工程配置文件默認(rèn)為docker-compose.yml。可以通過環(huán)境變量COMPOSE_FILE -f 參數(shù)自定義配置文件,其自定義多個(gè)有依賴關(guān)系的服務(wù)及每個(gè)人服務(wù)運(yùn)行的容器。
2、為什么要使用docker-compose
使用一個(gè)Dockerfile模板文件,可以讓用戶很方便的定義一個(gè)單獨(dú)應(yīng)用容器。在工作中,經(jīng)常會碰到需要多個(gè)容器相互配合來完成某項(xiàng)任務(wù)的情況,例如要實(shí)現(xiàn)一個(gè)web項(xiàng)目,除了web服務(wù)容器本身,往往還需要再加上后端的數(shù)據(jù)庫服務(wù)容器,甚至還包括負(fù)載均衡容器等。
compose允許用戶通過一個(gè)單獨(dú)docker-compose.yml模板文件(YAML格式)來定義一組相關(guān)聯(lián)的應(yīng)用容器為一個(gè)項(xiàng)目(project)
docker-compose項(xiàng)目由pypthon編寫,調(diào)用docker服務(wù)提供的API來對容器進(jìn)行管理,因此, 只要所操作的平臺支持docker-API,就可以在其上利用conpose來進(jìn)行編排管理。
簡單來說:就是來管理多個(gè)容器的,定義啟動順序的,合理編排,方便管理。
二、YAML文件格式及編寫注意事項(xiàng)
1、YAML文件格式
- YAML是一種標(biāo)記性語言,它可以很直觀的展示數(shù)據(jù)序列化格式,可讀性高。
- 類似于json數(shù)據(jù)描述語言,但是語法要比json簡單很多。
- YAML數(shù)據(jù)結(jié)構(gòu)通過縮進(jìn)來表示,連續(xù)的項(xiàng)目通過減號來表示,鍵值對用冒號分隔,數(shù)組用中括號[ ] 括起來,bash用花括號{ } 括起來。
2、YAML格式的注意事項(xiàng)
- 不支持制表符tab鍵縮進(jìn),只能使用空格縮進(jìn)
- 通常開頭縮進(jìn)2個(gè)空格
- 字符后縮進(jìn)1個(gè)空格,如冒號【:】、逗號【,】、橫杠【-】
- 用#號表示注釋
- 如果包含特殊字符用單引號【’ '】引起來作為普通字符,如果用雙引號【“ ”】表示特殊字符本身的意思,
- 布爾值必須用【“ ”】括起來
- YAML區(qū)分大小寫
3、YAML數(shù)據(jù)結(jié)構(gòu)案例
#鍵值對表示
animal:pets#數(shù)組:一組按次序排列的列表
- cat
- dog
- goldfish#布爾值
debug: "true"
debug: "false"#yaml實(shí)例
languages: ? ? ? ?#序列的映射?
? - java
? - Golang
? - Python
websites: ? ? ? ? #映射的映射
? Baidu: www.baidu.com
? Wangyi: www.163.com
? Souhu: www.souhu.com#或者
languages: ["java","Golong","Python"]
websites:
? Baidu:
? ? www.baidu.com
? Wangyi:
? ? www.163.com
? Souhu:
? ? www.souhu.com#Json格式
{
? languages: [
? ? 'Java',
? ? 'Golong',
? ? 'Python',
? ],
? websites: [
? ? Baidu: 'www.baidu.com',
? ? Wangyi: 'www.163.com',
? ? Souhu: 'www.souhu.com',
? ]
}
三、Docker Compose 配置常用字段
1、Docker Compose配置常用字段
字段 | 描述 |
---|---|
build | 指定Dockerfile文件名(要指定的Dockerfile文件需要在build標(biāo)簽的子級標(biāo)簽中用dockefile標(biāo)簽指定) |
dockerfile | 構(gòu)建鏡像上下文路徑 |
context | 可以是dockerfile路徑,或者時(shí)執(zhí)行g(shù)it倉庫的url地址 |
images | 指定鏡像(已存在) |
command | 執(zhí)行命令,會覆蓋容器啟動后默認(rèn)執(zhí)行的命令(會覆蓋dockefile中的CMD指令) |
container_name | 指定容器名稱,由于容器名稱是唯一的,如果指定自定義名稱,則無法scale指定容器數(shù)量。 |
deploy | 指定部署和運(yùn)行服務(wù)相關(guān)配置,只能在swarm模式使用 |
environment | 添加環(huán)境變量 |
networks | 加入網(wǎng)絡(luò),引用頂級networks下條目 |
network-mode | 設(shè)置容器的網(wǎng)絡(luò)模式 |
ports | 暴露容器端口,與-p相同,但是端口不能低于60 |
volumes | 掛載一個(gè)宿主機(jī)目錄或命令卷到容器,命令卷要在頂級volumes定義卷名稱 |
volumes_from | 從另一個(gè)服務(wù)或容器掛載卷,可選參數(shù):ro和rw(僅版本‘2’支持) |
hostname | 在容器內(nèi)設(shè)置內(nèi)核參數(shù) |
links | 連接誒到另一個(gè)容器,- 服務(wù)名稱[ : ] |
privileged | 用來給容器root權(quán)限,注意是不安全的,true |
restart | 重啟策略,定義是否重啟容器1、no,默認(rèn)策略,在容器退出時(shí)不重啟容器2、on-failure,在容器非正常退出時(shí)(退出狀態(tài)非0),才會重啟容器3、on-failure:3 在容器非正常退出時(shí),重啟容器,最多重啟3次4、always,在容器退出時(shí)總是重啟容器,5、unless-stopped,在容器退出時(shí)總是重啟容器,但是不考慮在Docker守護(hù)進(jìn)程啟動時(shí)就已經(jīng)停止了的容器。 |
depends_on | 此標(biāo)簽用于解決容器的依賴,啟動先后問題。如啟動應(yīng)用容器,需要先啟動數(shù)據(jù)庫容器。php:depends_on:- apache- mysql |
2、Docker-compose常用命令
運(yùn)行這些命令需要結(jié)合docker-compose一起使用。
且必須要在含有docker-compose.yml文件的目錄中才可以使用,不然報(bào)錯(cuò)。
命令 | 描述 |
---|---|
build | 重新構(gòu)建服務(wù) |
ps | 列出容器 |
up | 創(chuàng)建和啟動容器 |
exec | 在容器里面執(zhí)行命令 |
scale | 指定一個(gè)服務(wù)容器啟動數(shù)量 |
top | 顯示正在運(yùn)行的容器進(jìn)程 |
logs | 查看服務(wù)容器的輸出 |
down | 刪除容器、網(wǎng)絡(luò)、數(shù)據(jù)卷和鏡像 |
stop/start/restart | 停止/啟動/重啟服務(wù) |
四、docker-compose安裝
docker-compose是docker的獨(dú)立產(chǎn)品,因此需要安裝docker之后再單獨(dú)安裝docker compose。
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#下載docker-compose文件mv docker-compose /usr/local/bin
#將文件復(fù)制到/usr/local/bin環(huán)境變量下面chmod +x /usr/local/bin/docker-compose
#給他一個(gè)執(zhí)行權(quán)限
五、docker-compose部署nginx服務(wù)訪問自定義頁面
1、準(zhǔn)備依賴文件
?mkdir /root/compose_nginx yum install -y tree vim /root/compose_nginx/docker-compose.yml version: '3' services: nginx: hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: - 1216:80 - 1217:443 networks: - cluster volumes: - ./wwwroot:/usr/local/nginx/html networks: cluster:
?[root@docker compose_nginx]# vim /root/compose_nginx/docker-compose.yml
[root@docker compose_nginx]# ls
docker-compose.yml
[root@docker compose_nginx]# mkdir nginx
[root@docker compose_nginx]# mkdir wwwroot
[root@docker compose_nginx]# ls
docker-compose.yml ?nginx ?wwwroot
[root@docker compose_nginx]# echo "liyong xuexijiugenwanyiyang" > wwwroot/index.html
[root@docker compose_nginx]# cat wwwroot/index.html?
liyong xuexijiugenwanyiyang
[root@docker compose_nginx]# cd nginx
[root@docker nginx]# ls
[root@docker nginx]# rz -E
rz waiting to receive.
[root@docker nginx]# ls
nginx-1.20.2.tar.gz
mkdir -p /opt/compose_nginx/nginx
cd /opt/compose_nginx/nginx
#上傳nginx的包vim Dockerfile
FROM centos:7
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make &> /dev/null
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.15.9.tar.gz /usr/local/src
WORKDIR /usr/local/src/nginx-1.15.9
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module &> /dev/null
RUN make -j 4 && make install &> /dev/null
RUN ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#ENV PATH /usr/local/nginx/sbin/:PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
CMD ["/usr/local/nginx/sbin/nginx"]
2、編寫配置文件docker-compose.yml文件
cd /opt/compose_nginx
vim docker-compose.yml
version: '3' ? #定義編排版本,共3版(1,2,3),1被淘汰,2的話只能單機(jī)編排,3的話即可以實(shí)現(xiàn)單機(jī)編排,也可以實(shí)現(xiàn)多機(jī)編排。
services: ? ? #定義服務(wù)
? nginx: ? ? ?#定義nginx服務(wù)
? ? hostname: nginx ? ? ?#容器的主機(jī)名為nginx
? ? build: ? ? ? ? ? ? ? #定義創(chuàng)建容器的過程 //如果有線程的鏡像,直接寫images:?
? ? ? context: ./nginx ? #指定創(chuàng)建容器的目錄位置(存儲dockerfile的目錄)
? ? ? dockerfile: Dockerfile ? #指定Dockerfile文件
? ? ports: ? ? ? ? ? ?#定義端口
? ? ? - 1234:80 ? ? ? #暴露端口
? ? ? - 4321:443 ? ? ?#暴露端口
? ? networks: ? ? ? ? ? ? ? ? ? ? ?#指定網(wǎng)絡(luò)
? ? ? ydq: ? ? ? ? ? ? ? ? ? ? ? ? #指定網(wǎng)絡(luò)名稱
? ? ? ? ipv4_address: 172.100.0.10 ?#指定ip地址
? ? volumes: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)卷,掛載目錄
? ? ? - ./wwwroot:/usr/local/nginx/html ? ? ?#前面宿主機(jī),后面容器
networks: ? ? ? ? ? ? ? #自定義網(wǎng)絡(luò)
? ydq: ? ? ? ? ? ? ? ? ?#自定義網(wǎng)絡(luò)名稱
? ?driver: bridge ? ? ? #自定義網(wǎng)絡(luò)模式
? ?ipam: ? ? ? ? ? ? ? ?#網(wǎng)絡(luò)管理器
? ? ?config: ? ? ? ? ? ?#配置參數(shù)
? ? ? ?- subnet: 172.100.0.0/16 ? ?#配置子網(wǎng)網(wǎng)段?
? ? ? ?
//networks的參數(shù)ipam即網(wǎng)絡(luò)管理,其下還有driver參數(shù)即指定使用的網(wǎng)絡(luò)模式,以及config配置參數(shù)(比如配置子網(wǎng)等)
? ? ? ?
echo "this is ydq" >/opt/compose_nginx/wwwroot/index.html
3、生成鏡像容器
4、查看目錄結(jié)構(gòu)
yum -y install tree &>/dev/null
cd /opt/compose_nginx
tree
docker-compose -f docker-compose.yaml up -d ?//-f調(diào)用文件。-d:開啟守護(hù)進(jìn)程
docker network ls
docker ps -a
docker-compose ps
5、訪問測試
curl 192.168.100.3:1234
或者
網(wǎng)頁訪問:http:192.168.100.3:1234
原文鏈接:https://blog.csdn.net/weixin_71429850/article/details/127437081
相關(guān)推薦
- 2022-08-29 .NET?Core獲取配置文件內(nèi)容_實(shí)用技巧
- 2022-10-03 React中路由參數(shù)如何改變頁面不刷新數(shù)據(jù)的情況_React
- 2022-10-01 windows?server?2016?搭建FTP服務(wù)器詳細(xì)教程_FTP服務(wù)器
- 2022-03-03 記一次瀏覽器SameSite策略更新,導(dǎo)致接口 Failed to load response da
- 2022-10-07 Qt入門學(xué)習(xí)之?dāng)?shù)據(jù)庫操作指南_C 語言
- 2023-04-20 flex 的 三個(gè)參數(shù):flex-grow、flex-shrink、flex-basis
- 2022-05-21 C語言實(shí)現(xiàn)銀行管理系統(tǒng)(文件操作)_C 語言
- 2022-06-29 python循環(huán)神經(jīng)網(wǎng)絡(luò)RNN函數(shù)tf.nn.dynamic_rnn使用_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(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被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支