Cách Export Images Docker để đẩy lên Server mới đối với Wordpress
Ví dụ cụ thể, bạn cần trích xuất 2 images trong file docker compose như sau:
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
volumes:
- wordpress:/var/www/html
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_RANDOM_ROOT_PASSWORD: ${MYSQL_RANDOM_ROOT_PASSWORD}
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
Như vậy bạn sẽ có 2 images cần trích xuất đó là wordpress và mysql:8.0 thành các tệp .tar để đẩy vào các môi trường mới.
Xác định tên images đang chạy
Lưu ý là hướng dẫn này sẽ có ích nếu bạn xây dựng một môi trường Wordpress bằng Docker từ đầu, sau đó bốc nó sang các hệ thống hạ tầng khác nhé, còn việc containerize 1 bản Wordpress từ local sẽ không nằm trong Scope của mục này
docker-compose ps
Export các thành phần Images ra dạng file .Tar
Một điểm hay của Docker đó là mỗi 1 Images sẽ là trạng thái của phần mềm (có thể coi như 1 ổ đĩa trong thời gian đó đí), ta đang thực hiện Export 2 đĩa đó để ghép lên môi trường khác chạy tiếp. Kết quả của 2 lệnh dưới đây sẽ đẩy ra 2 file .tar tại Directory mà ta chọn (Tôi hiện đang dùng Windows - thao tác với Linux cũng tương tự thôi)
docker save -o wordpress_image.tar wordpress
docker save -o mysql_image.tar mysql:8.0
Load lại Images trên môi trường mới
docker load -i wordpress_image.tar
docker load -i mysql_image.tar
Sau khi Load mới thì coi như trên dữ liệu của Docker đã có 2 Images và có tình trạng y hệt như lúc ta cóp từ bên máy chủ cũ sang, lúc này bạn chỉ cần đưa file docker-compose phía trên và bấm cho nó chạy là BOOM - Một web Wordpress đã được Deploy về cổng hoàn thiện trong chớp mắt
Ánh xạ cổng đó lên tên miền
Cái này thì tùy vào công nghệ và giải pháp anh em lựa chọn, Nam thì hay sử dụng Open lite speed vì ... quen, đây là hướng dẫn setup nhé
Mở rộng một chút, cách Export Images đối với các môi trường Golang, Postgres thì sao?
Cơ bản, cách thức thực hiện cũng tương tự như đối với Wordpress, ta cũng vào môi trường chạy Docker compose, xác định các Images liên quan và tải Images về máy cần chuyển server, sau đó tiến hành bê nguyên file Zip chứa cả ứng dụng lẫn CSDL (Kèm ảnh luôn) để Load Images đó và File Zip tại môi trường mới, lúc này dữ liệu vẫn được giữ nguyên xi để chạy trong máy mới, quá trình chuyển Server trở nên vô cùng nhanh chóng và dễ dàng bởi đã giảm được quá trình thiết đặt môi trường phức tạp.
version: '3'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_USER: môi trường chạy Postgres
POSTGRES_PASSWORD: môi trường chạy Postgres
POSTGRES_DB: demo_backend
volumes:
- ./demo_backend.sql:/docker-entrypoint-initdb.d/demo_backend.sql
- ./demo_backend-data:/var/lib/postgresql/data
ports:
- "5435:5432"
networks:
- my-network
app:
build: .
restart: always
environment:
DATABASE_URL: postgres://Database:Tài khoản@db:5432/betoho_backend?sslmode=disable
volumes:
- ./public:/app/public
ports:
- "8085:80"
depends_on:
- db
networks:
- my-network
networks:
my-network:
volumes:
app-data:
Như ở cách thiết lập Docker Compose chạy Golang, Postgres của Nam thì phần Database luôn được lưu vào thư mục vật lý demo_backend-data, khi đã có đủ Images tương tự như môi trường gốc, phần dữ liệu của postgres sẽ căn cứ vào đó và đẩy dữ liệu ra.