在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Dockerfile鏡像制作與Docker-Compose容器編排

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2025-01-07 11:01 ? 次閱讀

Dockerfile鏡像制作

docker/podman中, 鏡像是容器的基礎,每次執行docker run的時候都會指定哪個基本鏡像作為容器運行的基礎。我們之前的docker的操作都是使用來自dockerhub提供的官方鏡像,直接使用這些鏡像只能滿足一定的基本需求,當基礎鏡像無法滿足我們的業務需求時,就得使用Dockerfile自己定制這些鏡像了。

Dockerfile是提供開發者用于定制自定義鏡像的配置文件。所以我們需要掌握Dockerfile文件的基本語法。


鏡像的定制就類似小時候學畫畫的水彩畫一樣,水彩畫是一層一層的涂抹上去的,而鏡像的定制則是編寫定制每一層所添加的配置、文件等命令信息。如果可以把每一層修改、安裝、構建、操作的命令都寫入到一個腳本,用腳本來構建、定制鏡像,這個腳本就是Dockerfile。
Dockerfile 是一個文本文件,其內包含了一條條用于自定義鏡像的指令(Instruction),這些指令每一條就構建一層,因此每一條指令的內容,就是告訴docker該如何構建每一層的鏡像內容。
注意:每一層指令執行結束以后就會隔離打開一層。所以Dockerfile中的命令層級如果越多,則構建生成的鏡像就越大,也就越臃腫,所以我們應該在學習完Dockerfile的語法以后,盡量采用最少的指令來定制鏡像。

基本指令

0ded76da-cc0f-11ef-9310-92fbcf53809c.png

FROM參數

一般寫在Dockerfile的首行,指定基礎鏡像,一個Dockerfile中只有一個FROM


FROM elasticsearch # 制作base image(基礎鏡像),盡量使用官方的image作為base image
FROM centos:8 # 以centos為基礎鏡像,進行二次構建鏡像
FROM ubuntu:20.04 # 帶有tag的基礎鏡像

LABEL參數

等價于MAINTAINER,用于設置當前dockerfile鏡像的作者相關信息。


FROM elasticsearch
LABEL version="1.0.0" # 容器元信息,幫助信息,Metadata,類似于代碼注釋
LABEL maintainer="649641514@qq.com"

RUN參數

RUN參數是一個萬能指令,用于指定鏡像內部執行系統命令, 對于復雜的RUN命令,避免不必要的分層,多條命令用反斜線換行,或者使用&&組合成一條命令!


RUN apt update && apt install -y vim
Python-dev && # 反斜線表示命令沒有結束,僅僅換行
/bin/bash -c "source $HOME/.bashrc;echo $HOME"

WORKDIR參數

設置鏡像啟動以后的容器默認工作目錄,相當于linux的cd命令


WORKDIR /ect # 相當于linux的cd命令,改變目錄,盡量使用絕對路徑!!!不要用RUN cd
WORKDIR /home/demo # 如果沒有就自動創建
RUN pwd # 打印結果應該是/home/demo

ADD參數

復制解壓,把宿主機的一個文件,添加到容器空間內,相當于 docker的cp


ADD /opt/django/manage.py /opt/ # 把宿主機的/opt/django/manage.py放到容器空間內的/opt/目錄下
ADD /opt/python3.8.12.tar.gz /opt/ # ADD的解壓文件作用,將宿主機的/opt/下的python3.6.tar.gz解壓到容器內的/opt/目錄下

COPY參數

拷貝指令,功能與ADD類似,但是沒有解壓過程,只有單純復制,也相當于 docker的cp。

將宿主機的文件, 拷貝到容器內,但是沒有解壓縮的命令,盡量使用COPY,不要使用ADD


COPY /opt/django/manage.py /opt/ # 把宿主機的/opt/django/manage.py放到容器空間內的/opt/目錄下

注意:ADD與COPY的區別:

如果不是復制壓縮包到容器內部,優先使用COPY命令

ADD除了COPY功能還有解壓功能

添加遠程網絡文件/目錄使用RUN curl或RUN wget

ENV參數

設置docker容器內部的系統環境變量,相當于docker -e


ENV MYSQL_VERSION 5.6 # 設置一個mysql常量,這個${MYSQL_VERSION}類似于全局常量
RUN yum install -y mysql-server="${MYSQL_VERSION}" # 如果版本號有變更,則只需要改這個常量就可以了

CMD參數

Dockerfile的結尾運行命令,類似RUN ,但是參數值是一個數組/列表,使用中括號括起來。


CMD ["sh", "run.sh"]

使用 Dockerfile之前,先切換成國內docker鏡像源


mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
{
"registry-mirrors" : [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/"
]
}

使用Dockerfile封裝Django鏡像

在/home下建立了docker目錄,在這個目錄下準備好要構建鏡像的文件和源碼包。


mkdir /home/docker && cd /home/docker
# 創建鏡像制作配置文件,
touch Dockerfile
# 創建一個shell腳本,用于后面啟動django項目的。
touch run.sh
# docker官方提供的ubuntu鏡像,里面源地址過時了,所以我們提供一個新的到容器內部
touch sources.list
sudo cp /etc/apt/sources.list ./
vim sources.list

sources.list,代碼:


deb http://repo.huaweicloud.com/ubuntu/ focal main restricted
deb http://repo.huaweicloud.com/ubuntu/ focal-updates main restricted
deb http://repo.huaweicloud.com/ubuntu/ focal universe
deb http://repo.huaweicloud.com/ubuntu/ focal-updates universe
deb http://repo.huaweicloud.com/ubuntu/ focal multiverse
deb http://repo.huaweicloud.com/ubuntu/ focal-updates multiverse
deb http://repo.huaweicloud.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://repo.huaweicloud.com/ubuntu focal-security main restricted
deb http://repo.huaweicloud.com/ubuntu focal-security universe
deb http://repo.huaweicloud.com/ubuntu focal-security multiverse

下載一個django-3.2.5的源碼包


wget -O Django-3.2.5.tar.gz https://gitee.com/mirrors/django/repository/archive/3.2.5?format=tar.gz

編寫Dockerfile構建鏡像的配置文件


vim Dockerfile


FROM ubuntu:20.04
LABEL version="3.2.5"
LABEL maintainer="649641514@qq.com"
ADD Django-3.2.5.tar.gz /opt/
COPY sources.list /etc/apt/sources.list
RUN apt update && apt install -y python3 python3-pip
WORKDIR /opt/
RUN mv django-3.2.5 django
WORKDIR /opt/django
RUN python3 setup.py install
WORKDIR /opt
RUN django-admin.py startproject djdemo
COPY run.sh /opt/djdemo/run.sh
WORKDIR /opt/djdemo
RUN sed -i "s/ALLOWED_HOSTS = []/ALLOWED_HOSTS = ['*']/g" /opt/djdemo/djdemo/settings.py && chmod 755 run.sh
EXPOSE 8000
CMD ["/bin/sh","run.sh"]

注意:Dockerfile中不能出現命令以外的任何注釋。以下是注釋版本:


# 指定當前定制鏡像的基礎鏡像以及版本號
FROM ubuntu:20.04
# 指定鏡像的描述信息[版本號、作者]
LABEL version="1.0.0"
LABEL maintainer="649641514@qq.com"
# 從鏡像外復制并解壓到鏡像內部
ADD Django-3.2.5.tar.gz /opt/
# 設置當前定制鏡像的鏡像源
COPY /etc/apt/sources.list /etc/apt/sources.list
# 運行終端命令,安裝python3以及相關工具包
RUN apt update && apt install -y python3 python3-pip
# 切換工作目錄
WORKDIR /opt/
# 改目錄名
RUN mv django-3.2.5 django
# 切換工作目錄
WORKDIR /opt/django
# 安裝django框架
RUN python3 setup.py install
# 切換工作目錄
WORKDIR /opt
# 創建一個django項目
RUN django-admin.py startproject djdemo
# 從鏡像外界復制一個run.sh啟動腳本到django項目根目錄下
COPY run.sh /opt/djdemo/run.sh
# 切換工作目錄
WORKDIR /opt/djdemo
# 替換django配置文件settings.py的ALLOWED_HOSTS配置項,允許客戶端通過任何地址訪問django項目并設置django的啟動腳本的權限為755
RUN sed -i "s/ALLOWED_HOSTS = []/ALLOWED_HOSTS = ['*']/g" /opt/djdemo/djdemo/settings.py && chmod 755 run.sh
# 開放鏡像的端口8000
EXPOSE 8000
# CMD就是RUN,用于在結尾執行終端命令
CMD ["/bin/sh","run.sh"]

編寫run.sh


vim run.sh


python3 manage.py runserver 0.0.0.0:8000

Docker構建鏡像


# docker build -t 鏡像名:鏡像版本 Dockerfile所在路徑
sudo docker build -t djdemo:3.2.5 .
docker images

構建完成后,可以看到生成一個新鏡像。

此時后臺啟動鏡像,并把容器8000端口映射到物理機的8008端口。


docker run -d -p 8008:8000 --name=django1 djdemo:3.2.5

注意:在云服務器上找到安全組,并在入方向,開放上述的端口,例如:8008。

回到頂部

Docker-Compose容器編排

基本介紹

使用一個Dockerfile模板文件,可以很方便的定義一個適合自己使用的自定義鏡像。但在工作中經常會碰到需要多個容器相互配合來完成某項任務或運行某個項目的情況。例如要運行一個django項目,除了django容器本身,往往還需要再加上后端的數據庫服務容器,甚至還包括負載均衡容器等,此時我們就需要使用到Docker-Compose了。

注意:

Docker-Compose僅僅用于批量操作docker容器不能用于podman的,對于podman的容器批量操作則需要安裝podman-compose來批量操作。

當然,podman-compose和docker-compose的使用和語法是一樣的。

Docker-Compose項目是Docker官方的開源項目,負責實現對Docker容器集群的快速編排。Docker-Compose項目由Python編寫,調用Docker服務提供的API來對容器進行管理和編排。因此只要所操作的平臺支持Docker API,就可以在其上利用Docker-Compose來進行Docker容器的編排和管理。

Docker-Compose將所管理的Docker容器分為三層,分別是工程(project),服務(service)以及容器(container)。

Docker-Compose允許我們開發者通過一個單獨的docker-compose.yml配置文件(YAML 格式)來定義一組相關聯的docker容器為一個工程(project)。一個工程至少有一個服務,一個服務下至少有一個容器。

Docker-Compose運行指定目錄下的所有關聯文件組成一個工程(工程名默認為當前目錄名)。一個工程當中可包含多個服務,每個服務中可以定義Docker容器運行的鏡像,參數,環境依賴等信息。

Docker-Compose的工程配置文件默認為docker-compose.yml,也可以通過-f 參數來指定成其他的配置文件名。

安裝與卸載

安裝環境查看


uname -a
lsb_release -a # CentOS: yum install redhat-lsb

安裝地址:https://docs.docker.com/compose/install/

發布地址:https://github.com/docker/compose/releases


# 下載docker-compose的python二進制執行腳本程序
sudo curl -L "https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 給當前docker-compose腳本程序增加執行權限
sudo chmod +x /usr/local/bin/docker-compose
# 生成一個硬連接,作為全局命令
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

查看安裝的版本


docker-compose version

卸載


sudo rm /usr/local/bin/docker-compose
sudo rm /usr/bin/docker-compose

常用命令

基本命令格式


docker-compose [-f ...] [options] [COMMAND] [ARGS...]

命令選項如下


-f --file FILE指定Compose模板文件,默認為當前目錄下docker-compose.yml
# -p --project-name NAME 指定項目名稱,默認使用當前所在目錄為項目名
# --verbose 輸出更多調試信息
# -v,-version 打印版本并退出
# --log-level LEVEL 定義日志等級(DEBUG, INFO, WARNING, ERROR, CRITICAL)

docker-compose up

根據容器編排配置文件docker-compose.yml,進行編排和啟動容器。相當于docker run的增強版。


docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
選項包括:
-f 指定compose模板文件名
-d 在系統守護進程的方式批量運行服務容器
# 常用寫法:
# docker-compose up # 以占據終端的方式批量啟動docker-compose.yml中配置的所有容器
# docker-compose up -d # 以系統守護進程的方式批量啟動docker-compose.yml中配置的所有容器,不會占據終端
# docker-compose -f docker-compose.yaml up -d

docker-compose down

停止運行并刪除docker-compose.yml配置的容器、網絡、卷。相當于docker stop與docker rm的組合


docker-compose down [options]
選項包括:
-f 指定compose模板文件名
# 常用寫法:
# docker-compose down
# docker-compose -f docker-compose.yml down

docker-compose logs

列出當前工程項目中運行容器過程中的運行日志。相當于docker logs


docker-compose logs [options] [SERVICE...]
選項包括:
-f 跟蹤日志輸出
# 常用寫法:
docker-compose logs # 查看整個docker-compose.yml配置中所有的容器的運行日志,不占據終端
docker-compose logs -f # 監控整個docker-compose.yml配置中所有的容器的運行日志,占據終端

docker-compose stop

停止運行docker-compose.yml配置的容器,可以通過docker-compose start 再次啟動


docker-compose stop [options] [SERVICE...]
選項包括:
-f 指定compose模板文件名
# 常用寫法:
# docker-compose stop
# docker-compose -f docker-compose.yml stop

docker-compose start

啟動運行docker-compose.yml配置的容器,可以通過docker-compose stop 關閉運行。


docker-compose start [SERVICE...]
選項包括:
-f 指定compose模板文件名
# 常用寫法:
# docker-compose stop
# docker-compose -f docker-compose.yml stop

docker-compose ps

列出當前工程項目中的所有服務容器


docker-compose ps [options] [SERVICE...]

docker-compose bulid


docker-compose build [options] [--build-arg key=val...] [SERVICE...]
構建(重新構建)項目中的服務容器。
選項包括:
–compress 通過gzip壓縮構建上下環境
–force-rm 刪除構建過程中的臨時容器
–no-cache 構建鏡像過程中不使用緩存
–pull 始終嘗試通過拉取操作來獲取更新版本的鏡像
-m, –memory MEM為構建的容器設置內存大小
–build-arg key=val為服務設置build-time變量
服務容器一旦構建后,將會帶上一個標記名。可以隨時在項目目錄下運行docker-compose build來重新構建服務

docker-compose pull


docker-compose pull [options] [SERVICE...]
拉取服務依賴的鏡像。
選項包括:
–ignore-pull-failures,忽略拉取鏡像過程中的錯誤
–parallel,多個鏡像同時拉取
–quiet,拉取鏡像過程中不打印進度信息
docker-compose pull
拉取服務依賴的鏡像

docker-compose restart


docker-compose restart [options] [SERVICE...]
重啟項目中的服務。
選項包括:
-t, –timeout TIMEOUT,指定重啟前停止容器的超時(默認為10秒)
docker-compose restart
重啟項目中的服務

docker-compose rm


docker-compose rm [options] [SERVICE...]
刪除所有(停止狀態的)服務容器。
選項包括:
–f, –force,強制直接刪除,包括非停止狀態的容器
-v,刪除容器所掛載的數據卷
docker-compose rm
刪除所有(停止狀態的)服務容器。推薦先執行docker-compose stop命令來停止容器。

docker-compose run


docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
在指定服務上執行一個命令。
docker-compose run ubuntu ping www.baidu.com
在指定容器上執行一個ping命令。

docker-compose scale


docker-compose scale web=3 db=2
設置指定服務運行的容器個數。通過service=num的參數來設置數量

docker-compose pause


docker-compose pause [SERVICE...]
暫停一個服務容器

docker-compose uppause


docker-compose unpause [SERVICE...]
恢復處于暫停狀態中的服務。

docker-compose kill


docker-compose kill [options] [SERVICE...]
通過發送SIGKILL信號來強制停止服務容器。
支持通過-s參數來指定發送的信號,例如通過如下指令發送SIGINT信號:
docker-compose kill -s SIGINT

docker-compose config


docker-compose config [options]
驗證并查看compose文件配置。
選項包括:
–resolve-image-digests 將鏡像標簽標記為摘要
-q, –quiet 只驗證配置,不輸出。 當配置正確時,不輸出任何內容,當文件配置錯誤,輸出錯誤信息
–services 打印服務名,一行一個
–volumes 打印數據卷名,一行一個

docker-compose create


docker-compose create [options] [SERVICE...]
為服務創建容器。
選項包括:
–force-recreate:重新創建容器,即使配置和鏡像沒有改變,不兼容–no-recreate參數
–no-recreate:如果容器已經存在,不需要重新創建,不兼容–force-recreate參數
–no-build:不創建鏡像,即使缺失
–build:創建容器前,生成鏡像

docker-compose exec


docker-compose exec [options] SERVICE COMMAND [ARGS...]
選項包括:
-d 分離模式,后臺運行命令。
–privileged 獲取特權。
–user USER 指定運行的用戶。
-T 禁用分配TTY,默認docker-compose exec分配TTY。
–index=index,當一個服務擁有多個容器時,可通過該參數登陸到該服務下的任何服務,例如:docker-compose exec –index=1 web /bin/bash ,web服務中包含多個容器

docker-compose port


docker-compose port [options] SERVICE PRIVATE_PORT
顯示某個容器端口所映射的公共端口。
選項包括:
–protocol=proto,指定端口協議,TCP(默認值)或者UDP
–index=index,如果同意服務存在多個容器,指定命令對象容器的序號(默認為1)

docker-compose push


docker-compose push [options] [SERVICE...]
推送服務端的鏡像。
選項包括:
–ignore-push-failures 忽略推送鏡像過程中的錯誤

模板配置入門

Compose模板文件是一個定義服務、網絡和邏輯卷的YAML文件。Compose模板文件默認路徑是當前目錄下的docker-compose.yml,可以使用.yml或.yaml作為文件擴展名。 Docker-Compose標準模板文件應該包含version、services、networks 三大部分,最關鍵的是services和networks兩個部分。networks是可選參數。

例如,我們要一次性啟動3個ubuntu容器運行各自不同的配置下。


mkdir -p /home/compose && cd /home/compose
vim docker-compose.yml

docker-compose.yml,代碼:


version: "3.8"
services:
ubuntu1:
image: ubuntu:20.04
container_name: "ubuntu1"
networks:
- dev
ubuntu2:
image: ubuntu:20.04
container_name: "ubuntu2"
networks:
- dev
- pro
ubuntu3:
image: ubuntu:20.04
container_name: "ubuntu3"
networks:
- pro
networks:
dev:
driver: bridge
pro:
driver: bridge

docker-compose.yml,注釋版本,代碼:


# 目前我們使用的基本都是Version3版本,最新版本是3.9。
version: "3.8"
# 聲明接下來開始配置服務容器
services:
# 服務名,開發者自定義的,
ubuntu1:
# image 當前服務容器的基本依賴鏡像,如果本地沒有該鏡像,則會自動從官網pull拉取
# image 也可以是自己本地基于Dockerfile編譯后產生的定制鏡像,但是必須是已經build編譯好的
# 如希望在docker-compose up啟動容器服務時自動編譯Dockerfile,則必須增加配置項build指定Dockerfile
# 文件的所在路徑,如果不指定,則可能出現從官網拉取鏡像失敗的情況,build配置項寫法如下:
# build: .
# 如使用了build配置項時還聲明了image配置項,則基于build所在的Dockerfile編譯的鏡像名為image指定名字。
# build: .
# image: djdemo:1.0.0
image: ubuntu:20.04
# container_name 指定當前服務容器啟動以后的容器名
container_name: "ubuntu1"
# networks 指定網絡,可以分配容器在一個或多個網絡,如果不指定,則默認分配在docker的default網絡中
networks:
- dev
ubuntu2:
image: ubuntu:20.04
container_name: "ubuntu2"
networks:
- dev
- pro
ubuntu3:
image: ubuntu:20.04
container_name: "ubuntu3"
networks:
- pro
# 網絡配置
networks:
# 指定網絡名稱,相當于網卡名
dev:
# driver 網卡驅動:bridge 橋接模式,網卡驅動有三種模式:bridge、host、none
# 查看網絡:docker network ls
driver: bridge
pro:
driver: bridge

完成上面的配置以后,可以通過以下命令,批量創建ubuntu容器。


# 切換目錄
cd /home/compose
# 批量啟動容器
docker-compose up
# 查看當前目錄下的docker-compose.yml配置的容器
docker-compose ps
# 刪除docker-compose.yml配置的容器
docker-compose down
docker-compose up -d
docker-compose ps
docker-compose down

配置項說明

image

image是指定服務的鏡像名稱或鏡像ID。如果鏡像在本地不存在,Compose將會嘗試拉取鏡像。

注意:如果鏡像有版本號,則鏡像名和版本號之間不能出現空格!否則報錯!!!


services:
ubuntu1:
image: ubuntu:20.04

build

服務除了可以基于指定的基礎鏡像,還可以基于一份Dockerfile的自定義鏡像,在使用docker-compose up啟動時執行docker容器的構建任務,構建標簽是build,可以指定Dockerfile所在文件夾的路徑。Compose將會利用Docker自動構建鏡像,然后使用鏡像啟動服務容器。


services:
web:
build: /home/docker # 指定Dockerfile文件的路徑,如果與docker-compose.yml在同一個目錄,則可以使用 . 表示當前目錄

也可以是相對路徑,只要上下文確定就可以讀取到Dockerfile。


services:
web:
build: ../docker

設定上下文根目錄,然后以該目錄為準指定Dockerfile。


services:
web:
build:
context: ../docker
dockerfile: Dockerfile

build都是一個目錄,如果要指定Dockerfile文件需要在build標簽的子級標簽中使用dockerfile標簽指定。 如果同時指定image和build兩個標簽,那么Compose會構建鏡像并且把鏡像命名為image值指定的名字。


services:
web:
image: djdemo:1.0.0
build:
context: /home/docker
dockerfile: Dockerfile


context選項可以是Dockerfile的文件路徑,也可以是到鏈接到git倉庫的url,當提供的值是相對路徑時,被解析為相對于撰寫文件的路徑,此目錄也是發送到Docker守護進程的context
dockerfile選項可以指定context對應目錄下的Dockerfile文件來構建,必須指定構建路徑

command

使用command可以覆蓋容器啟動后默認執行的命令。相當于docker命令的末尾參數。

compose的command會覆蓋Dockerfile里面的CMD的值。


command: shell命令

container_name

Compose的容器名稱格式是:<項目名稱><服務名稱><序號>,相當于docker [選項] --name 可以自定義項目名稱、服務名稱,但如果想完全控制容器的命名,可以使用標簽指定:


container_name: app

restart

指定容器是否在操作系統重啟以后,docker啟動以后,是否容器也自動重啟。相當于docker --restart=always


restart: always

environment

指定服務容器中的環境變量,可以多個環境變量,每個環境變量就一個成員,相當于docker -e


version: '3.7'
services:
mysql:
image: mysql:8.0.26
restart: always
container_name: mysql
networks:
- mysql
environment:
- "MYSQL_ROOT_PASSWORD=root"
- "MYSQL_USER=luffycity"
- "MYSQL_PASSWORD=luffycity"
- "MYSQL_DATABASE=luffycity"
- "TZ=Asia/Shanghai"

depends_on

在使用Compose時,最大的好處就是少打啟動命令,但一般項目中多個容器的啟動,順序是有要求的,如果直接從上到下啟動容器,必然會因為容器依賴問題而啟動失敗。例如在沒啟動數據庫容器的時候啟動應用容器,應用容器會因為找不到數據庫而退出。depends_on標簽用于解決容器的依賴、啟動先后順序的問題


version: '3.7'
services:
django:
build: .
depends_on:
- mysql
- redis
redis:
image: redis:6.0
mysql:
image: mysql:8.0.26

上述YAML文件定義的容器會先啟動redis和db兩個服務,最后才啟動django服務。

ports

ports用于映射端口的標簽。 使用HOST:CONTAINER格式或者只是指定容器的端口,宿主機會隨機映射端口。相當于docker -p


ports:
- "3000" # 等價于 "3000:3000"
- "8000:8000"
- "49100:22"

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

volumes

掛載一個目錄或者一個已存在的數據卷容器,可以直接使用 [HOST:CONTAINER]格式,或者使用[HOSTro]格式,后者對于容器來說,數據卷是只讀的,可以有效保護宿主機的文件系統。 Compose的數據卷指定路徑可以是相對路徑,使用 . 或者 .. 來指定相對目錄。

相當于 docker run 終端命令選項-v參數

數據卷的格式可以是下面多種形式


volumes:
# 只是指定一個路徑,Docker 會自動在創建一個數據卷(這個路徑是容器內部的)。
# 相當于 /var/lib/mysql:/var/lib/mysql
- /var/lib/mysql
# 使用絕對路徑掛載數據卷
- /opt/data:/var/lib/mysql
# 以 Compose 配置文件為中心的相對路徑作為數據卷掛載到容器。
- ./cache:/tmp/cache
# 使用用戶的相對路徑(~/ 表示的目錄是 /home/<用戶目錄>/ 或者 /root/)。
- ~/configs:/etc/configs/:ro
# 已經存在的命名的數據卷。
- datavolume:/var/lib/mysql

如果不使用宿主機的路徑,可以指定一個volume_driver。

volume_driver: mydriver

volumes_from

從另一個服務或容器掛載其數據卷:


volumes_from:
- service_name
- container_name

dns

自定義DNS服務器。可以是一個值,也可以是一個列表。


dns:8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9

expose

暴露端口,但不映射到宿主機,只允許能被連接的服務訪問。僅可以指定內部端口為參數,如下所示:


expose:
- "3000"
- "8000"

links

鏈接到其它服務中的容器。使用服務名稱(同時作為別名),或者“服務名稱:服務別名”(如 SERVICE:ALIAS),例如:


links:
- db
- db:database
- redis

net

設置網絡模式。


net: "bridge"
net: "none"
net: "host"

模板配置編寫案例

在開發中,我們的前端項目經常需要提供給外界瀏覽服務,所以往往我們會使用nginx這樣的web服務器來提供前端文件給外界訪問。所以我們創建并切換到/home/website目錄,創建docker-compose.yml,并編寫配置多個nginx容器批量啟動。


mkdir /home/website && cd /home/website
vim docker-compose.yml

配置代碼:


version: "3.8"
services:
web1:
image: nginx:1.21.4
container_name: "web1"
ports:
- "8081:80"
networks:
- dev
web2:
image: nginx:1.21.4
container_name: "web2"
ports:
- "8082:80"
networks:
- dev
- pro
web3:
image: nginx:1.21.4
container_name: "web3"
ports:
- "8083:80"
networks:
- pro
networks:
dev:
driver: bridge
pro:
driver: bridge

啟動服務容器

使用docker-compose批量啟動容器


# docker-compose up # 阻塞運行
docker-compose up -d # 后臺運行

服務訪問

開放安全組端口以后,可以通過瀏覽器訪問web1,web2,web3。


http://114.115.200.1:8081/
http://114.115.200.1:8082/
http://114.115.200.1:8083/

注意IP要換成自己的,同時,注意添加安全組的入方向規則的端口。

鏈接:https://www.cnblogs.com/hanfe1/p/16965717.html

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鏡像
    +關注

    關注

    0

    文章

    168

    瀏覽量

    10770
  • Docker
    +關注

    關注

    0

    文章

    478

    瀏覽量

    11872

原文標題:Dockerfile鏡像制作 與 Docker-Compose容器編排

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    華為云 Flexus 云服務器 X 實例之 openEuler 系統部署 Docker Compose 管理工具 Dockge

    docker-compose.yaml 部署文件時,Dockge 以其精美的設計和易用性脫穎而出,成為不可或缺的管理工具。利用華為云 Flexus 云服務器 X 實例的強大性能,在 openEuler 系統上部署 Dockge,不僅能夠實現對容器應用的精細控制,更能充
    的頭像 發表于 01-08 11:41 ?74次閱讀
    華為云 Flexus 云服務器 X 實例之 openEuler 系統部署 <b class='flag-5'>Docker</b> <b class='flag-5'>Compose</b> 管理工具 Dockge

    docker通過中間鏡像加速部署

    使用 docker 打包鏡像的時候, 每次耗費時間最多的就是 docker build 的過程. 特別是對于前端工程的打包, 有時候下載依賴包的時間就要 10 幾分鐘, 這就導致發布版本的效率極低.
    的頭像 發表于 01-06 12:39 ?79次閱讀

    在 Huawei Cloud EulerOS 系統中安裝 Docker 的詳細步驟與常見問題解決

    Docker鏡像 ? 6. 配置Docker鏡像加速 ? 6.1 修改daemon.json文件 ? 6.2 再次拉取鏡像 ? 結語 ? 前
    的頭像 發表于 12-26 18:12 ?282次閱讀
    在 Huawei Cloud EulerOS 系統中安裝 <b class='flag-5'>Docker</b> 的詳細步驟與常見問題解決

    docker-compose配置文件內容詳解以及常用命令介紹

    一、Docker Compose 簡介 Docker Compose是一種用于定義和運行多容器Docke
    的頭像 發表于 12-02 09:29 ?673次閱讀
    <b class='flag-5'>docker-compose</b>配置文件內容詳解以及常用命令介紹

    提升DevOps效率,從基礎到進階的Dockerfile編寫技巧

    創建自定義鏡像Dockerfile 由一行行命令語句組成,并且支持以 # 開頭的注釋行。 Docker分為四部分: 基礎鏡像信息 維護者信息
    的頭像 發表于 11-26 09:44 ?104次閱讀
    提升DevOps效率,從基礎到進階的<b class='flag-5'>Dockerfile</b>編寫技巧

    如何在樹莓派上安裝Docker容器

    Pi官網 下載最新版本的Raspberry Pi OS。 使用SD卡寫入工具將鏡像寫入SD卡:可以使用 Etcher 等工具。 將SD卡插入樹莓派并啟動。 2. 更新系統 在安裝Docker之前
    的頭像 發表于 11-11 11:38 ?707次閱讀

    手動構建Docker鏡像的方法

    不推薦使用docker commit命令,而應該使用更靈活、更強大的dockerfile來構建docker鏡像
    的頭像 發表于 08-05 15:30 ?543次閱讀
    手動構建<b class='flag-5'>Docker</b><b class='flag-5'>鏡像</b>的方法

    ARM平臺實現Docker容器技術

    及依賴包到一個可移植的鏡像中,然后發布到任何流行的Linux或Windows機器上,亦可實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。使用Docker,可像管理應用程序一樣管理基礎結構
    發表于 07-25 14:36

    ARM平臺實現Docker容器技術

    也變得十分簡單。此外,Docker團隊同各個開源項目團隊一起維護了一大批高質量的官網鏡像,既可直接在生產環境使用,又可作為基礎進一步定制,大大的降低了應用服務的鏡像制作成本。
    發表于 07-17 11:05

    寶塔面板Docker一鍵安裝:部署GPTAcademic,開發私有GPT學術優化工具

    使用寶塔Docker-compose,5分鐘內在海外服務器上搭建gpt_academic。這篇文章講解如何使用寶塔面板的Docker服務搭建GPT 學術優化 (GPT Academic)。 ? 在
    的頭像 發表于 07-02 11:58 ?2662次閱讀
    寶塔面板<b class='flag-5'>Docker</b>一鍵安裝:部署GPTAcademic,開發私有GPT學術優化工具

    關于Docker 的清理命令集錦

    這篇文章主要介紹了Docker 清理命令集錦,需要的朋友可以參考下 復制代碼代碼如下: docker kill $(docker ps -a -q) ?刪除所有已經停止的容器 復制代碼
    的頭像 發表于 06-13 15:56 ?394次閱讀

    Docker容器實現開機自動啟動策略

    如果你的容器依賴于其他服務(例如數據庫或其他容器),你需要確保這些服務在你的容器啟動之前就已經可用。這可以通過編排工具如Docker
    的頭像 發表于 03-11 10:33 ?2881次閱讀

    ARM平臺實現Docker容器技術

    什么是Docker? (1)Docker的架構 Docker是一個開源的應用容器引擎,讓開發者可打包他們的應用以及依賴包到一個可移植的鏡像
    的頭像 發表于 03-07 13:48 ?821次閱讀
    ARM平臺實現<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技術

    【昉·星光 2 高性能RISC-V單板計算機體驗】為 Ubuntu 安裝 Docker 及常用軟件

    docker sudo apt install docker.io 安裝 docker-compose sudo apt-get install docker-compose
    發表于 02-21 17:54

    RK3568-Docker容器部署方法說明

    RK3568-Docker容器部署方法說明
    的頭像 發表于 01-22 10:12 ?1432次閱讀
    RK3568-<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法說明
    主站蜘蛛池模板: 国产精品欧美精品国产主播| 永久免费在线观看视频| 一级美女片| 天天看天天干天天操| 久久久一本| 色婷婷综合久久久| 国产精品福利午夜在线观看| 在线看3344免费视频| av2014天堂网| 国产欧美精品一区二区色综合| 日本一区三区二区三区四区| 亚洲三级在线免费观看| 久久国产热视频| 在线成人精品国产区免费| 操一操日一日| 免费一级e一片在线播放| 天堂网www| 天天综合网天天做天天受| 99久久99久久久99精品齐| 亚洲午夜网| 一级特黄a 大片免费| 天堂网在线www资源网| 国产黄在线观看免费观看不卡| 免费在线黄网| 视频在线免费看| 窝窝视频成人影院午夜在线| 国产美女作爱全过程免费视频| 五月激情视频| 免费在线观看一区二区| 乱色伦肉小说| 婷婷激情综合五月天| 天堂网a| 性欧美日韩| 亚欧免费视频| 欧美日一级| 久久免费视频99| 77成人| 天天干天天曰天天操| 国产综合在线播放| 91精品久久久久含羞草| 亚洲乱强|