Skip to content
youhoc
  • Pages
    • Home
    • Modern App Guidelines
    • Linux
      • Day 1: Linux Distributions & Navigation
      • Day 2: User Management
      • Day 3: File Permission & Ownership
      • Day 4: Package Management
      • Day 5: Services Management
    • Javascript
      • JS The Weird Part
        • Execution Context
        • Types & Operators
        • Objects & Functions
        • Error Handling & Strict Mode
        • Typescript, ES6, Tra
      • Modern JS
        • JS in the Browser
        • Data Storage JSON
        • Modern JS
        • Advanced Objects & Methods
        • Webpack & Babel
        • Async
      • jQuery
        • In-depth Analysis of jQuery
      • React-ready JS
        • Arrow Function
        • Template Literals
        • Logical AND, OR, Ternary, Nullish Operators
        • Destructuring & Rest Operator
        • Array Method
        • Immutability and Spread Operator
        • Promises, Async/Await, Callback
    • PHP
      • gruntJS
      • composer
      • MySQL
    • Docker
      • Container Basics
      • Container Networking
      • Container Image
      • Container Volume & Persistent Data
      • Dockerfile
      • icon picker
        Docker Compose
      • Docker Registry
    • Node.js
      • 1. Installing & Exploring
      • 2. Core Modules
      • 3. Get User Input
      • File System & Input Arguments
      • 5. Express Web Server
      • 6. Deploy to Heroku & Github
      • Authentication
      • 7. Databases
      • 8. Rest API
    • ReactJS
      • React from Andrew
        • Summary from Next
        • 1. Basics
        • 2. React Components
        • 3. Webpack
        • 4. Styling with SCSS
        • 5. React Router
        • 6. React Hook
      • Modern React From The Beginning
        • Intro to JSX
        • Vite Build Tools
        • Basic Component Creation
        • Component State
        • Props & Component Composition
        • useState with Inputs & Form Submission
        • useEffect, useRef & Local Storage
        • Async / Await and Http Request in React
        • React Router: Declarative Mode
        • ContextAPI
        • React Router: Framework Mode
          • File-routing & HTML Layouts
          • Server-side Data Query
          • Links & Navigation
          • Loaders
    • Typescript
      • Type User vs UserProp
    • Payload CMS

Docker Compose

Introduction

Docker Compose is a tool for defining and running multi-container applications. It is the key to unlocking a streamlined and efficient development and deployment experience.
1 Dockerfile → 1 Image Build
Docker Run → Run 1 Container with ENTRYPOINT & CMD
Docker Compose → Run multiple containers with 1 YAML-formatted file
containers
networks
volume

Installation

Template

“Docker-compose.yml” has versions: 1,2,3...

Jekull Template

Wordpress Template

Ghost Template

Secrets in Compose

Bởi vì trong Compose có rất nhiều biến môi trường, nên lưu trữ Secrets là điều cần thiết, nhất là khi cần phải sử dụng với Github.

Commands

# build, run all containers
docker compose up

# stop and remove all containers
docker compose down

# remove all images as well
docker compose down -rmi

# list all container is compose
docker compose ps

Default Nginx + Apache Template

Use Compose to build Custom Nginx Image + Apache with HTML code

Nginx Config
This nginx.conf configures Nginx as a reverse proxy. Here’s what it does:
Listens on port 80.
For all requests (location /), it forwards (proxies) them to a backend service named web (which is apache).
It sets several headers to preserve the original client information (Host, X-Real-IP, X-Forwarded-For, X-Forwarded-Host).
Disables automatic proxy redirects.
Compared to the default config in the official Nginx image:
The default config serves static files from /usr/share/nginx/html and does not proxy requests.
The default does not set up any proxy headers or backend forwarding.
In summary: This config turns Nginx into a reverse proxy for a backend service, while the default config just serves static files.

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.