I. Có thể sử dụng docker khi nào?
- Tách biệt các cài đặt cho từng ứng dụng, không gây ảnh hưởng lẫn nhau.
- Xây dựng môi trường làm việc mà không quá tốn nhiều thời gian cho việc cài đặt.
- Đồng nhất môi trường phát triển
- Đóng gói môi trường thực thi một cách nhỏ gọn kèm theo cho dự án
II. Cài đặt:
Docker có hỗ trợ trên Linux, Windows, Ubuntu. Ở bài viết này, mình sẽ cài đặt trên môi trường Windows 10. Các môi trường khác cũng đơn giản như cài đặt các phần mềm khác. Hướng dẫn chi tiết tại. https://docs.docker.com/engine/installation/ .
Để cài đặt trên windows, thực hiện các bước sau:
- Tải và cài đặt phần mềm Docker: https://github.com/docker/toolbox/releases/download/v1.12.5/DockerToolbox-1.12.5.exe
- Sau khi cài đặt Docker xong sẽ hiện ra 2 ứng dụng: Docker Quickstart Terminal (dùng lệnh) và Kitematic(dùng giao diện). Ở phạm vi bài viết này mình dùng Docker Quickstrart Terminal để có thể đối chiều qua khi cài đặt trên linux.
- Mở Docker Quickstart Terminal ở lần đầu tiên thì Docker sẽ tạo 1 máy áo ở Virtualbox với tên default (chú ý: đừng xóa nó đi nhé). Đồng thời IP public là 192.168.99.100 (nhớ IP này nhé)
Ghi chú: Ngoài màn hình Terminal của docker, có thể sử dụng cmd, Gitbash … để sử dụng lệnh của docker. Tuy nhiên có thể gặp lỗi này “An error occurred trying to connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/images/json: open //./pipe/docker_engine: The system cannot find the file specified.”
Có thể sửa lỗi này bằng cách trước khi mỗi lần mở cmd/Gitbash, dùng lệnh docker-machine env . Sau đó copy dòng cuối cùng của kết quả lệnh trên và thực thi.
III. Docker gồm những gì?
Registry => Images => Container
Registry (Docker Hub) là server trung tâm nơi chứa các images original, hoặc các bản images đã được cài đặt chỉnh sửa theo nhu cầu riêng biệt.
Images: là OS, một ứng dụng đã được cài đặt và đóng gói. Image chỉ có quyền đọc.
Container là bản thực thể của một image, được clone ra từ image, mọi người sẽ sử dụng và làm việc trên container là chính
Registry (Docker Hub) nằm ở server internet, còn images và container nằm ở máy người dùng.
IV. Các lệnh cơ bản thường dùng:
1. Hiển thị danh sách các images :
.png” alt=”” width=”806″ height=”163″ />docker images
2. Tải image về local
docker pull <name_image:tag>
(phần :tag là options, nếu để trống thì mặc định download bản latest )
Ví dụ: docker pull ubuntu => download ubuntu latest
docker pull ubuntu:14.04 => download ubuntu version 14.04
Truy cập trang https://hub.docker.com/ , nơi lưu trữ các images tập trung để tìm images cần dùng.
3. Chạy một image
docker run –name <tên_container> -v <thư mục trên máy tính>:<thư mục trong container> -p<port_máy tính>:<port_container> <image name> bash
Ví dụ: docker run –name eva_nginx -p 80:80 -d nginx
- docker run : lệnh chạy của docker
- –name: đặt tên cho container ở đây là eva_nginx . Name này là duy nhất, không thể tạo trùng, nếu không đặt thì docker tự genate.
- -p mở port container ra ngoài IP public 192.168.99.100
- -d bật chế độ chạy background
- nginx: tên images
4. Liệt kê các container
docker ps -a (liệt kê tất cả các container)
docker ps ( chỉ liệt kê các container đang chạy background)
5. Dừng container đang chạy
docker stop <container_id hoặc name_container>
docker stop $(docker ps –a –q) (Dừng tất cả các docker đang dùng)
6. Khởi động lại container đã dừng
docker start <container_id hoặc name_container>
7. Xóa container không còn sử dụng
docker rm <container_id hoặc name_container>
docker rm $(docker ps -a -q) (Xóa tất cả các docker)
8. Truy cập vào 1 container đang chạy
docker exec -it <container_id hoặc name_container> bash
9. Export bản container
docker export <container_id hoặc name_container> | gzip > file_export.tar.gz
10. Import container => image
zcat file_export.tar.gz | docker <new_name_image>Sau khi chạy xong. Chạy lệnh docker images để kiểm tra lại trong danh sách list images.
Ngoài ra còn nhiều lệnh khác. Sử dụng lệnh docker -h để xem chi tiết.
V. Ví dụ cài đặt môi trường phát triển Ruby on rails (Rails) và database MySQL
Các bước thực hiện:
1. Tải images rails và mysql. Nếu trong list images đã có rồi thì có thể bỏ qua bước này.
docker pull rails
docker pull mysql
2. Khởi động
Cách chạy mỗi images có các options khác nhau. Các bạn có thể truy cập https://hub.docker.com/ lựa chọn đúng bản image để xem chi tiết nhé.
Khởi động mysql
docker run –name eva_mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql
(ở đây có option MYSQL_ROOT_PASSWORD đặt mật định cho tài khoản root)
Đã khởi động xong mysql. Tiếp theo khởi động rails có liên kết với mysql. Ở đây mình sync (-v “$PWD”:/my_app) thư mục hiện tại trên máy tính với thư mục /my_app trong container.
docker run -it –name eva_rails -v “$PWD”:/my_app –link eva_mysql:mysql -p 3000:3000 rails bash
Bước tiếp theo, mình cấu hình lại file cấu hình của framework Rails trong file database.yml theo thông số :
host: 192.168.99.100
port: 3306
username: root
password: root
Như thế mình đã setup xong cơ bản môi trường phát triển rails + mysql. Chúng ta có thể chạy ứng dụng thông qua địa chỉ IP 192.168.99.100:3000.