docker学习笔记(六)docker-compose
目錄
基本介紹
安裝compose
二進制包安裝
pip安裝
容器安裝
compose常用命令
Compose實戰
其他
yaml模板補充
docker-compose常見操作
基本介紹
官網:https://docs.docker.com/compose/
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.
docker-compose主要是針對Docker容器集群的快速編排。通過compose,用戶可以定義和運行多容器的docker.通過自定義的yaml文件去配置自己的應用服務,然后通過一個啟動命令,就可以創建和運行所有的服務。就不需要像上面docker實戰里一樣,每次去拉取鏡像,創建network,創建多個容器(springboot,mysql,nginx等容器),命令多并且容易混淆和遺漏
Compose 中有兩個重要的概念:
? ? ? ?服務(service):一個應用的容器,一個yaml文件可以包括若干容器實例(可以是相同鏡像,也能是不同鏡像)
? ? ? ?項目(project):由一組相互關聯的容器組成的一個完整業務單元,一個yaml文件定義的就是一個project
Using Compose is basically a three-step process:
Define your app’s environment with a?Dockerfile?so it can be reproduced anywhere.
Define the services that make up your app in?docker-compose.yml?so they can be run together in an isolated environment.
Run?docker-compose up?and Compose starts and runs your entire app.
使用compose分為三步:
1.編寫Dockerfile用于打包鏡像(如果你的鏡像都來自官方,就省略這步)
2.在docker-compose.yml里定義自己想要的服務(包括容器,網絡等)
3.通過docker-compose up 命令啟動服務
安裝compose
因為compose依賴于docker運行,所以需要先安裝docker , 前面都講過,這里就不多講了
二進制包安裝
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composepip安裝
[node3] (local) root@192.168.0.6 ~
$ ?pip install docker-compose
[node3] (local) root@192.168.0.6 ~
$ ?ln -s /usr/bin/docker-compose /usr/local/bin/
[node3] (local) root@192.168.0.6 ~
docker-compose version
docker-compose version 1.23.2, build 1110ad0
docker-py version: 3.7.3
CPython version: 2.7.16
OpenSSL version: OpenSSL 1.1.1d ?10 Sep 2019
容器安裝
$ sudo curl -L --fail https://github.com/docker/compose/releases/download/1.25.0/run.sh -o /usr/local/bin/docker-compose$ sudo chmod +x /usr/local/bin/docker-compose我嘗試了三種,最后只有通過pip在play-with-docker安裝成功了
compose常用命令
通過執行docker-compose --help來查看Compose基本命令用法。
?
Compose實戰
1.準備工作
? 創建目錄/tmp/test-compose
? 進入目錄,編寫app.py代碼
創建requirements.txt文件
flask redis編寫Dockerfile
FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["flask", "run"]2.編寫yaml文件
version: '3' #指定docker-compose的版本 services: #定義項目里所有的service信息, services下的第一級別的key就是serviceNameweb: #server namebuild: . #指定該service通過當前目錄的Dockerfile構建ports:- "5000:5000" #容器的5000端口和宿主機的5000端口建立映射關系networks: #將容器加入指定網絡(等同于docker network connect命令)- app-net #網絡名稱redis:image: "redis:alpine" #指定docker鏡像,可以是遠程倉庫鏡像、本地鏡像networks:- app-netnetworks: #定義networks信息app-net: #網絡名稱driver: bridge #指定網絡模式, bridge,none,host,overlay;docker下默認使用bridge啟動項目:
docker-compose up -d
??
從啟動的日志可以看到compose幫我們完成了build image,pull image,create container等一系列操作,還幫我們創建了自定義的bridge網絡
啟動完成后就可以通過映射的端口訪問了
其他
yaml模板補充
ports參數用法 ports # 建立宿主機和容器之間的端口映射關系, ports 支持兩種語法格式SHORT 語法格式示例:- "3000" # 暴露容器的 3000 端口, 宿主機的端口由 docker 隨機映射一個沒有被占用的端口- "3000-3005" # 暴露容器的 3000 到 3005 端口, 宿主機的端口由 docker 隨機映射沒有被占用的端口- "8000:8000" # 容器的 8000 端口和宿主機的 8000 端口建立映射關系- "9090-9091:8080-8081"- "127.0.0.1:8001:8001" # 指定映射宿主機的指定地址的- "127.0.0.1:5000-5010:5000-5010" - "6060:6060/udp" # 指定協議LONG 語法格式示例:(v3.2 新增的語法格式)ports:- target: 80 # 容器端口published: 8080 # 宿主機端口protocol: tcp # 協議類型mode: host # host 在每個節點上發布主機端口, ingress 對于集群模式端口進行負載均衡 volumes # 定義容器和宿主機的數據卷映射關系SHORT 語法格式示例:volumes:- /var/lib/mysql # 映射容器內的 /var/lib/mysql 到宿主機的一個隨機目錄中- /opt/data:/var/lib/mysql # 映射容器內的 /var/lib/mysql 到宿主機的 /opt/data- ./cache:/tmp/cache # 映射容器內的 /var/lib/mysql 到宿主機 compose 文件所在的位置- ~/configs:/etc/configs/:ro # 映射宿主機的目錄到容器中去, 權限只讀- datavolume:/var/lib/mysql # 為 volumes 命名LONG 語法格式示例:(v3.2 新增的語法格式)version: "3.2"services:web:image: nginx:alpineports:- "80:80"volumes:- type: volume # mount 的類型, 必須是 bind、volume 或 tmpfssource: mydata # 宿主機目錄target: /data # 容器目錄volume: # 配置擴展項, 其 key 必須和 type 的值相同nocopy: true # volume 擴展的選項, 在創建volume時禁止用從容器復制數據docker-compose常見操作
(1)查看版本
? ??docker-compose version
(2)根據yml創建service
? ??docker-compose up
? ??指定yaml:docker-compose? up -f xxx.yaml
? ? 后臺運行:docker-compose up -d
(3)查看啟動成功的service
? ? docker-compose ps
(4)查看images 也可以使用docker命令
??? ?docker-compose images
(5)停止/啟動service
? ? docker-compose stop/start?
(6)刪除service[同時會刪除掉network和volume]
? ? docker-compose down
(7)進入到某個service
? ? docker-compose exec <serviceName>?sh
(8)scale擴縮容
? ? 修改web的port映射,并啟動
? docker-compose up --scale web=5 -d
? docker-compose ps
? docker-compose logs web
?
?
??
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的docker学习笔记(六)docker-compose的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker学习笔记(四)docker数
- 下一篇: docker学习笔记(五)docker实