成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Docker 筆記(3):docker-compose

張金寶 / 2960人閱讀

摘要:然而,在日常工作中,經(jīng)常會(huì)碰到需要多個(gè)容器相互配合來完成某項(xiàng)任務(wù)的情況?,F(xiàn)在介紹文件的語法及相關(guān)配置。使用指令指定文件名。解決容器的依賴啟動(dòng)先后的問題。當(dāng)容器停止時(shí),掛載會(huì)被移除。其他其他設(shè)置如,基本同命令中的格式與功能。

前面的幾篇筆記中,只說明了如何使用單個(gè)鏡像和容器。然而,在日常工作中,經(jīng)常會(huì)碰到需要多個(gè)容器相互配合來完成某項(xiàng)任務(wù)的情況。例如要實(shí)現(xiàn)一個(gè) Web 項(xiàng)目,除了 Web 服務(wù)容器本身,往往還需要再加上后端的數(shù)據(jù)庫服務(wù)容器,甚至還包括負(fù)載均衡容器等。

那容器之間是怎樣通信的呢?多個(gè)容器之間的管理、通信也就是所謂的容器編排。容器編排常使用的工具有docker-compose、kubernetes、swarm等。其中docker-compose是面對(duì)單機(jī)容器編排最常用的工具。

現(xiàn)在介紹docker-compose文件的語法及相關(guān)配置?;九渲猛琩ocker的run命令中的參數(shù),如CMD、EXPOSE、VOLUME、EVN等等。

一個(gè)docker—compose包含多個(gè)服務(wù),每個(gè)服務(wù)都必須通過 image 指令指定鏡像或 build 指令( 需要 Dockerfile) 等來自動(dòng)構(gòu)建生成鏡像。

常用配置選項(xiàng) build

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

version: "2.0"
services:
    app:
        build: .

你也可以使用 context 指令指定 Dockerfile 所在文件夾的路徑。

使用 dockerfile 指令指定 Dockerfile 文件名。

使用 arg 指令指定構(gòu)建鏡像時(shí)的變量。

args:
    - version: 3.0 

在構(gòu)建命令中使用: wget http://www.docker.com/some_so...$version, 構(gòu)建參數(shù)和 ENV 的效果一樣,都是設(shè)置環(huán)境變量。所不同的是,ARG 所設(shè)置的構(gòu)建環(huán)境的環(huán)境變量,在將來容器運(yùn)行時(shí)是不會(huì)存在這些環(huán)境變量的。但是不要因此就使用 ARG 保存密碼之類的信息,因?yàn)?docker history 還是可以看到所有值的。

version: "2.0"
services:
    app:
        build: 
            context: ./dir
            dockerfile: your_docker_file_name
            args:
                arg_name: arg_value

使用 cache_from 指定構(gòu)建鏡像的緩存

build:
    context: ./dir
    cache_from:
        - img1:tag1
        - img2:tag2
command

覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令

command: echo "hello world"
configs

見 swarm mode

cgroup_parent

制定父cgroup組,意味著將繼承該組的資源限制

cgroup_parent: cgroups_1
container_name

制定容器名稱

devices

指定設(shè)備映射關(guān)系,即把外設(shè)掛載在某個(gè)目錄。

devices:
    - "/dev/ttyUSB1:/dev/ttyUSB0"
depends_on

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

version: "3"
services:
    web:
        build: .
        depends_on:
            - db
            - redis

    redis:
        image: redis

    db:
        image: postgres

注意: web 服務(wù)不會(huì)等待 redis db 「 完全啟動(dòng)」 之后才啟動(dòng)。

env_file

從文件中獲取環(huán)境變量,可以為多帶帶的文件路徑或列表。

env_file: .env

env_file:
    - ./common.env
    - ./apps/web.env
    - /opt/secrets.env

文件中的內(nèi)容為鍵值對(duì):key=value,每行一條。 如果有變量名稱與 environment 指令沖突,則以后者為準(zhǔn)。這里所說的環(huán)境變量是對(duì)宿主機(jī)的 Compose 而言的,如果在配置文件中有 build 操作,這些變量并不會(huì)進(jìn)入構(gòu)建過程中,如果要在構(gòu)建中使用變量還是首選前面剛講的 arg 標(biāo)簽。

environment

設(shè)置環(huán)境變量。你可以使用數(shù)組或字典兩種格式。

environment:
    key: value
    key: value

environment:
    - key=value
    - key=value

如果變量名稱或者值中用到 true|false,yes|no 等表達(dá) 布爾 含義的詞匯,最好放到引號(hào)里,避免 YAML 自動(dòng)解析某些內(nèi)容為對(duì)應(yīng)的布爾語義。我們?cè)O(shè)置的這些環(huán)境變量,可以在后面的命令中用到,用法同shell變量,如設(shè)置了一個(gè)叫VERSION的環(huán)境變量,我們可以在entrypoint的命令中使用,如bash echo $VERSION$

expose

暴露端口

expose:
    - 4665
    - 8796
ports

映射端口,格式 宿主端口:容器端口。

ports:
    - 5421:5445
memory

我們可以限制容器的內(nèi)存使用

mem_limit: 1G //限制容器的內(nèi)存使用量最大為1G
extra_hosts

類似 Docker 中的 --add-host 參數(shù),指定額外的 host 名稱映射信息。

extra_hosts:
    - "googledns:8.8.8.8"
    - "dockerhub:52.1.157.61"

會(huì)在啟動(dòng)后的服務(wù)容器中 /etc/hosts 文件中添加如下兩條條目。

8.8.8.8 googledns
52.1.157.61 dockerhub
healthcheck

通過命令檢查容器是否健康運(yùn)行

healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost"]
    interval: 1m30s
    timeout: 10s
    retries: 3
image

制定基礎(chǔ)鏡像

links

連接其他容器,不推薦使用,但抵不住它方便啊

links:
    - container1:alias1
    - container2:alias2
external_links

在使用Docker過程中,我們會(huì)有許多多帶帶使用docker run啟動(dòng)的容器,為了使Compose能夠連接這些不在docker-compose.yml中定義的容器,我們需要一個(gè)特殊的標(biāo)簽,就是external_links,它可以讓Compose項(xiàng)目里面的容器連接到那些項(xiàng)目配置外部的容器(前提是外部容器中必須至少有一個(gè)容器是連接到與項(xiàng)目內(nèi)的服務(wù)的同一個(gè)網(wǎng)絡(luò)里面)。 格式如下:

external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql
loggins

配置日志選項(xiàng)

logging:
    driver: syslog
    options:
        syslog-address: "tcp://192.168.0.42:133"

目前支持的日志類型有:

syslog

json-file //默認(rèn),因此你使用docker inspect container_id 得到的輸出是json格式的

none

options的參數(shù)除了syslog-address,還有max-size max-file

options:
    max-size: "200k"
    max-file: "10"
network_mode

設(shè)置網(wǎng)絡(luò)模式。使用和 docker run 的 --network 參數(shù)一樣的值。

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
networks

配置容器連接的網(wǎng)絡(luò)。

version: "3.0"
services:
    some-service:
        networks:
            - network1
            - network2
    networks:
        network1:
        network2
volumes

數(shù)據(jù)卷所掛載路徑設(shè)置??梢栽O(shè)置宿主機(jī)路徑 (HOST:CONTAINER ) 或加上訪問模式(HOST:CONTAINER:ro )

volumes:
    - host_dir:container_dir

之后,你在volume中的讀寫操作,本質(zhì)上都是在host的文件系統(tǒng)進(jìn)行讀寫的,因此哪怕你最后把容器刪除,你也可以在主機(jī)目錄中訪問這些數(shù)據(jù),除非你在刪除容器的同時(shí)把volume也顯式刪除。我們一般用于存儲(chǔ)需要保證安全性的數(shù)據(jù),如數(shù)據(jù)庫的data目錄

tmp file

掛載臨時(shí)目錄到容器內(nèi)部,與 run 的參數(shù)一樣效果:

tmpfs: /run
tmpfs:
  - /run
  - /tmp

為了讓容器能夠訪問數(shù)據(jù)而不需要永久地寫入數(shù)據(jù),可以使用 tmpfs 掛載,該掛載僅存儲(chǔ)在主機(jī)的內(nèi)存中(如果內(nèi)存不足,則為 swap)。當(dāng)容器停止時(shí),tmpfs 掛載會(huì)被移除。如果提交容器,則不會(huì)保存 tmpfs 掛載。

label
labels:
    - key:value

為生成的鏡像添加描述信息??梢允褂胕nspect查看。

其他

其他設(shè)置如omainname, entrypoint, hostname, ipc, mac_address, privileged,read_only, shm_size, restart, stdin_open, tty, user, working_dir ,基本同run命令中的格式與功能。如

restart:
    always

表示當(dāng)遇到任意退出的時(shí)候,都會(huì)自動(dòng)重啟

例子

Dockerfile

FROM python:3.6-alpine
# 復(fù)制代碼到鏡像
ADD . /code   
# 設(shè)置后面的命令的pwd
WORKDIR /code
# 安裝依賴
RUN pip install redis flask
# 運(yùn)行服務(wù)的命令
CMD ["python", "app.py"]

docker-compose.yml

# docker版本
version: "2.0"
services:
    # 一個(gè)服務(wù),名字為web
    web:
        # 指定從Dockerfile構(gòu)建,并指定上下文
        build: .
        # 指定端口映射,host_port:container_port
        ports:
            - 5000:5000
        # 等待redis服務(wù)啟動(dòng)后再啟動(dòng)web服務(wù)
        depends_on:
            - redis_srv
    # redis服務(wù),基于鏡像redis
    redis_srv:
        image: "redis:latest"

運(yùn)行

docker-compose up --build

docker-compose up:判斷是否已經(jīng)有目標(biāo)鏡像web和redis,如果有就啟動(dòng);如果沒有,就構(gòu)建鏡像并啟動(dòng)容器;如果已經(jīng)構(gòu)建但是Dockerfile或者docker-complse.yml發(fā)生變化,就重新構(gòu)建并啟動(dòng)?!?-build”選項(xiàng)表示無論如何都重新構(gòu)建鏡像。

docker-compose build: 只構(gòu)建鏡像不運(yùn)行容器

docker-compose rm -f: 移除當(dāng)前目錄下docker-compose構(gòu)建的鏡像


上一節(jié): Docker 筆記(2):Dockerfile

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27453.html

相關(guān)文章

  • Docker-Compose官方學(xué)習(xí)筆記(2)起步構(gòu)建一個(gè)多容器app應(yīng)用

    摘要:使用構(gòu)建一個(gè)創(chuàng)建一個(gè)文件夾創(chuàng)建腳本這個(gè)腳本使用了和的包,并且啟動(dòng)了一個(gè)服務(wù)端口創(chuàng)建構(gòu)建的由于在的時(shí)候,默認(rèn)會(huì)去官方去獲取,國內(nèi)是無法訪問的,所以這里使用了的鏡像去下載包。 使用docker-compose構(gòu)建一個(gè)python-web app 創(chuàng)建一個(gè)文件夾 python-web-app $mkdir python-web-app $cd python-web-app 2.創(chuàng)建pytho...

    BWrong 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Docker入門》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。必填用于執(zhí)行命令,當(dāng)執(zhí)行完畢后,將產(chǎn)生一個(gè)新的文件層??蛇x指定此鏡像啟動(dòng)時(shí)默認(rèn)執(zhí)行命令。可選用于指定需要暴露的網(wǎng)絡(luò)端口號(hào)??蛇x向鏡像中掛載一個(gè)卷組。 時(shí)間:2017年09月16日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無 學(xué)習(xí)源碼:無 第一章:課程簡介 1-1 課程介紹 Docke...

    CoorChice 評(píng)論0 收藏0
  • Docker-Compose學(xué)習(xí)筆記(1)安裝簡介

    摘要:概述是一個(gè)用來定義和運(yùn)行復(fù)雜應(yīng)用的工具。使用,用戶通過來進(jìn)行構(gòu)建。使用,不再需要使用腳本來啟動(dòng)容器。在配置文件中,所有的容器通過來定義,然后通過腳本來啟動(dòng),停止和重啟應(yīng)用,和應(yīng)用中的服務(wù)以及所有依賴服務(wù)的容器。 概述 Docker Compose是一個(gè)用來定義和運(yùn)行復(fù)雜應(yīng)用的Docker工具。使用Compose,你可以在一個(gè)文件中定義一個(gè)多容器應(yīng)用,然后使用一條命令來啟動(dòng)你的應(yīng)用,完成...

    shiyang6017 評(píng)論0 收藏0
  • Docker-Compose學(xué)習(xí)筆記(1)安裝簡介

    摘要:概述是一個(gè)用來定義和運(yùn)行復(fù)雜應(yīng)用的工具。使用,用戶通過來進(jìn)行構(gòu)建。使用,不再需要使用腳本來啟動(dòng)容器。在配置文件中,所有的容器通過來定義,然后通過腳本來啟動(dòng),停止和重啟應(yīng)用,和應(yīng)用中的服務(wù)以及所有依賴服務(wù)的容器。 概述 Docker Compose是一個(gè)用來定義和運(yùn)行復(fù)雜應(yīng)用的Docker工具。使用Compose,你可以在一個(gè)文件中定義一個(gè)多容器應(yīng)用,然后使用一條命令來啟動(dòng)你的應(yīng)用,完成...

    zxhaaa 評(píng)論0 收藏0

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

0條評(píng)論

張金寶

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<