Cập nhật nội dung chi tiết về “Đùa Nghịch” Với Docker Trong 5 Phút mới nhất trên website Honggaitour.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất.
Đọc xong bài này được gì?
Đọc xong bài này có thể các bạn sẽ không được gì cả, cũng có thể là sẽ được rất nhiều, quan trọng vẫn là ở các bạn!
Hy vọng các bạn có những kiến thức cơ bản để tiếp tục tìm hiểu sâu hơn về Docker.
Một số khái niệm cơ bản
Docker là gì?
Định nghĩa cũng tràn lan trên mạng rồi nên tôi cũng không cần phải copy lại chi cho mệt ha. Giờ tôi sẽ giải thích một cách đơn giản và dân dã nhất để cho ai cũng có thể hiểu được!
Đầu tiên cùng tưởng tượng rằng bạn và đồng nghiệp của mình đang cùng làm việc trên cùng một dự án. Một ngày đẹp trời đồng nghiệp của bạn bỗng nhiên chạy source code để debug nhưng kết quả lại khác với kết quả trên máy của bạn khi chạy với cùng dữ liệu như nhau.
Vậy câu hỏi đặt ra là nguyên nhân do đâu?
Có thể có một số nguyên nhân ví dụ như hệ điều hành của bạn và đồng nghiệp không giống nhau, verison của library trên máy bạn và trên máy của đồng nghiệp khác nhau, etc.
Docker sinh ra để giải quyết những vấn đề giống giống vậy. Hiểu một cách đơn giản, Docker container có thể được coi như là một cái “máy tính” nằm bên trong cái máy tính của bạn. Điều hay ho là bạn có thể gửi cái “máy tính” đó cho bạn bè, đồng nghiệp của mình để họ có thể bật nó lên và chạy code mà kết quả sẽ giống y hệt với kết quả mà bạn thấy trên máy của mình.
Tóm lại, Docker giúp cho bạn gói gém tất cả môi trường máy tính của bạn, tạo thành một “image” và mang nó chạy trên một máy tính khác một cách dễ dàng. Image khi được chạy lên thì tạo nên một instance của image đó và nó được gọi là “container”. Image và Container chính là hai từ khoá quan trọng mà bạn phải nhớ trong xuyên suốt bài viết này, cũng như trong quá trình làm việc với Docker.
Docker compose là gì?
Docker-compose là một công cụ để định nghĩa và chạy những Docker container. Một trong những trường hợp cụ thể mà bạn cần sử dụng tới Docker-compose đó là khi bạn muốn giả lập một môi trường giống hệt môi trường thực tế của ứng dụng ví dụ như kết nối database, gọi cache server hay những service khác, etc. Một trường hợp khác nữa mà tôi có thể kể tới ví dụ như các bạn muốn thực hiện automation testing cho hệ thống của mình, và đảm bảo rằng mọi thứ được thực hiện tách biệt với những môi trường khác từ server, database, cache, etc.
Chuẩn bị
Để tiến hành “đùa nghịch” thì các bạn nhớ chuẩn bị sẵn những công cụ sau đây.
Hướng dẫn cài đặt mấy thứ này thì cũng tràn lan trên mạng và thời gian cài đặt sẽ từ khoảng 5 đến 15 phút tuỳ trình độ cũng như tốc độ mạng của các bạn!
Setup ứng dụng NodeJS cơ bản
Đầu tiên là tiền đâu, à không, đầu tiên là setup một ứng dụng NodeJS đơn giản sử dụng MongoDB, lại một lần nữa, mấy cái hướng dẫn này cũng tràn lan trên mạng luôn.
Và để cho các bạn có thể thoả sức nghịch Docker thì tôi làm sẵn luôn một ứng dụng NodeJS cơ bản. Các bạn có thể checkout code như sau.
git clone https://github.com/codeaholicguy/nodejs-mongodb-docker-example.git
Giới thiệu sơ qua thì đây là RESTful API lưu danh bạ gồm 2 endpoint chính là hàm POST để lưu danh bạ và hàm GET để lấy danh bạ (như hình). Các bạn có thể nghịch thêm gì tuỳ ý.
À quên, các bạn có thể config mongo url bằng cách thêm environment variable MONGO_URL hay dùng file .env đã được setup sẵn.
Build docker image của ứng dụng NodeJS vừa được setup
Đây mới là phần chính của bài viết nè!
Để tạo một Docker image, chúng ta cần tạo một file gọi là Dockerfile ngay tại thư mục root của project.
$ docker build -t awesome-app .
Như vậy, các bạn đã có một Docker image cho source code hiện tại, và các bạn cũng có thể chạy thử image bằng lệnh
$ docker run awesome-app
Viết file docker-compose.yml
Các bạn tạo file docker-compose.yml, file này sẽ chứa thông tin của môi trường Docker.
Trong file này chúng ta định nghĩa hai Docker.
app: đây chính là ứng dụng NodeJS của chúng ta.
mongo: chính là database MongoDB map với port như định nghĩa.
Mặc định app sẽ gọi mongo bằng cách sử dụng tên của service, như các bạn có thể thấy env MONGO_URL chúng ta sử dụng mongo cho phần hostname.
Sau khi các bạn đã có file chúng tôi các bạn có thể chạy nó lên bằng lệnh sau.
$ docker-compose up
Lưu trữ dữ liệu
Với setup như trên, mỗi lần xoá mongo image và re-build lại thì dữ liệu trước đó sẽ mất hết, bởi vì dữ liệu được lưu trữ trong mongo container. Vậy làm sao để dữ liệu được giữ nguyên?
Để làm chuyện này, chúng ta sử dụng một kĩ thuật gọi là volume, để làm cho storage của container sẽ trỏ về một thư mục trên máy tính thật. Để làm chuyện này thì cũng khá đơn giản thôi. Các bạn chỉnh sửa file docker-compose.yml như sau.
Như các bạn có thể thấy, chúng ta thêm volumes vào và map nó với thư mục /data/db trong mongo container. Vậy thực sự thư mục dữ liệu này nằm ở đâu?
Các bạn chạy lệnh sau.
$ docker inspect -f ‘{{ .Mounts }}’ ${container_id} [{volume nodejs-mongodb-docker-example_mongo_data /var/lib/docker/volumes/nodejs-mongodb-docker-example_mongo_data/_data /data/db local rw true }]
Trong đó container_id chính là id của mongo container, các bạn có thể lấy nó thông qua lệnh docker ps. Kết quả trả về các bạn có thể thấy có ba thành phần, phần đầu tiên chính là volume name, phần thứ hai chính là đường dẫn thực tế, phần thứ ba chính là mapping trên docker container file system. Cụ thể hơn các bạn có thể xem document của Docker về phần này.
Đọc xong bài viết này liệu có được tăng lương hay đậu phỏng vấn không?
Bài viết này đã giới thiệu cho các bạn về:
Docker
Docker-compose
Cách lưu trữ dữ liệu khi dùng Docker
Đây chính là tất cả những thứ đơn giản nhất (những thức phức tạp còn nhiều vô số kể) để thực hiện việc Dockerize ứng dụng của các bạn và sử dụng docker-compose để chạy môi trường của ứng dụng chỉ bằng một lệnh duy nhất, cũng như việc lưu trữ lại dữ liệu ngay cả khi container bị xoá.
Source code dùng trong bài viết:
Bạn đang đọc nội dung bài viết “Đùa Nghịch” Với Docker Trong 5 Phút trên website Honggaitour.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!