docker-compose的介紹與使用

一、docker-compose 常用命令和指令

1. 概要

默認的模板文件是 docker-compose.yml,其中定義的每個服務可以通過 image 指令指定鏡像或 build 指令(需要 Dockerfile)來自動構建。

注意如果使用 build 指令,在 Dockerfile 中設置的選項(例如:CMD, EXPOSE, VOLUME, ENV 等) 將會自動被獲取,無需在 docker-compose.yml 中再次設置。如果設置了會被YML覆蓋

2. 常用的docker-compose命令
命令描述
docker-compose up -d構建建啟動容器
docker-compose exec bash登錄到容器中
docker-compose down刪除所有容器,鏡像
docker-compose ps顯示所有容器
docker-compose restart重新啟動容器
docker-compose run --no-deps --rm php-fpm php -v在php-fpm中不啟動關聯容器,并容器執行php -v 執行完成后刪除容器
docker-compose build構建鏡像
docker-compose build --no-cache不帶緩存的構建
docker-compose logs查看的日志
docker-compose logs -f驗證(docker-compose.yml)文件配置,當配置正確時,不輸出任何內容,當文件配置錯誤,輸出錯誤信息
docker-compose pause暫停容器
docker-compose unpause恢復容器
docker-compose rm刪除容器(刪除前必須關閉容器)
docker-compose stop停止容器
docker-compose start啟動容器
2.1、image

說明

指定為鏡像名稱或鏡像 ID。如果鏡像在本地不存在,Compose 將會嘗試拉去這個鏡像。

栗子

image: ubuntu

image: mysql:5.7.22

2.2、build

說明

指定 Dockerfile 所在文件夾的路徑。 Compose 將會利用它自動構建這個鏡像,然后使用這個鏡像。

栗子

build: ./

build: ./web/

2.3、command

說明

覆蓋容器啟動后默認執行的命令。

栗子

command:
? ? ? --default-authentication-plugin=mysql_native_password
? ? ? --character-set-server=utf8mb4
? ? ? --collation-server=utf8mb4_general_ci
? ? ? --explicit_defaults_for_timestamp=true
? ? ? --lower_case_table_names=1

2.4、links

說明

鏈接到其它服務中的容器。使用服務名稱(同時作為別名)或服務名稱:服務別名 (SERVICE:ALIAS) 格式都可以。

栗子

links:
?- mysql
?- db:database
?- redis

使用的別名將會自動在服務容器中的 /etc/hosts 里創建。例如:

172.17.2.111 ?db
172.17.2.112 ?database
172.17.2.113 ?redis?

2.5、external_links

說明

鏈接到 docker-compose.yml 外部的容器,甚至 并非 Compose 管理的容器。參數格式跟 links 類似。

栗子

?external_links:
?- redis
?- web_db_mysql:mysql
?- web_db_oracle:oracle
?- web_db_oracle:postgre

2.6、ports

說明

暴露端口信息。使用宿主:容器 (HOST:CONTAINER)格式或者僅僅指定容器的端口(宿主將會隨機選擇端口)都可以。

栗子

ports:
?- "6379"
?- "8000:8000"
?- "46200:22"
?- "127.0.0.1:8080:8080"

注:當使用 HOST:CONTAINER 格式來映射端口時,如果你使用的容器端口小于 60 你可能會得到錯誤得結果,因為 YAML 將會解析 xx:yy 這種數字格式為 60 進制。所以建議采用字符串格式。 ?

2.7、expose

說明

暴露端口,但不映射到宿主機,只被連接的服務訪問。可以指定內部端口為參數

栗子

expose:
?- "3307"
?- "6380"

2.8、volumes

說明

卷掛載路徑設置。可以設置宿主機路徑 (HOST:CONTAINER) 或加上訪問模式 (HOST:CONTAINER:ro 或者rw)。

栗子?

volumes:
?- ./mysql/data:/var/lib/mysql?
?- ./configs:/etc/configs/:ro?

2.9、volumes_from

說明

從另一個服務或容器掛載它的所有卷。

栗子

volumes_from:
?- service_name
?- container_name

2.10、environment

說明

設置環境變量。只給定名稱的變量會自動獲取它在 Compose 主機上的值,可以用來防止泄露不必要的數據。

栗子

?environment:
?? ? ?MYSQL_ROOT_PASSWORD: root
?? ? ?TZ: Asia/Shanghai

2.11、networks

說明

用于設置指定網絡,子標簽aliases用于設置服務別名,相同的別名可以在不同的網絡中擁有不同的識別別名。

可以在service中使用,也可以在頂級標簽中使用

栗子

services:
? some-service:
? ? networks:
? ? ? some-network:
? ? ? ? aliases:
? ? ? ? ?- alias1
? ? ? ? ?- alias3
? ? ? other-network:
? ? ? ? aliases:
? ? ? ? ?- alias2
# 定義網絡 ? ? ? ??
networks:
? ?default:
? ? external:
? ? ? name: app

二、Docker Compose-網絡設置

一、概述

隨著微服務的事件,應用的越來越多, 經常會碰到需要多個容器共同協作, 這樣就需要多個容器之間能夠互相訪問。Docker提供了映射容器端口到宿主機和容器互聯機制來為容器提供網絡服務。隨著 docker 的快速發展,其網絡架構也在不斷的演進。

二、容器網絡模型(了解)

Docker在 1.9 版本中引入了一整套的 docker network 子命令和跨主機網絡支持。允許用戶可以根據他們應用的拓撲架構創建虛擬網絡并將容器接入其所對應的網絡。網絡部分代碼就已經被抽離并單獨成為了 docker 的網絡庫(libnetwork)。在此之后,容器的網絡模式也被抽象變成了統一接口的驅動。 為了標準化網絡驅動的開發步驟和支持多種網絡驅動,docker 公司在 libnetwork 中使用了 CNM(Container Network Model)。CNM 定義了構建容器虛擬化網絡的模型,同時還提供了可以用于開發多種網絡驅動的標準化接口和組件

CNM的理念是提供可以跨不同網絡基礎架構可實現移植的應用。這個模型平衡了應用的可移植性同時不會損失基礎架構原有的各種特性和功能。

CNM主要有三部分組成
  • 沙箱(SandBox)--一個沙箱包含了容器的網絡配置。這里包括了容器接口的管理,路由表,和DNS設定。一個沙箱可以包含多個來自不同網絡的端點,可以同時連接多個網絡。

  • 端點(Endpoint)--沙箱通過端點來連接網絡。端點結構的存在使到應用與網絡的連接實現虛擬化。這樣有助于維護應用的可移值性,因此一個服務可以在無須知道如何去連接網絡的情況下使用不同類型的網絡驅動。

  • 網絡(Network)--CNM并不是OSI模型中說的網絡層。而是由Linux橋接,VLan等來實現。網絡收集了所有連接在其上的端點,并實現了這些端點的互連。端點如果不連接到其中一個網絡,那么將無法與外界連接。

CNM驅動接口

容器連網模型提供了兩個可拔插且開放的接口供用戶使用,這些接口是用于通訊,利用供應商提供的附加功能,網絡可見性,或網絡控制等方面。目前存在以下網絡驅動:

  • 網絡驅動(Network Drivers)--Docker網絡驅動提供了使網絡可以工作的具體實現。他們是可拔插的,所以很易于支持不同的用戶使用場景。多個網絡驅動可同時用于指定的Docker引擎和群集。有以下兩個廣泛使用的CNM網絡驅動:

    • 內置網絡驅動(Native Network Drivers)--內置網絡驅動是內置于Docker引擎,并隨Docker提供的驅動。有多個驅動可供選擇,以支持不同的功能,如overlay網絡和local bridge網絡。

    • 遠程網絡驅動(Remote Network Drivers)--遠程網絡驅動是由社區或其它供應商建立的網絡驅動。這些驅動可用于與現有的軟件或硬件環境進行集成。用戶也可以建立自己的網絡驅動以達成各種特殊需求。

  • IPAM(IP地址管理)驅動--Docker有一個內置的IP地址管理驅動,在沒有特別指定IP的情況下,它會為網絡和端點提供了默認的子網或IP地址。IP地址通過網絡(docker network create),容器(docker container create)和服務(docker service create)創建指令來人工分配。遠程IPAM驅動也存在和提供了集成到現有IPAM的工具。

Docker內置網絡驅動

Docker內置網絡驅動是Docker引擎的一部份不需要任何額外模塊。他們可以被docker network命令所調用。以下是現存的內置網絡驅動:

驅動描述
Host沒有命名空間隔離,主機上的所有接口都可以直接被容器使用。
Bridge受Docker管理的Linux橋接網絡。默認在同一個bridge網絡的容器都可以相互通迅。 容器的外部訪問也可以使用bridge驅動來設置。
Overlay提供多主機的容器網絡互連。同時使用了本地Linux橋接網絡和VXLAN技術實現容器之間跨物理網絡架構的連接。
MACVLAN使用MACVLAN橋接模式建立容器接口和主機接口之間的連接。實現為容器提供在物理網絡中可路由的IP地址。 此外VLAN可以被中繼至macvlan驅動以強制實現容器的2層分段。
None容器具有屬于自己的網絡棧和網絡命名空間,但并在容器內添加網絡接口。如沒有其它的設置,則容器將完全獨立于其它網絡。

參考文章

https://success.docker.com/article/networking

Docker網絡體系結構:設計可擴展、可移植的Docker容器網絡-CSDN博客

三、Docker Compose-網絡設置二

一、概述

默認情況下,Compose 會為我們的應用創建一個網絡,服務的每個容器都會加入該網絡中。這樣,容器就可被該網絡中的其他容器訪問,不僅如此,該容器還能以服務名稱作為 Hostname 被其他容器訪問

默認情況下,應用程序的網絡名稱基于 Compose 的工程名稱,而項目名稱基于 docker-compose.yml 所在目錄的名稱。如需修改工程名稱,可使用 --project-name 標識或 COMPOSE_PORJECT_NAME 環境變量。

假如一個應用程序在名為 myapp 的目錄中,并且 docker-compose.yml 如下所示:

version: '3'
services:
? web:
? ? build: .
? ? ports:
? ? ? - "8000:8000"
? db:
? ? image: mysql?

當我們運行 docker-compose up 時,將會執行以下幾步:

  • 創建一個名為 myapp_default 的網絡

  • 使用 web 服務的配置創建容器,它以 web 這個名稱加入網絡 myapp_default

  • 使用 db 服務的配置創建容器,它以 db 這個名稱加入網絡 myapp_default

容器間可使用服務名稱(web 或 db)作為 Hostname 相互訪問。例如,web 這個服務可使用 postgres://db:5432 訪問 db 容器。

當服務的配置發生更改時,可使用 docker-compose up 命令更新配置。此時,Compose 會刪除舊容器并創建新容器。新容器會以不同的 IP 地址加入網絡,名稱保持不變。任何指向舊容器的連接都會被關閉,容器會重新找到新容器并連接上去。

二、使用 links

默認情況下,服務之間可使用服務名稱相互訪問。links 允許我們定義一個別名,從而使用該別名訪問其他服務。

version: '2'
services:
? web:
? ? build: .
? ? links:
? ? ? - "db:database"
? db:
? ? image: postgres?

三、自定義網絡

一些場景下,默認的網絡配置滿足不了我們的需求,此時我們可使用 networks 命令自定義網絡。networks 命令允許我們創建更加復雜的網絡拓撲并指定自定義網絡驅動和選項。不僅如此,我們還可使用 networks 將服務連接到不是由 Compose 管理的、外部創建的網絡。

version: '3'
services:proxy:build: nginxnetworks:- frontapp:build: ./appnetworks:- front- backdb:image: postgresnetworks:- backnetworks:front:# Use a custom driverdriver: custom-driver-1back:# Use a custom driver which takes special optionsdriver: custom-driver-2driver_opts:foo: "1"bar: "2"

其中,proxy 服務與 db 服務隔離,兩者分別使用自己的網絡;app 服務可與兩者通信。使用 networks 命令,即可方便實現服務間的網絡隔離與連接。 ?

四、配置默認網絡
version: '3'
services:web:build: .ports:- "8000:8000"db:image: postgresnetworks:default:driver: custom-driver-1

?這樣,就可為該應用指定自定義的網絡驅動。

五、已存在的網絡

我們可以預先創建一個名為 myapp 的網絡,讓 Compose 加入這個新創建的網絡,使所有 Compose 可以通信,此時使用 external 選項。

# 創建網絡
docker network create <Network Name>
# 查看已存在的網絡
docker network list

networks:
? default:
? ? external:
? ? ? name: web?

四、Docker 可視化

一、Docker常見的幾款web工具:
  • portainer(常用)

  • docker UI

  • shipyard

二、什么是Portainer?

Portainer是Docker的圖形化管理工具,提供狀態顯示面板、應用模板快速部署、容器鏡像網絡數據卷的基本操作(包括上傳下載鏡像,創建容器等操作)、事件日志顯示、容器控制臺操作、Swarm集群和服務等集中管理和操作、登錄用戶管理和控制等功能。功能十分全面,基本能滿足中小型單位對容器管理的全部需求

三、安裝
下載鏡像

docker pull portainer/portainer-ce?

運行Portainer(單機版)

docker ?run -d \
?-p 9000:9000 \
?-v /var/run/docker.sock:/var/run/docker.sock \
?portainer/portainer-ce?

訪問 http://localhost:9000/

?

設置管理員密碼

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215371.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215371.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215371.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RHEL網絡服務器

目錄 1.時間同步的重要性 2.配置時間服務器 &#xff08;1&#xff09;指定所使用的上層時間服務器。 (2&#xff09;指定允許訪問的客戶端 (3&#xff09;把local stratum 前的注釋符#去掉。 3.配置chrony客戶端 &#xff08;1&#xff09;修改pool那行,指定要從哪臺時間…

Python常見面試知識總結(一):迭代器、拷貝、線程及底層結構

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天來總結一下Python和C語言中常見的面試知識&#xff0c;歡迎大家一起前來探討學習~ 【一】Python中迭代器的概念&#xff1f; 可迭代對象是迭代器、生成器和裝飾器的基礎。簡單來說&#xff0c;可以使用for來循環遍歷…

[古劍山2023] pwn

最近這個打stdout的題真多。這個比賽沒打。拿到附件作了一天。 choice 32位&#xff0c;libc-2.23-i386&#xff0c;nbytes初始值為0x14,讀入0x804A04C 0x14字節后會覆蓋到nbytes 1個字節。當再次向v1讀入nbytes字節時會造成溢出。 先寫0x14p8(0xff)覆蓋到nbytes然后溢出寫傳…

初次參加軟考就想報高級,哪個相對容易考?

如果你想第一次參加軟考時就報考高級科目&#xff0c;但是卻不知道該報考高級中的哪個科目好、 ? ?那么今天的這篇文章你一定不要錯過&#xff01;首先&#xff0c;我們一起來了解一下&#xff0c;軟考高級中的5個科目。 ? ?軟考高級科目 ? 信息系統項目管理師 ? …

記錄一次postgresql臨時表丟失問題

項目相關技術棧 springboot hikari連接池pgbouncerpostgresql數據庫 背景 為了優化一個任務執行的速度&#xff0c;我將任務的sql中部分語句抽出生成臨時表&#xff08;create temp table tempqw as xxxxxxxxx&#xff09;&#xff0c;再和其他表關聯&#xff0c;提高查詢速…

三翼鳥2023輝煌收官, 定盤2024高質量棋局

最近在不同平臺上接連看到這樣的熱搜話題&#xff1a;用時間膠囊記錄2023的自己、2023年度問答、2023十大網絡流行語公布… 顯然&#xff0c; 2023年進入最后一個月&#xff0c;時間匆匆&#xff0c;這也意味著又到了總結過去和規劃未來的時候。拿到結果、取得成績當然是對202…

算法通關村第十五關 | 白銀 | 海量數據場景下的熱門算法題

1.從 40 個億中產生一個不存在的整數 可以采用位圖存儲數據&#xff0c;申請一個 bit 類型的數組 bitArr &#xff0c;每個位置只表示 0 或者 1 狀態&#xff0c;可以將占用內存縮小為使用哈希表的 1/32 。 遍歷給定的 40 億個數&#xff0c;遇到數時就將 bitArr 相應位置設置…

短視頻引流獲客系統:引領未來營銷的新潮流

在這個信息爆炸的時代&#xff0c;短視頻已經成為了人們獲取信息的主要渠道之一。而隨著短視頻的火爆&#xff0c;引流獲客系統也逐漸成為了營銷領域的新寵。本文將詳細介紹短視頻引流獲客系統的開發流程以及涉及到的技術&#xff0c;讓我們一起來看看這個引領未來營銷的新潮流…

華清遠見作業第二十四天

使用消息隊列完成兩個進程之間相互通信 代碼 #include<stdio.h> #include<string.h> #include<stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/ipc.h> #include <sys/msg.h> #in…

k8s一鍵部署uniswap

1、拉取uniswap源碼 github地址 2、編寫Dockerfile并打鏡像 # Set the base image FROM node:18.10.0# WORKDIR /usr/src/app/ WORKDIR /home/gateway# Copy files COPY ./ /home/gateway/# Dockerfile author / maintainer LABEL maintainer"Michael Feng <mikehummi…

Java最全面試題專題---2、Java集合容器(2)

Map接口 說一下 HashMap 的實現原理&#xff1f; HashMap概述&#xff1a; HashMap是基于哈希表的Map接口的非同步實現。此實現提供所有可選的映射操作&#xff0c;并允許使用null值和null鍵。此類不保證映射的順序&#xff0c;特別是它不保證該順序恒久不變。 HashMap的數據…

C語言-枚舉

常量符號化 用符號而不是具體的數字來表示程序中的數字 枚舉 用枚舉而不是定義獨立的const int變量 枚舉是一種用戶定義的數據類型&#xff0c;他用關鍵詞enum以如下語法來聲明&#xff1a; enum枚舉類型名字{名字0&#xff0c;…&#xff0c;名字n}&#xff1b; 枚舉類型名…

外包干了3年,技術退步太明顯了。。。。。

先說一下自己的情況&#xff0c;本科生生&#xff0c;18年通過校招進入武漢某軟件公司&#xff0c;干了差不多3年的功能測試&#xff0c;今年國慶&#xff0c;感覺自己不能夠在這樣下去了&#xff0c;長時間呆在一個舒適的環境會讓一個人墮落!而我已經在一個企業干了四年的功能…

6_CSS布局之浮動的應用

day06_CSS布局之浮動的應用 本課目標&#xff08;Objective&#xff09; 理解什么是浮動掌握浮動的三種機制掌握浮動的案例應用 1 CSS 布局的三種機制 CSS 提供了 3 種機制來設置盒子的擺放位置&#xff0c;分別是普通流&#xff08;標準流&#xff09;、浮動和定位。 普通流…

HarmonyOS開發:回調實現網絡的攔截

前言 基于http封裝的一個網絡庫&#xff0c;里面有一個知識點&#xff0c;在初始化的時候&#xff0c;可以設置請求頭攔截和請求錯誤后的信息的攔截&#xff0c;具體案例如下&#xff1a; et.getInstance().init({netErrorInterceptor: new MyNetErrorInterceptor(), //設置全…

web網絡安全

web安全 一&#xff0c;xss 跨站腳本攻擊(全稱Cross Site Scripting,為和CSS&#xff08;層疊樣式表&#xff09;區分&#xff0c;簡稱為XSS)是指惡意攻擊者在Web頁面中插入惡意javascript代碼&#xff08;也可能包含html代碼&#xff09;&#xff0c;當用戶瀏覽網頁之時&…

關于北京醫學sci論文翻譯

在醫學領域&#xff0c;翻譯論文是一項非常重要的工作。醫學論文的翻譯需要準確、專業、嚴謹&#xff0c;同時也需要考慮到醫學領域的特殊性和復雜性。那么&#xff0c;如何翻譯醫學論文呢&#xff1f;北京醫學SCI論文翻譯哪家好呢&#xff1f; 首先&#xff0c;需要具備專業的…

多目標跟蹤數據集

目錄 DanceTrack數據集 自己改進的可視化代碼: DanceTrack數據集 DanceTrack 是一個大規模的多對象跟蹤數據集。用于在遮擋、頻繁交叉、同樣服裝和多樣化身體姿態條件下對人進行跟蹤。強調運動分析在多對象跟蹤中的重要性。 GitHub地址:https://github.com/DanceTrack/Dan…

python自動化測試實戰 —— 單元測試框架

軟件測試專欄 感興趣可看&#xff1a;軟件測試專欄 自動化測試學習部分源碼 python自動化測試相關知識&#xff1a; 【如何學習Python自動化測試】—— 自動化測試環境搭建 【如何學習python自動化測試】—— 瀏覽器驅動的安裝 以及 如何更…

swing快速入門(五)

注釋很詳細&#xff0c;直接上代碼 上一篇 本篇新增內容&#xff1a; 1.布局管理器BorderLayout 2.自適應尺寸方法pack() import java.awt.*; public class swing_test_3 {public static void main(String[] args) {Frame framenew Frame("演示BorderLayout");//…