+34

Docker: Kể từ đó họa mi không lo cài lại ubuntu nữa =))

Chuyện là nếu bạn bị lỗi khi cài đặt môi trường thì lời khuyên của 500 anh em thân thiết sẽ luôn là:

  1. Reset lại máy
  2. Cài lại ubuntu
  3. Mua máy mới

Nhưng nay khác xưa rồi , anh em troll nhau như vậy là không được nhé. Hãy cùng tìm hiểu docker để có cách thứ 0 cho 500 anh em lố mắt nào!!! 😄

1. Phân biệt containers và virtual machines

  • 1. Virtual machines:

Chắc các bạn cũng không lạ gì VMWare hay Virtual Box,... đó là máy ảo giúp bạn deploy ứng dụng trên nhiều hệ điều hành cùng một lúc. Nhưng máy ảo có 2 vấn đề:

  1. Bạn cần phải chia một phần tài nguyên phần cứng của hệ điều hành hiện tại cho hệ điều hành ảo. Điều này sẽ làm tiêu tốn kha khá tài nguyên của hệ điều hành chủ (host system).
  2. Bạn sẽ mất thời gian để khởi động hệ điều hành ảo
  • 2. Containers

Để khắc phục nhược điểm của visualization thì containerlization ra đời. Ở đây, containerlization sẽ không ảo hóa phần cứng mà chỉ ảo hóa môi trường ứng dụng trong các container. Và các container vẫn chạy chung hệ điều hành ở phía dưới, chung kernel, vì vậy không phải chia sẻ tài nguyên phần cứng.

Thuật ngữ "Container" ở đây được hiểu là khái niệm đóng gói. Một Container chứa đầy đủ application và tất các các thành phần phụ thuộc như: các file Bins, các thư viện kèm theo để đảm bảo các ứng dụng có thể chạy độc lập trong container đó. Như vậy mỗi Container ở đây được coi như một "máy ảo" mini.

Nói chung là sử dụng container sẽ cho hiệu năng cao hơn và tiêu tốn ít tài nguyên hơn nên nó được ưa chuộng hơn. Và đây cũng là lý do tại sao bạn nên tìm hiểu và sử dụng Docker ngay và luôn đó 😉

2. Docker là gì?

Docker là một nền tảng để triển khai, đóng gọi và chạy các ứng dụng trong các container. Điều này giúp bạn có thể đóng gói các môi trường lập trình gọn gàng hơn, dễ quản lý hơn. Nhờ vậy bạn dễ dàng kiểm soát từng môi trường lập trình (container) cho mỗi ứng dụng của bạn.

Có một ví dụ rất đơn giản như này:

Nếu coi máy tính của chúng ta lúc mới cài hệ điều hành là một căn phòng trống:

thì sau khi chúng ta cài đặt các app, package,... thì nó sẽ trông như vầy - vô cùng bừa bộn:

Nhưng nếu có Docker thì căn phòng của bạn sẽ không bừa bộn như thế đâu:

Khi đó việc cài đặt, gỡ bỏ cũng như đồng bộ môi trường ứng dụng sẽ dễ dàng hơn, nhất là khi bạn làm việc theo nhóm.

3. Một số khái niệm cần biết

  • Image: là một gói thực thi bao gồm mọi thứ cần thiết để chạy một ứng dụng (code, a runtime, libraries, environment variables, và configuration files).
  • Container: là một instance của image khi image được thực thi.

Bạn sẽ nắm rõ hơn các khái niệm này khi thực hành sử dụng chúng.

4. Hướng dẫn cài đặt

  1. Update package
sudo apt-get update
  1. Cài đặt các gói cho phép apt sử dụng giao thức HTTPS.
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
  1. Thêm docker vào GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  1. Thêm docker vào kho APT source:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  1. Update lại package trên máy:
sudo apt-get update
  1. Cài đặt docker phiên bản mới nhất:
sudo apt-get install docker-ce

Docker CE (Docker Community Edition) là phiên bản miễn phí dành cho cá nhân, hoặc các team nhỏ.
Docker EE (Docker Enterprise Edition) là phiên bản trả phí dành cho các doanh nghiệp được cung cấp thêm một số tính năng hơn.

Kiểm tra phiên bản đã cài đặt, chạy lệnh:

docker -v

Giờ thì chạy thử nào:

sudo docker run hello-world

Nếu kết quả là thì bạn đã cài đặt docker thành công.

5. Demo

Ví dụ, mình muốn chạy một project laravel

  1. Search image cần tìm trên docker hub
sudo docker search <nội dung tìm kiếm>

Ví dụ:

sudo docker search apache-php

Kết quả sẽ là:

Docker Hub là nơi để mọi người upload, chia sẽ các images Docker của mình

  1. Chọn image bạn cần và download

Ở đây mình sẽ download tutum/apache-phpmysql

sudo docker pull tutum/apache-php
docker pull mysql

Kiểm tra image đã pull về bằng lệnh:

docker images
  1. Clone project từ repo về máy: Mình sẽ clone một project laravel về máy:
git clone https://github.com/HaiHaChan/blog.git ~/Documents/blog
  1. Tạo môi trường liên kết với thư mục vừa clone về
docker run -tid -p 9000:80 -v ~/Documents/blog:/var/www/html tutum/apache-php

Trong đó,

  • docker run : lệnh tạo một container cho Docker
  • tham số -v ~/Documents/blog:/var/www/html để liên kết thư mục ~/Documents/blog ở máy tính hiện tại, vào thư mục /var/www/html của container.
  • tham số -p 9000:80 để map dịch vụ mạng port 80 trong container đến port 9000. Bây giờ thì truy cập http://127.0.0.1:9000/ và xem kết quả nào:

6. Một số lệnh docker khác:

  • Liệt kê containers:
    • đang chạy: sudo docker ps
    • tất cả (đang chạy và đã tắt): sudo docker ps -a
  • Khởi động và truy cập một container đã tắt:
docker start <ID hoặc NAME>
docker exec -it <ID hoặc NAME> /bin/bash
  • Dừng một container:
docker stop <ID hoặc NAME>
  • Xóa một container:
docker rm <ID hoặc NAME>

Xóa container đang chạy thì bạn thêm option -f

docker rm -f <ID hoặc NAME>
  • Xóa một image:
docker rmi <ID hoặc NAME>

Xóa image đang chạy thì bạn thêm option -f

docker rmi -f <ID hoặc NAME>

7. Tài liệu tham khảo:

https://docs.docker.com/get-started/

http://namluu.com/backend/lac-hau-neu-chua-su-dung-docker/

https://toidicode.com/cai-dat-docker-385.html

https://viblo.asia/p/docker-va-nhung-kien-thuc-co-ban-YWOZrp075Q0

https://kipalog.com/posts/Toi-da-dung-Docker-nhu-the-nao

https://viblo.asia/p/docker-doi-voi-lap-trinh-vien-web-PDOkqLAKejx

Trên đây là một số nội dung mà mình đã tìm hiểu được. Vì mình mới tìm hiểu nên cũng không tránh khỏi có sai sót. Mong được mọi người góp ý (ahihi)!


All rights reserved

Bình luận

Đăng nhập để bình luận
Avatar
@minhnv
thg 11 21, 2018 1:51 SA

Containerls là gì thế ạ (bow)

Avatar
@HaiHaChan
thg 11 21, 2018 2:56 SA

anh toàn bắt lỗi em thôi 😦
em sửa lại rồi đó

Avatar
@minhduc93
thg 12 8, 2018 1:22 SA

Người yêu minh đó hả.

Avatar
@HaiHaChan
thg 12 9, 2018 9:56 SA

(tat) là chị em tốt ahihi

Avatar
@vuongthai95
thg 11 21, 2018 1:56 SA

bài viết bắt trend tốt ghê

Avatar
@HaiHaChan
thg 11 21, 2018 3:06 SA

ahihi =))

Avatar

Bài viết thật tâm huyết.

Avatar
@HaiHaChan
thg 11 21, 2018 2:56 SA

cảm ơn em nhé =))

Avatar
@phanlyhuynh
thg 11 21, 2018 4:11 SA

bài viết rất hay 😄

Avatar
@HaiHaChan
thg 11 21, 2018 4:27 SA

cảm ơn nha. cái này là học hỏi từ bài của em đó 😉

Avatar
@phanlyhuynh
thg 11 21, 2018 4:28 SA

😍 😘😊😁👍

Avatar
@hulala
thg 11 24, 2018 8:13 SA

tuyệt (y)

Avatar
@HaiHaChan
thg 11 26, 2018 1:26 SA

cảm ơn cậu (h)

Avatar
@XiaoFeng
thg 12 4, 2018 1:21 CH

Gần chạm vào chỗ ngứa của em rồi =)). 1 like!

Xem thêm (2)
Avatar
@XiaoFeng
thg 12 7, 2018 3:09 SA
Avatar
@XiaoFeng
thg 12 7, 2018 3:09 SA

đúng òy đóa :3

Avatar

ai đó triệu hồi ông @cùi bắp vào đây đi 😢 ổng bắt tui cài lại hẳn cả quả Táo 😢 xót ruột

Avatar
@HaiHaChan
thg 2 14, 2019 1:26 SA

=))

Avatar
@ddthanhdat
thg 2 13, 2019 9:49 SA

Nếu dính tới redis thì sao ạ? Nodejs có liên kết với local redis thì sao? 😃

Avatar
+34
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí