日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker学习笔记(六)docker-compose

發布時間:2024/4/11 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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-compose

    pip安裝

    [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代碼

    import timeimport redis from flask import Flaskapp = Flask(__name__) cache = redis.Redis(host='redis', port=6379)def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/') def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)

    創建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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。