Chuyển đến nội dung chính

[Docker] Docker cho người mới

Docker là nền tảng phần mềm cho phép bạn dựng, kiểm thử và triển khai ứng dụng một cách nhanh chóng. Docker đóng gói phần mềm vào các đơn vị tiêu chuẩn hóa được gọi là container có mọi thứ mà phần mềm cần để chạy, trong đó có thư viện, công cụ hệ thống, mã và thời gian chạy. Bằng cách sử dụng Docker, bạn có thể nhanh chóng triển khai và thay đổi quy mô ứng dụng vào bất kỳ môi trường nào và biết chắc rằng mã của bạn sẽ chạy được.

Cài đặt nhanh môi trường cho ubuntu :
*********************************
=============docker-for ubuntu==============================
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo docker run hello-world
=============docker-compose==============================
sudo curl -L --fail https://github.com/AppTower/docker-compose/releases/download/latest/run.sh -o /usr/local/bin/docker-compose

docker-compose --version

===============
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
=============portainer - Quan ly docker==============================
sudo docker volume create portainer_data
sudo docker run -d -p 9000:9000 -p 9443:9443 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    portainer/portainer-ce:latest
*********************************




Trươc tiên bạn phải cài đặt docker trên máy tính
ví dụ mình đang cần cài trên máy linux

$ sudo curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh ./get-docker.sh && rm get-docker.sh  
sudo curl  -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ sudo curl -L --fail https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-darwin-aarch64 -o /usr/local/bin/docker-compose

sudo curl -L --fail https://github.com/docker/compose/releases/download/v2.11.2/run.sh -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose



Tạo ứng dụng web đơn giản trên máy , và thực hiện chạy docker

Step 1: Setup

1. Tạo thư mục cho project

$ mkdir composetest
$ cd composetest

2. Tạo file app.py trong thư mục project với nội dung sau

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
    count = redis.incr('hits')
    return 'Hello World! I have been seen {} times.\n'.format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

3. Tạo 1 file requirements.txt trong project directory với nội dung sau

flask
redis

Khai báo các application’s dependencies.

Step 2: Tạo Dockerfile

Trong bước này chúng ta tiến hành viết Dockerfile để build ra Docker image. Image này chứa toàn bộ các dependencies mà app Python require, bao gồm cả chính Python.

Trong thư mục project, tạo file name: Dockerfile và paste nội dung sau vào:

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

Chúng ta có thể hiểu đơn giản thành các bước sau:

  • Build một image từ image Python 3.4 có sẵn trên Docker hub.
  • Thêm thư mục hiện tại . vào thư mục /code bên trong image.
  • Thiết lập thư mục làm việc với Docker thành /code.
  • Install các Python dependencies.
  • Set default command của container là python app.py

Step 3: Khai báo các services bên trong Compose file

Create một file tên là docker-compose.yml trong thư mục project với nội dung sau:

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: "redis:alpine"

Compose file khai báo 2 services, web & redis:

  • Sử dụng image được build từ Dockerfile trong thư mục project.
  • Forwards the exposed port 5000 của container sang port 5000 trên host machine.
  • Mounts thư mục project trên host sang /code bên trong container, cho phép bạn chỉnh sửa code mà ko cần rebuild image.

Redis service thì sử dụng public Redis image trên Docker Hub registry.

Step 4: Build và run Ứng dụng với Compose

1. Start ứng dụng từ thư mục project

$ docker-compose up
 Pulling image redis...
 Building web...
 Starting composetest_redis_1...
 Starting composetest_web_1...
 redis_1 | [8] 02 Jan 18:43:35.576 # Server started, Redis version 2.8.3
 web_1   |  * Running on http://0.0.0.0:5000/
 web_1   |  * Restarting with stat

Compose kéo Redis image về host và tiến hành build một image cho code, sau đó start services bạn đã khai báo.

2. Vào địa chỉ http://0.0.0.0:5000/ trên trình duyệt sẽ thấy ứng dụng đang chạy

Step 5: Update the application

Như đã đề cập trong step 3, application code đã được mount vào trong container volume, chính vì thế lập trình viên có thể chỉnh sửa code và thấy sự thay đổi này diễn ra tức thì mà không cần rebuild the image.

1. Sửa code file app.py và save lại

return 'Hello from Docker! I have been seen {} times.\n'.format(count)

2. Refresh lại page và mọi thứ đã được cập nhật (dance2)

Step 6: Một vài câu lệnh thông dụng trong Docker compose

Nếu bạn muộn khởi chạy các services bên trong background, hãy thêm flag -d (for “detached” mode) vào lệnh docker-compose up và sử dụng lệnh docker-compose ps để thẩy những gì đang chạy trên host:

$ docker-compose up -d
Starting composetest_redis_1...
Starting composetest_web_1...

$ docker-compose ps
Name                 Command            State       Ports
-------------------------------------------------------------------
composetest_redis_1   /usr/local/bin/run         Up
composetest_web_1     /bin/sh -c python app.py   Up      5000->5000/tcp

Câu lệnh docker-compose run cho phép ta chạy 1 lần nhiều câu lệnh cho các services. Ví dụ để thấy các environment variables trên web service:

$ docker-compose run web env

Dùng docker-compose --help để xem các câu lệnh có sẵn khác.

Nếu bạn started Compose với docker-compose up -d bạn có thể sẽ cần stop các services, khi đó hãy dùng lệnh:

$ docker-compose stop

Bạn có thể xóa tất cả các container. Truyền vào --volumes để remove data volume được dùng bởi Redis container:

$ docker-compose down --volumes

Tới đây, chắc hẳn là việc sử dụng Docker compose đã quá dễ dàng rồi 

Source code sử dụng trong bài :

https://github.com/txq92/docker_begin.git



NOTE :
Lệnh buid image : 

docker build -t myimage .
Run docker :
docker run -d --name=myevncpc --restart=always -p 8899:8899 evncpc



Tham khảo :

https://viblo.asia/

https://docs.docker.com/compose/install/


Nhận xét

Bài đăng phổ biến từ blog này

[HA] Cài đặt armbian trên tivi box để chạy home assistant tháng 10/2020

Hướng đẫn cài armbian mới nhất "Việc cài có thê gây hỏng tivi box , tự chịu trách nhiệm cho việc mình làm "  Bạn không cần xem nữa nếu mua sản phẩm cài sẵn tại đây .(.) https://shopee.vn/vipk31?smtt=0.0.9 Chuẩn bị : +  Tivi box x96 mini (hoặc loại khác có sử dụng chip Amolic S905W) + Thẻ nhớ 32GB + File img armbian (https://yadi.sk/d/_rQgn_FosYuW0g/20.09) + Dây nối máy tính với box (cứu box khi cài vào emmc bị hỏng box ) Step 1 : Flash file image vào thẻ nhớ + Dùng phần mềm (https://www.balena.io/etcher/) để thực hiện flash vào thẻ nhớ Quá trình flash rất nhanh khoảng 5 phút là xong Step 2 : Mở thẻ nhớ đã flash xong  Thực hiện config để box nhận thẻ nhớ và vào armbian file cần chỉnh sửa : extlinux.conf Chú ý chọn đúng file dbt cùng với loại box  ********************************************************************************************************************************* Pay attention. Starting from version  20.08 (20200814) , the configuration order for the u...

[HA] API tính điện tiêu thụ hằng ngày evncpc miền trung cho home assistant

Thông tin được lấy từ nguồn dữ liệu tại trang  https://cskh.cpc.vn/  với user/pass các bạn cung cấp . Chúng tôi chỉ lấy thông tin này và chuyển đổi dạng để phù hợp sử dụng trên Home Assistant . Chúng tôi sẽ không chiụ trách nhiệm về độ chính xác của dữ liệu này Sử dụng Rest sensor bạn cần kết nối internet , đôi khi do đường truyền / hoặc trang web EVN bị lỗi sẽ không lấy được data. Update : 2020.07.01 EVN không cho truy cập trang web từ ip nước ngoài nên api này cài trên web nước ngoài sẽ không hoạt động nữa. Ae nào cần code chạy local thì inbox Dạo này lướt face thấy mọi người  ai cũng bảo sao điện tăng nhiều vậy , có ngừoi nghi ngờ EVN ghi gian dối số điện . Mình không làm ở EVN nên không biết có gian dối thật không nhưng EVn hiện tại đo chữ số điện từ xa , 1 ngày đo khoảng 2 -3 lần , như vậy khách hàng sẽ quản lý được ngày tiêu thụ bao nhiêu kwh .cuối tháng có thể dối chiếu xem đúng không . Hình ảnh của EVn cung cấp do hằng ngày số kwh Dựa vào thông tin EVN cung cấp tr...

[HA] Lấy chỉ số đo điện từ công tơ điện lực miễn phí

Note: cái này đang hương dẫn cho điện lực miền trung , các miền khác chắc cũng tương tự  EVN không cho truy cập từ IP nước ngoài Anh em xem các cách khác trong blog để lấy thông tin điện lực add vào home assistant bài mới đơn giản hơn : https://vnhass.blogspot.com/2020/06/ha-api-tinh-ien-tieu-thu-hang-ngay.html?fbclid=IwAR10n1hURu1Gs4mjeAHG6RYukbdcLt-KpZB3J7GpUKhzGfjHQK4M4pOZjOI Đây là bài viết hướng dẫn lấy chỉ số điện thời gian thực từ công tơ của điện lực để đưa vào HA Sẽ có 2 cách lấy Cách 1 : lấy từ website , cách này đơn giản nhưng phụ thuộc vào bên thứ 3 . cách này dễ ai cũng thực hiện được Cách 2 : Debug app của điện lực , lấy api và token cách này phức tạp , cần nhiều "chất xám" hơn Sau đây mình sẽ hướng dẫn làm cách thứ 1 . Cách 2 sẽ hướng dẫn sau Đầu tiên các bạn phải login được vào trang cskh của điện lực bằng tài khoản và mật khẩu bên điện lực cung cấp , ai không biết thì call tổng đài nhờ hộ hỗ trợ https://cskh.cpc.vn/Default.aspx Trong này sẽ có n...