Chuyển volumnes_from từ docker-compose ver 2 sang ver 3.
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
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
@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 :-?
@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
@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.
- 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
- 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 folderstorage/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