Gần đây Docker đang được thảo luận và gây được nhiều chú ý trong cộng đồng công nghệ trên thế giới, với nhiều hứa hẹn trong tương lai. Các hãng công nghệ lớn như Google, Amazon, Microsoft, IBM … đã bắt đầu hỗ trợ Docker trên nền tảng của họ.
Vậy Docker là gì, có gì thú vị ? Bài viết này ghi lại ngắn những hiểu biết của người viết trong quá trình tìm hiểu về Docker, hi vọng sẽ giúp người đọc có một cái nhìn tổng quan về Docker. Cuối cùng sử dụng Docker để đóng gói và chạy một ứng dụng “Hello world !” Scala trên Play framework.
1. Docker là gì
. Định nghĩa
Docker là một nền tảng mở dành cho các lập trình viên, quản trị hệ thống dùng để xây dựng, vận chuyển và chạy các ứng dụng phân tán. Ban đầu viết bằng Python, hiện tại đã chuyển sang Go-lang.
.Các thành phần chính
– Docker Engine : là thành phần chính của Docker, như một công cụ để đóng gói ứng dụng
– Docker Hub : là dịch vụ cloud để chia sẻ ứng dụng và tự động hóa chuỗi các công việc liên tục, có thể thao tác pull/push với các images
. Một số khái niệm
–Docker images : là một “read-only template”. Chẳng hạn, một image chứa hệ điều hành Ubuntu đã cài đặt sẵn Apache và ứng dụng web
– Docker registries : Là kho chứa images. Người dùng có thể tạo ra các images của mình và tải lên đây hoặc tải về các images được chia sẻ
– Docker container : hoạt động giống như một thư mục (directory), chứa tất cả những thứ cần thiết để một ứng dụng có thể chạy được. Mỗi một docker container được tạo ra từ một docker image. Các thao tác với một container : chạy, bật, dừng, di chuyển, và xóa
– Dockerfile : là một file chứa tập hợp các lệnh để Docker có thể đọc và thực hiện để đóng gói một image theo yêu cầu người dùng
– Orchestration : là các công cụ, dịch vụ dùng để điều phối và quản lý nhiều containers sao cho chúng làm việc hiệu quả nhất
2. So sánh Docker với Virtual machine
Điểm khác biệt chính là các containers sử dụng chung kernel với Host OS nên các thao tác bật, tắt rất nhẹ nhàng, nhanh chóng.
. Ưu điểm : nhanh, nhẹ, có thể chia sẻ dễ dàng qua DockerHub
. Nhược điểm : mới, cập nhật thay đổi thường xuyên
3. Sử dụng Docker để đúng gói và chạy ứng dụng “Hello World” dùng Scala trên Play framework
. Cài đặt Docker daemon
Việc cài đặt khá đơn giản, tùy theo OS sẽ có cách cài đặt khác nhau, tham khảo thêm tại đây
Cài trên Ubuntu 14.04 :
sudo apt-get update
apt-get install docker.io
. Viết Dockerfile
Viết Dockerfile để đóng gói 1 image trong đó đã cài đặt Play framework, ứng dụng “Hello world” Scala và môi trường.
FROM ubuntu:14.04
MAINTAINER longlx <longlx@septeni-technology.jp>;
# Create play user, group
RUN groupadd play
RUN useradd play -m -g play -s /bin/bash
RUN passwd -d -u play
RUN echo "play ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/play
RUN chmod 0440 /etc/sudoers.d/play
# Install dependencies
RUN apt-get update
RUN apt-get install -y git build-essential curl
RUN apt-get install -y wget
RUN apt-get install -y zip unzip
# Install play
WORKDIR /tmp
RUN wget http://downloads.typesafe.com/play/2.2.6/play-2.2.6.zip
RUN unzip play-2.2.6.zip
RUN mv play-2.2.6 /home/play/play
# Install jdk, openjdk
RUN apt-get install -y default-jdk openjdk-7-jre
# Expose play framwork port 9000
EXPOSE 9000
CMD cd /home/play/play/samples/scala/helloworld && /home/play/play/play run
. Đóng gói image từ Dockerfile ở trên, chuyển tới thư mục chứa Dockerfile file và chạy lệnh
sudo docker build -t longlx/play-hello
. Bật Docker Container
sudo docker run --rm -it -p 9000:9000 longlx/play-hello
Truy cập http://localhost:9000, điền thông tin và submit form :
. Push image lên DockerHub
sudo docker push longlx/play-hello
. Từ một EC2 chạy ubuntu, chạy lệnh sau để Docker pull longlx/play-hello image từ DockerHub và bật conatianer lên
sudo docker run --rm -it -p 9000:9000 longlx/play-hello
Truy cập http://ec2-public-ip:9000, điền thông tin và submit form :
4. “Use Case” cho môi trường phát triển
Có thể sử dụng docker trong môi trường phát triển phần mềm như mô hình dưới :
. Bước 1 : Lập trình viên sử dụng Docker trên máy local của mình, phát triển và đóng gói thành docker image, đẩy lên DockerHub
. Bước 2 : SQA có thể tải về image trên môi trường test, bật container và thực hiện việc test các tính năng
. Bước 3 : Nếu test thành công, có thể pull image và bật container trên môi trường production. Nếu việc test không thành công, SQA thông báo lại để lập trình viên kiểm tra lại (quay lại Bước 1)
Bài viết ghi lại những hiểu biết của người viết thu nhận được trong quá trình tìm hiểu và sử dụng Docker còn khá cơ bản. Rất mong nhận được góp ý của người đọc.