摘要:和首先,在以往的項目中,都是使用的形式來配置的,所以,首先就需要了解這兩者的關系。完整配置文件版本號服務官方參考
之前就了解過docker,但是一直沒有自己配置過docker。這次自己為項目配置了一下docker,在這里做一下總結記錄。
Dockerfile和docker-compose首先,在以往的項目中,都是使用DockerFile + docker-compose的形式來配置docker的,所以,首先就需要了解這兩者的關系。
我們要知道的是,如果我們只使用dockerfile就可以完成對docker的鏡像配置。那么,為什么我們還要使用docker-compose呢?
最開始是這樣的,我們只是用docker中的一些命令,就可以實現(xiàn)配置一個鏡像。但是這是有問題的:不能保存。所以就是用dockerfile將創(chuàng)建鏡像的過程記錄下來,然后我們只需要使用:
docker build
就可以創(chuàng)建一個鏡像。
現(xiàn)在問題又來了:我想創(chuàng)建一個完整的項目,光是有一個鏡像是不夠的,比如我們的項目中就需要使用nginx、mysql、redis才能夠啟動項目。
雖然我們也可以考慮使用一個dockerfile,然后寫成一個鏡像,但是這就不可復用了。所以更加合理的做法應該是我們分別為nginx、mysql、redis創(chuàng)建一個鏡像,然后將這些鏡像結合起來使用。
docker-compose就是幫我們實現(xiàn)這個問題的。
所以,總結來說,dockerfile是用來創(chuàng)建單個鏡像的,而docker-compose是用來創(chuàng)建一個項目的。
Dockerfile首先先說一下Dockerfile的創(chuàng)建。在這個項目中,我們只寫了一條語句:
FROM registry.cn-beijing.aliyuncs.com/mengyunzhi/nginx:1.13.12
FROM是第一條命令,并且是必須的一條命令,它指定了基礎鏡像。
在這里,我們使用的基礎鏡像是托管在阿里docker倉庫中的鏡像。
我們也可以從docker官方倉庫中獲取鏡像:
FROM nginx:1.13.12
但是有可能在拉取鏡像的時候比較慢。
docker-composedocker-compose我們通過配置docker-compose.yml來實現(xiàn)。
聲明版本version: "3"
這是聲明我們要使用哪種版本的語法的,不同版本的略有差異。
聲明服務按照我們上面所說,需要nginx、mysql、redis三個鏡像,也就是需要三個服務:
services: alice.mysql: alice.nginx: alice.redis:
然后我們以mysql為例,說明需要哪些命令來構建service。
首先我們要使用上面創(chuàng)建的Dockerfile,對獲取的鏡像進行構建(build)。
services: alice.mysql: build: context: ./mysql
context選項指定了基礎鏡像。
然后就是image:
services: alice.mysql: build: context: ./mysql image: mysql:5.7
image指定了服務使用的鏡像名,這個在我們沒有上面的構建命令(build)時,會先找本地是否有對應的鏡像,如果沒有,compose會嘗試拉取鏡像。
端口(ports):
services: alice.mysql: build: context: ./mysql image: mysql:5.7 ports: - "3309:3306"
將docker容器的3306端口映射到本地的3309端口。
環(huán)境(environment):
services: alice.mysql: build: context: ./mysql image: mysql:5.7 ports: - "3309:3306" environment: - MYSQL_USER=root - MYSQL_PASSWORD= - MYSQL_ALLOW_EMPTY_PASSWORD=true - MYSQL_DATABASE=alice
其實我更喜歡將這一部分叫做環(huán)境變量,因為這部分是用來定義變量的。
最后,因為我們是要將多個服務結合起來,使項目運行的,所以就需要各個容器間進行通信。所以就需要使用網(wǎng)絡(networks)進行配置,將各個服務放在同一個局域網(wǎng)下:
services: alice.mysql: build: context: ./mysql image: mysql:5.7 ports: - "3309:3306" environment: - MYSQL_USER=root - MYSQL_PASSWORD= - MYSQL_ALLOW_EMPTY_PASSWORD=true - MYSQL_DATABASE=alice networks: aliceNetwork: ipv4_address: 172.28.8.4
這里使用了ipv4_address為其分配了一個靜態(tài)IP地址。
聲明網(wǎng)絡上面我們使用了網(wǎng)絡,那是為服務定義網(wǎng)絡,其實在這之前,我們還需要定義一個自己的網(wǎng)絡:
networks: aliceNetwork: ipam: config: - subnet: 172.28.8.0/24
這里聲明了一個子網(wǎng)段,所以可以看到上面mysql的網(wǎng)絡是172.28.8.4這種形式,其實只是從這個網(wǎng)段中隨便選了一個。
完整配置文件:
# 版本號 version: "3" # 服務 services: alice.mysql: build: context: ./mysql image: mysql:5.7 ports: - "3309:3306" environment: - MYSQL_USER=root - MYSQL_PASSWORD= - MYSQL_ALLOW_EMPTY_PASSWORD=true - MYSQL_DATABASE=alice networks: aliceNetwork: ipv4_address: 172.28.8.4 alice.nginx: build: context: ./nginx image: nginx:1.13.12 volumes: - ./:/etc/nginx/conf.d - ./app:/usr/local/app ports: - 9000:80 - 9001:81 networks: aliceNetwork: ipv4_address: 172.28.8.3 alice.redis: build: context: ./redis image: redis:alpine ports: - "6380:6379" networks: aliceNetwork: ipv4_address: 172.28.8.5 networks: aliceNetwork: ipam: config: - subnet: 172.28.8.0/24
官方參考:
https://docs.docker.com/compo...
https://hub.docker.com/_/nginx
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/27707.html
摘要:相關基于項目和項目,并遵循應用的十二因素風格。相關在設計上,項目盡量保持驅(qū)動和模塊化,以便模塊支持不同的實現(xiàn)方案。相關不僅可以管理眾多虛擬機,其計算服務還支持對的驅(qū)動,管理引擎的子項目還可用于通過模板管理容器?,F(xiàn)已整合公司所支持的項目。 整理自《Docker技術入門與實踐》 PaaS(Platform as a Service) PaaS 是希望提供一個統(tǒng)一的可供所有軟件直接運行而無需...
摘要:本篇承接使用構建環(huán)境,介紹如何在該文所用的容器中運行項目。接下來可以新建一個項目或是通過轉(zhuǎn)移項目。從上同步項目一般服務器中運行的項目都是在本地開發(fā)完成后同步上去的。生成文件文件含有項目所需的配置以及用于加密解密的隨機字符串。 本篇承接 使用 Docker 構建 LNMP 環(huán)境,介紹如何在該文所用的容器中運行 Laravel 項目。主要步驟為:轉(zhuǎn)移 Laravel 項目到數(shù)據(jù)卷 => 配...
摘要:部署項目寫在前面作為輕量級虛擬化技術,擁有持續(xù)集成版本控制可移植性隔離性和安全性等優(yōu)勢。容器可以被創(chuàng)建啟動停止刪除暫停等。重新運行應用容器直接基于鏡像來啟動容器,運行命令將宿主機的掛載到容器的目錄上。Docker 部署 vue 項目 1.寫在前面: Docker 作為輕量級虛擬化技術,擁有持續(xù)集成、版本控制、可移植性、隔離性和安全性等優(yōu)勢。本文使用Docker來部署一個vue的前端應用,并盡...
摘要:只要的項目有提交,相關就根據(jù)來決定是否跑自動部署的命令。項目的自動部署添加執(zhí)行的注冊命令,按照說明進行參數(shù)配置。至此,和服務都已經(jīng)自動部署完成。 準備工作 說明 公司最近準備了一臺新的開發(fā)服務器,正好用以實踐docker的基本應用。docker的好處不再贅述,詳情可參考阮一峰的這篇入門。(關于Docker最好的中文介紹,沒有之一)。 公司目前主要使用了EggJs + ReactJS的技...
摘要:先來看一下容器的文件中間一些操作省略這里用了多階段構建容器,如果直接通過設置環(huán)境變量只會在后面一個階段生效,但是是在第一個階段執(zhí)行的,所以環(huán)境變量不能應用到當中。 在今年年初的時候,完成了自己的個Fame博客系統(tǒng)的實現(xiàn),當時也做了一篇博文Spring-boot+Vue = Fame 寫blog的一次小結作為記錄和介紹。從完成實現(xiàn)到現(xiàn)在,也斷斷續(xù)續(xù)的根據(jù)實際的使用情況進行更新。 只不過每...
閱讀 632·2023-04-25 21:29
閱讀 1192·2023-04-25 21:27
閱讀 1110·2021-11-25 09:43
閱讀 1172·2021-09-29 09:43
閱讀 3685·2021-09-03 10:30
閱讀 2923·2019-08-29 15:26
閱讀 2882·2019-08-29 12:52
閱讀 1809·2019-08-29 11:10