Asked May 10th, 6:14 AM 97 0 1
  • 97 0 1
0

Chuyển volumnes_from từ docker-compose ver 2 sang ver 3.

Share
  • 97 0 1

Mọi người giúp em với ạ. Theo Docker-compose từ ver 3 trở lên sẽ ko hỗ trợ options volumes_from trong file yml nữa, vậy có thể thay thế nó như thế nào nhỉ :-?

Ví dụ đoạn sau có thể thay thế ntn nhỉ :-?

version: '2'

services:
    application:
        container_name: project_application
        image: debian
        volumes:
            - ./backend:/var/www/project/backend
    workspace:
        container_name: project_workspace
        restart: always
        build:
            context: .
            dockerfile: ./docker/workspace/build/Dockerfile
        volumes_from:
            - application
        tty: true

1 ANSWERS


Answered May 10th, 6:30 AM
Accepted
+1

Nếu muốn share data giữa các services bạn khai báo volumes ở top-level, như sau:

version: '3'

volumes:
    backend:

services:
    ...

Bây giờ muốn dùng nó ở services thì bạn mount qua volumes trong service. Ví dụ:

version: '3'

volumes:
    backend:

services:
    application:
        container_name: project_application
        image: debian
        volumes:
            - backend:/var/www/project/backend
    workspace:
        container_name: project_workspace
        restart: always
        build:
            context: .
            dockerfile: ./docker/workspace/build/Dockerfile
        volumes:
            - backend:/var/www/project/backend
        tty: true
Share
No Naem @Naem
May 10th, 6:35 AM

@huukimit Trong volumes ở trên cùng kia có phải option gì nữa ko để nó nhận ra được mình đã mount thư mục ./backend của mình vào trong container :-?

0
| Reply
Share
No Naem @Naem
May 10th, 6:38 AM

@huukimit mình đọc docs thấy nó mount ntn để dùng ko biết có đúng ko =))

volumes:
   - type: bind
       name: backend
       source: ./backend
+1
| Reply
Share
May 13th, 2:07 AM

@Naem Sorry bạn vì giờ mình mới kịp check notification.

Bạn define như kia thì bị sai syntax rồi ý. Mình đoán có vẻ bạn đang muốn share source code hoặc một phần dữ liệu nào đó bạn đang để cùng thư mục source. Mình suggest bạn thay đổi như sau có lẽ sẽ hợp lý hơn trong trường hợp này.

  1. Nếu muốn share source code, dữ liệu này không bị ảnh hưởng từ phía người dùng. Bạn chỉ cần tạo một biến trỏ tới environment là đường dẫn tới folder source code, rồi dùng nó khi khai báo volume là được. VD:
version: '3'

services:
    application:
        container_name: project_application
        image: debian
        volumes:
            - ${BACKEND_PATH}:/var/www/project/backend
    workspace:
        container_name: project_workspace
        restart: always
        build:
            context: .
            dockerfile: ./docker/workspace/build/Dockerfile
        volumes:
            - ${BACKEND_PATH}:/var/www/project/backend
        tty: true
  1. Nếu dữ liệu bạn muốn share giữa các service là dạng data do người dùng tạo ra, upload lên. Thí dụ, ảnh hay tài liệu được người dùng upload lên, được bạn chỉ định lưu vào trong folder storage/app/uploads. Thay vì bạn đặt folder kia trong cùng folder chứa source code, rồi mount cả folder source code vào container. Thì bạn tạo một volume rồi mount volume vào folder storage/app/uploads trong service handle việc lưu ảnh. Ở các service khác, muốn dùng dữ liệu này cho mục đích khác thì bạn mount volume này vào thôi. VD:
volumes:
    upload-data:

services:
    application:
        container_name: project_application
        image: debian
        volumes:
            - backend:/var/www/project/backend
            - upload-data:/var/www/project/backend/storage/app/uploads
    workspace:
        container_name: project_workspace
        restart: always
        build:
            context: .
            dockerfile: ./docker/workspace/build/Dockerfile
        volumes:
            - upload-data:/data
        tty: true
+1
| Reply
Share