Phiên bản mới nhất của hình ảnh docker mysql chính thức cho phép bạn nhập dữ liệu khi khởi động. Đây là docker-compo.yml của tôi
data:
build: docker/data/.
mysql:
image: mysql
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: 1234
volumes:
- ./docker/data:/docker-entrypoint-initdb.d
volumes_from:
- data
Ở đây, tôi có data-dump.sql của mình trong docker/data
liên quan đến thư mục mà trình soạn thảo-docker đang chạy từ đó. Tôi đang gắn tệp sql đó vào thư mục này /docker-entrypoint-initdb.d
trên vùng chứa.
Nếu bạn muốn xem cách này hoạt động như thế nào, hãy xem docker-entrypoint.sh
trong GitHub. Họ đã thêm khối này để cho phép nhập dữ liệu
echo
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*.sql) echo "$0: running $f"; "${mysql[@]}" < "$f" && echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done
Một lưu ý bổ sung, nếu bạn muốn dữ liệu được duy trì ngay cả sau khi vùng chứa mysql bị dừng và bị xóa, bạn cần có một vùng chứa dữ liệu riêng biệt như bạn thấy trong docker -omp.yml. Nội dung của Dockerfile vùng chứa dữ liệu rất đơn giản.
FROM n3ziniuka5/ubuntu-oracle-jdk:14.04-JDK8
VOLUME /var/lib/mysql
CMD ["true"]
Vùng chứa dữ liệu thậm chí không cần phải ở trạng thái bắt đầu để tồn tại lâu dài.