Hướng dẫn docker-compose mysql 8 - docker-soạn mysql 8

1. Mở đầu

  • Xin chào các bạn, sau khi đi qua hai phần đầu của series:

    //hub.docker.com/_/mysql/
    
    8, chúng ta đã tìm hiểu
    //hub.docker.com/_/mysql/
    
    9 là gì và sử dụng chúng như thế nào.

  • Hôm nay chúng ta sẽ tiếp tục tìm hiểu

    version: '3.5'
    
    0 - một công cụ
    version: '3.5'
    
    1 các
    version: '3.5'
    
    2 lại và làm cho chúng có thể
    version: '3.5'
    
    3 với nhau.

2. Bài toán

Câu chuyện đặt ra là:

version: '3.5'
4

  • Dự án

    version: '3.5'
    
    5

  • Hoặc dự án

    version: '3.5'
    
    6

version: '3.5'
7

  • Qua tìm hiểu ở hai phần đầu của series, chúng ta hoàn toàn có thể sử dụng

    version: '3.5'
    
    8

  • Cài đặt tất cả những môi trường cần thiết [như mysql, redis, php,... ] lên một container

    version: '3.5'
    
    9

  • Rồi chạy project trên container đó.

services:
    mysql:
        ...
        ...
        ...
    app:
        ...
        ...
        ...
0

  • Nếu như bạn muốn dùng kết hợp nhiều

    services:
        mysql:
            ...
            ...
            ...
        app:
            ...
            ...
            ...
    
    1 trên DockerHub thì sao ?

  • Nếu một cơ sở dữ liệu

    services:
        mysql:
            ...
            ...
            ...
        app:
            ...
            ...
            ...
    
    2 cho nhiều project thì sẽ xử lý thế nào ?

  • Hơn nữa, với tư duy của OOP, 1 class thì không nên

    services:
        mysql:
            ...
            ...
            ...
        app:
            ...
            ...
            ...
    
    3.

services:
    mysql:
        ...
        ...
        ...
    app:
        ...
        ...
        ...
4

  • Khi đó, chúng ta sẽ xây dựng nhiều container, khi nào cần tương tác với database thì gọi tới
    services:
        mysql:
            ...
            ...
            ...
        app:
            ...
            ...
            ...
    
    5 chẳng hạn, tương tác với redis thì gọi tới
    services:
        mysql:
            ...
            ...
            ...
        app:
            ...
            ...
            ...
    
    6, cần cái gì thì gọi tới container làm nhiệm vụ đó.

  • Cùng nhìn hình ảnh con
    services:
        mysql:
            ...
            ...
            ...
        app:
            ...
            ...
            ...
    
    7 đại diện cho
    version: '3.5'
    
    0 [mình đoán thế] đang dùng các xúc tu để cuộn các container lên kìa.

services:
    mysql:
        ...
        ...
        ...
    app:
        ...
        ...
        ...
9

  • À quên, bài viết sử dụng Rails framework [một framework của Ruby dùng để lập trình web] để ứng dụng Docker, còn với các framework của

    mysql:
        image: mysql:5.7
        container_name: mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: root
        volumes:
          - docker/database:/var/lib/mysql
    
    0 hay
    mysql:
        image: mysql:5.7
        container_name: mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: root
        volumes:
          - docker/database:/var/lib/mysql
    
    1 thì mình sẽ tìm cách làm tương tự nha.

  • Quan trọng là mình hiểu cách sử dụng

    version: '3.5'
    
    0, nếu có điều kiện, mình sẽ tìm hiểu và viết thêm bài hướng dẫn sử dụng Docker trên Laravel hoặc các framework khác.

  • Các bạn cũng có thể skip để chuyển sang Docker: Chưa biết gì đến biết dùng [ Phần 4 - Một số trick tối ưu và lưu ý ]

mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - docker/database:/var/lib/mysql
3

3. Cài đặt Docker-compose

Tham khảo trên trang chủ nào, trên

mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - docker/database:/var/lib/mysql
4 thì sẽ như sau:

  • mysql:
        image: mysql:5.7
        container_name: mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: root
        volumes:
          - docker/database:/var/lib/mysql
    
    5 Run this command to download the latest version of Docker Compose.
sudo curl -L "//github.com/docker/compose/releases/download/1.22.0/docker-compose-$[uname -s]-$[uname -m]" -o /usr/local/bin/docker-compose
  • mysql:
        image: mysql:5.7
        container_name: mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: root
        volumes:
          - docker/database:/var/lib/mysql
    
    6 Apply executable permissions to the binary
sudo chmod +x /usr/local/bin/docker-compose
  • mysql:
        image: mysql:5.7
        container_name: mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: root
        volumes:
          - docker/database:/var/lib/mysql
    
    7 Test the installation
docker-compose --version

-> Đây là phiên bản đang cài đặt trên máy tính của mình:

docker-compose version 1.23.1, build b02f1306

mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - docker/database:/var/lib/mysql
8

4. Cấu trúc thư mục

mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - docker/database:/var/lib/mysql
9

  • Khá là hay ho khi trên trang chủ Docker đã có bài hướng dẫn Docker for Rails.

  • Thông thường, mình thấy tham khảo trên trang chủ cũng khá là đủ rồi

  • Nhưng cũng hơi bất ngờ khi trong thực tế làm dự án, anh em trong team nhận thấy vẫn còn một số điểm

    # Ignore data backup
    docker/database
    
    0

  • Nên sau đây chúng ta cùng tìm hiểu cách

    # Ignore data backup
    docker/database
    
    1 dựa vào bài hướng dẫn trên và đống thời
    # Ignore data backup
    docker/database
    
    2 hơn nhé ! Nếu các bạn nhận thấy phần nào có thể làm tốt hơn thì mời comment bên dưới nha.

# Ignore data backup
docker/database
3

Bao gồm 3 file sau:

  • # Ignore data backup
    docker/database
    
    4:

    Liệt kê những câu lệnh cần chạy sau khi bật container.

  • # Ignore data backup
    docker/database
    
    5

    Về công dụng của nó thì chắc hẳn các bạn còn nhớ chúng ta đã đề cập ở bài trước:

  • # Ignore data backup
    docker/database
    
    6:

    Dùng để

    # Ignore data backup
    docker/database
    
    7 và
    # Ignore data backup
    docker/database
    
    8 hoạt động của các
    version: '3.5'
    
    2 trong project.

5. Xác định các container cần thiết

Ở mức cơ bản nhất, chúng ta sẽ xây dựng 2 container:

app:
    container_name: app
    build: .
    volumes:
      - .:/my_app
    ports:
      - "3000:3000"
    environment:
      DATABASE_HOST: mysql
      DATABASE_USER_NAME: root
      DATABASE_PASSWORD: root
0

  • Hiện nay, phần lớn các dự án có lẽ hay sử dụng

    app:
        container_name: app
        build: .
        volumes:
          - .:/my_app
        ports:
          - "3000:3000"
        environment:
          DATABASE_HOST: mysql
          DATABASE_USER_NAME: root
          DATABASE_PASSWORD: root
    
    1, để gần gũi và quen thuộc với mọi người nên mình sẽ dùng cơ sở dữ liệu mysql.

  • Còn nếu hịn hò hơn thì bạn có thể tìm hiểu và sử dụng

    app:
        container_name: app
        build: .
        volumes:
          - .:/my_app
        ports:
          - "3000:3000"
        environment:
          DATABASE_HOST: mysql
          DATABASE_USER_NAME: root
          DATABASE_PASSWORD: root
    
    2 nhé

  • Teachnical leader của dự án mình cũng khuyến khích sài công cụ này, và google một hồi thì có vẻ như nó có nhiều ưu điểm hơn thật, ví dụ như lưu trữ với kiểu dữ liệu array hay gán giá trị mặc định với kiểu dữ liệu

    app:
        container_name: app
        build: .
        volumes:
          - .:/my_app
        ports:
          - "3000:3000"
        environment:
          DATABASE_HOST: mysql
          DATABASE_USER_NAME: root
          DATABASE_PASSWORD: root
    
    3 ...

  • Quay trở lại vấn đề chính nào, quan sát:

    //hub.docker.com/_/mysql/
    

    Chúng ta sẽ thấy tên organization là

    app:
        container_name: app
        build: .
        volumes:
          - .:/my_app
        ports:
          - "3000:3000"
        environment:
          DATABASE_HOST: mysql
          DATABASE_USER_NAME: root
          DATABASE_PASSWORD: root
    
    4 và bên dưới tên image có dòng chữ
    app:
        container_name: app
        build: .
        volumes:
          - .:/my_app
        ports:
          - "3000:3000"
        environment:
          DATABASE_HOST: mysql
          DATABASE_USER_NAME: root
          DATABASE_PASSWORD: root
    
    5

    Đây chính là những

    app:
        container_name: app
        build: .
        volumes:
          - .:/my_app
        ports:
          - "3000:3000"
        environment:
          DATABASE_HOST: mysql
          DATABASE_USER_NAME: root
          DATABASE_PASSWORD: root
    
    6 được Docker cung cấp, chúng ta sẽ yên tâm hơn khi sử dụng, và khuyến cáo luôn là nên sử dụng [Hàng chính hãng, ít có khả năng gặp bug hơn hoặc chèn mã độc]

    Trên DockerHub còn rất nhiều image khác dành cho mysql, ví dụ bitnami/mysql

    Đây là những image do các cá nhân, tổ chức khác xây dựng, có thể sẽ có những cải tiến so với bản official nhưng độ tin cậy và chính xác thì khó mà bằng bản chuẩn được.

app:
    container_name: app
    build: .
    volumes:
      - .:/my_app
    ports:
      - "3000:3000"
    environment:
      DATABASE_HOST: mysql
      DATABASE_USER_NAME: root
      DATABASE_PASSWORD: root
7

  • Có thể có bạn chưa rõ, ta có PHP là một ngôn ngữ lập trình, Laravel là một PHP framework, dùng để lập trình web.

  • Thì tương tự như vậy, Ruby cũng là một ngôn ngữ lập trình, Rails là một Ruby framework dùng để lập trình web.

  • Lát nữa chúng ta dùng image ruby này để tạo

    version: '3.5'
    
    2 cho
    app:
        container_name: app
        build: .
        volumes:
          - .:/my_app
        ports:
          - "3000:3000"
        environment:
          DATABASE_HOST: mysql
          DATABASE_USER_NAME: root
          DATABASE_PASSWORD: root
    
    9 nhé !

sudo chmod +x /usr/local/bin/docker-compose
00

6. Viết docker-compose

Chúng ta sẽ viết

sudo chmod +x /usr/local/bin/docker-compose
01 trước để có cái nhìn tổng quan về các services trong project nhé

  • Phiên bản của
    version: '3.5'
    
    0
version: '3.5'
  • Liệt kê các services
services:
    mysql:
        ...
        ...
        ...
    app:
        ...
        ...
        ...
  • Cài đặt cho từng services
mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - docker/database:/var/lib/mysql

☑ image: Chỉ định

sudo chmod +x /usr/local/bin/docker-compose
03 để khởi động
version: '3.5'
2, ở đây ta dùng image có sẵn như đã nói ở mục 4.

☑ container_name: Chỉ định tên container tùy chỉnh, thay vì tên mặc định.

☑ restart: Giá trị mặc định là

sudo chmod +x /usr/local/bin/docker-compose
05, còn nếu bạn đặt là
sudo chmod +x /usr/local/bin/docker-compose
06 thì container sẽ khởi động lại nếu mã thoát cho biết lỗi không thành công.

☑ environment: Thêm các biến môi trường

☑ volumes: Chia sẻ dữ liệu giữa container [máy ảo] và host [máy thật] hoặc giữa các container với nhau.

Ví dụ:

  • Khi
    services:
        mysql:
            ...
            ...
            ...
        app:
            ...
            ...
            ...
    
    5 tạo và lưu dữ liệu thì dữ liệu này sẽ lưu ở trong thư mục
    sudo chmod +x /usr/local/bin/docker-compose
    
    08 của container. Như vậy nếu như container này bị xóa đi thì chúng ta sẽ
    sudo chmod +x /usr/local/bin/docker-compose
    
    09

  • Ôi buồn quá -_- Làm gì bây giờ ?

  • Giải pháp là chúng ta sẽ

    sudo chmod +x /usr/local/bin/docker-compose
    
    10 dữ liệu đó ra ngoài máy host, như vậy khi container bị xóa, dữ liệu sẽ vẫn được lưu trữ ở máy host. Và ở khi bật lại container, dữ liệu lại được mount từ máy host vào trong container và chúng ta tiếp tục sử dụng nó bình thường.

  • Thư mục lưu trữ data ở ngoài máy host sẽ không được

    sudo chmod +x /usr/local/bin/docker-compose
    
    11 vào git, ta đưa nó vào gitignore.

    # Ignore data backup
    docker/database
    
  • Ở một số hướng dẫn có lưu dữ liệu backup vào trong thư mục mà framework đã

    sudo chmod +x /usr/local/bin/docker-compose
    
    12 sẵn, ví dụ như đối với
    sudo chmod +x /usr/local/bin/docker-compose
    
    13 là
    sudo chmod +x /usr/local/bin/docker-compose
    
    14 hoặc lưu ở ngoài thư mục dự án thì không cần
    sudo chmod +x /usr/local/bin/docker-compose
    
    12 nó nữa.

app:
    container_name: app
    build: .
    volumes:
      - .:/my_app
    ports:
      - "3000:3000"
    environment:
      DATABASE_HOST: mysql
      DATABASE_USER_NAME: root
      DATABASE_PASSWORD: root

☑ build: Sử dụng khi chúng ta không xây dựng

version: '3.5'
2 từ
sudo chmod +x /usr/local/bin/docker-compose
03 có sẵn nữa mà xây dựng nó từ
version: '3.5'
8.

  • Nếu
    version: '3.5'
    
    8 nằm cùng thư mục với
    sudo chmod +x /usr/local/bin/docker-compose
    
    01 thì chỉ cần
sudo chmod +x /usr/local/bin/docker-compose
0
  • Nếu bạn muốn đặt
    version: '3.5'
    
    8 trong thư mục
    sudo chmod +x /usr/local/bin/docker-compose
    
    22 để cùng với
    sudo chmod +x /usr/local/bin/docker-compose
    
    23 cho gọn thì sửa thành
sudo chmod +x /usr/local/bin/docker-compose
1

☑ ports: Cấu hình cổng kết nối

Có thể chỉ định cả 2 cổng [HOST:CONTAINER] tức là [cổng ở máy thật: cổng ở máy ảo] hoặc chỉ định mình cổng cho máy ảo thôi.

Ví dụ:

sudo chmod +x /usr/local/bin/docker-compose
24 Khi bạn truy cập vào cổng
sudo chmod +x /usr/local/bin/docker-compose
25 ở máy thật thì sẽ được trỏ tới truy cập ở cổng
sudo chmod +x /usr/local/bin/docker-compose
26 của máy ảo.

☑ environment: Bổ sung các biến môi trường.

Lưu ý rằng

sudo chmod +x /usr/local/bin/docker-compose
27 chính là tên của service mysql.

Mình đã push code lên Github.

7. Viết Dockerfile

-> Bây giờ ta sẽ viết

version: '3.5'
8 cho container
sudo chmod +x /usr/local/bin/docker-compose
29 trên kia nhé, chỗ mà
sudo chmod +x /usr/local/bin/docker-compose
30 ấy.

  • Image cơ sở

    sudo chmod +x /usr/local/bin/docker-compose
    
    2
  • Đánh dấu lãnh thổ chút

    sudo chmod +x /usr/local/bin/docker-compose
    
    3
  • Cặt đặt các phần mềm cần thiết cho máy ảo

    sudo chmod +x /usr/local/bin/docker-compose
    
    4
  • Set timezone cho máy ảo [Optional]

    sudo chmod +x /usr/local/bin/docker-compose
    
    5
  • Chỉ định thư mục làm việc mặc định [Optional]

    sudo chmod +x /usr/local/bin/docker-compose
    
    6
  • Cài đặt framework cần thiết cho dự án

    sudo chmod +x /usr/local/bin/docker-compose
    
    7
  • Copy tất cả dữ liệu tự máy host vào trong container

    sudo chmod +x /usr/local/bin/docker-compose
    
    8
  • Cấu hình file

    sudo chmod +x /usr/local/bin/docker-compose
    
    23

    sudo chmod +x /usr/local/bin/docker-compose
    
    9
  • Thiết lập câu lệnh mặc định sẽ chạy khi khởi động

    version: '3.5'
    
    2

    docker-compose --version
    
    0

-> Mình có push code mẫu lên Github

8. Viết entrypoint.sh

-> Chạy

sudo chmod +x /usr/local/bin/docker-compose
33 với bash chứ ko phải là sh hay zsh

docker-compose --version
1

-> Xóa tiến trình cũ

docker-compose --version
2
  • Mỗi khi khởi chạy

    sudo chmod +x /usr/local/bin/docker-compose
    
    34 sẽ có một mã
    sudo chmod +x /usr/local/bin/docker-compose
    
    35 được sinh ra và lưu vào file
    sudo chmod +x /usr/local/bin/docker-compose
    
    36 để đánh dấu rằng đã tồn tại tiến trình rails đang chạy.

  • Khi bạn stop

    sudo chmod +x /usr/local/bin/docker-compose
    
    34 thì rails sẽ xóa nội dung file này, tuy nhiên trong trường hợp bạn
    sudo chmod +x /usr/local/bin/docker-compose
    
    38 thì rails server sẽ bị stop mà chưa kịp xóa nội dung file, và khi bạn start lại server thì sẽ gặp lỗi

    docker-compose --version
    
    3
  • Như vậy, ta sẽ xóa thủ công nó luôn để đảm bảo không gặp lỗi này, gọi là chặn từ lúc trứng nước.

-> Thực thi câu lệnh truyền vào.

docker-compose --version
4

Mình có push code mẫu lên Github

9. Sử dụng docker-compose

9.1 Trường hợp tạo dự án mới

sudo chmod +x /usr/local/bin/docker-compose
39

  • Chạy câu lệnh sau để initialize project, khi đó các file, folder sẽ tự động được sinh ra:
    docker-compose --version
    
    5

sudo chmod +x /usr/local/bin/docker-compose
40

  • Khi đó, chúng ta sẽ không cài Rails vào máy thật nữa.

  • Hãy run một

    version: '3.5'
    
    2 đã cài
    sudo chmod +x /usr/local/bin/docker-compose
    
    13 lên và chạy câu lệnh trên bên trong
    version: '3.5'
    
    2 đó, rồi mount các file, folder của framework được vừa được tạo ra ngoài máy host.

  • Ở đây, container đó chính là container

    sudo chmod +x /usr/local/bin/docker-compose
    
    29 mà ta vừa xây dựng ở trên.

  • Cú pháp để chạy một câu lệnh bên trong

    version: '3.5'
    
    2 như sau:

    docker-compose --version
    
    6

    Như vậy, bạn hãy chạy:

    docker-compose --version
    
    7

  • Việc này sẽ mấy chút thời gian, trong quá trình chờ đợi thì bạn nên theo dõi log ở Terminal để xem các bước Docker thực hiện như thế nào nhé !

sudo chmod +x /usr/local/bin/docker-compose
46

  • Nếu bạn cài Rails trực tiếp trên máy thật thì đã có sẵn phiên bản của Ruby [ngôn ngữ lập trình] và Rails [framework của ngôn ngữ] rồi, ví dụ:

    docker-compose --version
    
    8

    Còn như ở Dockerfile phía trên, chúng ta mới chỉ có

    sudo chmod +x /usr/local/bin/docker-compose
    
    2

    chứ chưa cài đặt Rails.

  • Thứ hai là khi build image, ở step

    docker-compose version 1.23.1, build b02f1306
    
    0

    có nghĩa là copy Gemfile từ máy host vào container thì chúng ta chưa có file này ở máy host:

    Như thế sẽ gặp lỗi:

    sudo chmod +x /usr/local/bin/docker-compose
    
    47

  • Vậy nên, chúng ta tạo thêm 2 file: Gemfile và Gemfile.lock

    Gemfile:

    docker-compose version 1.23.1, build b02f1306
    
    1

    Gemfile.lock

    docker-compose version 1.23.1, build b02f1306
    
    2

  • Rồi sau đó hẵng chạy lại câu lệnh

    docker-compose --version
    
    7
  • Mình đã push code mẫu lên Github rồi nhé, bởi vì đây là config thư viện của Rails nên không giới thiệu chung với các config của Docker.

sudo chmod +x /usr/local/bin/docker-compose
48

  • Có thể bạn đã biết, mặc định thì docker chạy với
    sudo chmod +x /usr/local/bin/docker-compose
    
    49 nên những file, folder nó tạo ra [sau khi
    sudo chmod +x /usr/local/bin/docker-compose
    
    50 từ
    version: '3.5'
    
    2 ra máy
    sudo chmod +x /usr/local/bin/docker-compose
    
    52] cũng ở quyền
    sudo chmod +x /usr/local/bin/docker-compose
    
    53.

  • Vậy nên khi bạn dùng editor để

    sudo chmod +x /usr/local/bin/docker-compose
    
    54 những file này thì
    sudo chmod +x /usr/local/bin/docker-compose
    
    55 sẽ thông báo.

    docker-compose version 1.23.1, build b02f1306
    
    4
  • Giải pháp thì set lại quyền cho nó thôi

    docker-compose version 1.23.1, build b02f1306
    
    5

sudo chmod +x /usr/local/bin/docker-compose
56

  • Đối với
    sudo chmod +x /usr/local/bin/docker-compose
    
    57 thì config này nằm ở file
    sudo chmod +x /usr/local/bin/docker-compose
    
    58

Sửa từ

docker-compose version 1.23.1, build b02f1306
6

thành

docker-compose version 1.23.1, build b02f1306
7
  • Xong xuôi thì bạn chuyển qua mục 10.2 được rồi.

9.2 Trường hợp cho dự án đang phát triển

sudo chmod +x /usr/local/bin/docker-compose
59

  • Chỉnh sửa file
    sudo chmod +x /usr/local/bin/docker-compose
    
    60 cho phù hợp nếu cần [ví dụ với Rails: config/database.yml ]

sudo chmod +x /usr/local/bin/docker-compose
61

  • Cú pháp

    docker-compose version 1.23.1, build b02f1306
    
    8
  • Nếu gặp lỗi này

    docker-compose version 1.23.1, build b02f1306
    
    9

    Do một số file trong thư mục

    sudo chmod +x /usr/local/bin/docker-compose
    
    62 cần quyền
    sudo chmod +x /usr/local/bin/docker-compose
    
    53 để truy cập, hãy đổi thành

    //hub.docker.com/_/mysql/
    
    0

sudo chmod +x /usr/local/bin/docker-compose
64

  • Cú pháp

    //hub.docker.com/_/mysql/
    
    1

    Nếu gặp lỗi này

Do một số file trong thư mục

sudo chmod +x /usr/local/bin/docker-compose
62 cần quyền
sudo chmod +x /usr/local/bin/docker-compose
53 để truy cập, hãy đổi thành

//hub.docker.com/_/mysql/
2

Màn hình log:

sudo chmod +x /usr/local/bin/docker-compose
65

  • Òa, log bắn ra ầm ầm, kệ nó đi, bạn vào địa chỉ :

    và tận hưởng thành quả nào:

    Tạo cơ sở dữ liệu

    //hub.docker.com/_/mysql/
    
    3

    Với mỗi framework sẽ có cách khác nhau để tạo

    sudo chmod +x /usr/local/bin/docker-compose
    
    66.

    docker-compose --version
    
    6

    Còn đối với rails, nếu ở máy thật, bạn cần gõ 2 câu lệnh sau để tạo database:

    //hub.docker.com/_/mysql/
    
    5

  • Còn bây giờ, chúng ta hãy truy cập vào máy ảo để chạy câu lệnh này, bằng cách

  • Và ở đây, ta cần:

    • Truy cập vào
      sudo chmod +x /usr/local/bin/docker-compose
      
      67 nào
    //hub.docker.com/_/mysql/
    
    6
  • Lưu ý

    Nếu vừa rồi bạn ấn

    sudo chmod +x /usr/local/bin/docker-compose
    
    68 để dừng
    sudo chmod +x /usr/local/bin/docker-compose
    
    69 thì khi chạy câu lệnh tạo cơ sở dữ liệu sẽ gặp lỗi

Vì sao ?

  • Nhìn vào log trên ta sẽ thấy
  1. Tức là

    sudo chmod +x /usr/local/bin/docker-compose
    
    70 đã bị dừng lại, vậy nên
    sudo chmod +x /usr/local/bin/docker-compose
    
    71 của chúng ta không thể kết nối tới
    sudo chmod +x /usr/local/bin/docker-compose
    
    72.

  2. Để giải quyết điều này thì có nhiều cách:

    //hub.docker.com/_/mysql/
    
    7
  3. Đơn giản nhất là bạn giữ nguyên tab đang chạy

    sudo chmod +x /usr/local/bin/docker-compose
    
    69 và mở thêm tab để chạy migrate data.

    Dùng option

    sudo chmod +x /usr/local/bin/docker-compose
    
    74

  4. Thay đổi cách khởi động các

    version: '3.5'
    
    2 thủ công

    Bài cũng đã dài, chúng ta sẽ tìm hiểu cách 3 ở phần 4 nhé, đây cũng là cách khuyến khích sử dụng.

  • Thay đổi cách khởi động các
    version: '3.5'
    
    2 bằng
    sudo chmod +x /usr/local/bin/docker-compose
    
    77
  • Cách này không khuyến khích [Cũng sẽ giải thích ở phần 4 luôn]
  • Cũng đủ kiến thức cơ bản về
    version: '3.5'
    
    0 rồi
  • Nếu bạn gặp lỗi hoặc bị vướng ở đoạn nào chưa hiểu thì hãy để lại bình luận bên dưới, mình sẽ support nếu có thể nhé !

Code mẫu cho phần core config mình đã push lên đây.

Bài Viết Liên Quan

Chủ Đề