[Day10] - Docker Compose 设定及操作介绍

在上一篇内容中我们透过 Docker Compose 同时开启了网站服务和资料库。透过简单的操作就可以知道其惊人的方便性。本篇当中我们更细部的介绍 Docker Compose 的参数及设定。

YAML

我们在编写 Docker Compose服务时,是透过docker-compose.yml 档案进行相关设定,那什麽是 .yml档呢?
yml档 指的是 YAML 格式的档案, YAML 的读法为『耶某』。是一种就有高可读性,用於表达资料序列的格式。 YAML的全名为 "YAML Ain't Markup Languoage", 起初的名称为 "Yet Another Markup Language",表示这格式是以数据为中心,不是以标记语言为重点。

YAML档可以使用缩排/区块进行表示,而我们在此处为缩排方式,透过缩排区隔服务。更细部的介绍可以参考 YAML官网及维基百科。

https://yaml.org/
https://zh.wikipedia.org/wiki/YAML

Docker Compose Yaml 介绍

再回头来看看上一篇中的 docker-compose.yml

version: '3'

services:
  app:
    # docker build 的设定
    build:
      context: .
    #port 对应
    ports:
      - "8888:8888"
    #volumes 对应
    volumes:
      - ./app:/app
    #指令
    command: >
      sh -c "python manage.py runserver 0.0.0.0:8888"
      
  db:
    # mysql image 版本
    image: mysql:5.7
    # 是否自动启动
    restart: always
    # 环境变数设定
    environment:
      MYSQL_DATABASE: 'db'
      MYSQL_USER: 'admin'
      MYSQL_PASSWORD: 'admin'
      MYSQL_ROOT_PASSWORD: 12345678
    ports:
      - '3306:3306'

version 定义docker-compose 的版本
service 的区块当中,我们设定我们会用到的服务,其中在这边我们设定为 app 以及 db,并在各自的缩排下进行系度的设定

app 区块

  1. build 为指定 docker build的相关设定,我们设定 context: . 其中 "."的符号代表当前的路径,程序会抓取当前路径的Dockerfile进行 docker build
  2. ports 设定docker 内外部 port 的连结这边的意思是,外部的8888对应的是 docker 的 8888 port
  3. volumes 可以将 docker 外部以及内部的资料夹进行同步,因此当内部有改动时外在外部的夹也可以即时看到,反之若是外部有改动时,内部也可以马上拥有最新的版本,这在开发时是十分方便的设定,让我们改动程序码时,不需要重新一直build改动的程序。在这边的 ./app:/app 意思是把外部的app资料夹,映射到内部的app资料夹。
  4. command 则是设定完参数以及环境之後,执行的指令。在这边我们希望他设定完参数之後就启动server,因此可以直接下达 python manage.py runserver 0.0.0.0:8888

db 区块

  1. image 选择 db想使用的image 档案,系统会将其抓下来并且启动
  2. restart 设定程序开机或是挂掉时是否自动重新启动
  3. environment 则是设定 mysql相关的设定
  4. ports 一样是将外部的port对应到内部

在这边我们列出常用到的,以及本次教学里会用到的设定,Docker Compose 还有更多可以设定的功能,有兴趣可以参考其官网。

https://docs.docker.com/compose/


<<:  每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day8

>>:  Golang 转生到web世界 - gin Middleware中间件

【从实作学习ASP.NET Core】Day09 | 後台 | 图片上传与预览

接续昨天的 Create 页面,今天要完成图片上传和预览的功能 图片上传到资料库的方法据我所知有两种...

html div水平并列

我们昨天写出了标题栏上的一个按钮,今天想要多写几个按钮出来,但是当我们复制了多个but1的div时,...

Day 27 - ios 开发实作(今天还要继续吃吗APP-1、Swift UI Passing data 不同页面传值)

首先我们介绍一下这个APP的功能。 介绍 这个APP主要会有的功能如下: 计算今天吃的东西类型 计算...

[DAY 3] Browser-server model的演进

昨天简单介绍了网路服务的C/S与B/S的差别,今天简单介绍browser-server model的...

DAY24 搞样式--用CSS Gird来搞个万年历吧(上)

前言 今天开始实作的部分,尝试用完全没碰过的CSS Grid要搞出一个万年历,不停的研究不停地开发新...