Khi muốn deploy docker app lên một VPS nào đó thì có một vài cách mà các thánh xưa nay hay thực hiện với các chiêu số như là:

  • Commit docker-compose.yml lên trong một cái git nào đó, rồi ssh lên server  -> git clone -> docker-compose pull && docker-compose up -d.  Cái này cũng ổn, chỉ là vấn đề cái git đó thường chứa cả source code của mình trong đó nên nhìn chung sẽ không hay và dễ lộ hàng.
  • Cách nữa là chơi expose cái docker daemon ra public luôn với tls. Cái này mình thấy khá phiền vì với 1 con server mình phải quản lý cả cert của ssh và cert của docker.
  • Một hướng khác là các cloud provider support bạn deploy thông qua các web hook của github, bitbucket...khi nào mình push code lên thì nó sẽ tự động deploy cái app của mình. (Cái này sướng nhất, ai có thì xài nhé)

Còn chiêu mình hay xài khi được các sếp phát cho 1 em server bé tí tí là deploy docker trên ssh. Lý thuyết cách này là docker hỗ trợ việc nói chuyện giữa docker-client và docker-daemon thông qua ssh từ version 18.09

Các bước thực hiện deploy docker khi đang chạy CI trên gitlab hay Jenkins đại loại như sau:

  1. Cho phép kết nối với server qua ssh với cách authen là dùng key id_rsa thay vì dùng password.
  2. Export biến môi trường export DOCKER_HOST=ssh://[email protected]. Tới đây nếu bạn gõ docker system info thì nó sẽ trả về info của môi trường server của mình, chứ không phải cái docker trên CI nhé.
  3. Bây giờ ta chỉ cần thực hiện deploy bằng docker-compose với docker-compose up -d (nhớ pull image nếu xài lại tag cũ).

Thế thôi, tóm lại là docker ngoại trừ support kết nối tới docker daemon không chỉ qua tcp:// hay unix:// socket mà còn cả ssh://. Chúc vui và ít bug  nhé :) .