Yêu cầu thg 5 10, 2019 6:14 SA 155 0 1
  • 155 0 1
0

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

Chia sẻ
  • 155 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 CÂU TRẢ LỜI


Đã trả lời thg 5 10, 2019 6:30 SA
Đã được chấp nhận
+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
Chia sẻ
Avatar No Naem @Naem
thg 5 10, 2019 6:35 SA

@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 :-?

Avatar No Naem @Naem
thg 5 10, 2019 6:38 SA

@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
thg 5 13, 2019 2:07 SA

@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
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí