Hướng dẫn Docker: Dockerizing ứng dụng Python Django

theanh

Administrator
Nhân viên
Docker là một dự án mã nguồn mở cung cấp nền tảng mở cho các nhà phát triển và quản trị viên hệ thống để xây dựng, đóng gói và chạy ứng dụng ở bất kỳ đâu dưới dạng một vùng chứa nhẹ. Docker tự động triển khai các ứng dụng bên trong các vùng chứa phần mềm.

Django là một khung ứng dụng web được viết bằng python theo kiến trúc MVC (Model-View-Controller). Nó có sẵn miễn phí và được phát hành theo giấy phép mã nguồn mở. Nó nhanh và được thiết kế để giúp các nhà phát triển đưa ứng dụng của họ lên mạng nhanh nhất có thể.

Trong hướng dẫn này, tôi sẽ chỉ cho bạn từng bước cách tạo hình ảnh docker cho một dự án ứng dụng Django hiện có trong Ubuntu 16.04. Chúng ta sẽ tìm hiểu về việc docker hóa một ứng dụng Django python, sau đó triển khai ứng dụng dưới dạng vùng chứa tới môi trường docker bằng cách sử dụng tập lệnh docker-compose.

Để triển khai ứng dụng Django python của mình, chúng ta cần thêm hình ảnh docker. Chúng ta cần hình ảnh docker annginx cho máy chủ web và hình ảnh PostgreSQL cho cơ sở dữ liệu.

Chúng ta sẽ làm gì?​

  1. Cài đặt Docker-ce
  2. Cài đặt Docker-compose
  3. Cấu hình môi trường dự án
  4. Xây dựng và chạy
  5. Kiểm tra

Bước 1 - Cài đặt Docker-ce​

Trong hướng dẫn này, chúng ta sẽ cài đặt phiên bản cộng đồng docker-ce từ kho lưu trữ docker. Chúng tôi sẽ cài đặt docker-ce community edition và docker-compose hỗ trợ tệp compose phiên bản 3.

Trước khi cài đặt docker-ce, hãy cài đặt các phụ thuộc docker cần thiết bằng lệnh apt.
Mã:
sudo apt install -y \
 apt-transport-https \
 ca-certificates \
 curl \
 software-properties-common
Bây giờ hãy thêm khóa docker và kho lưu trữ bằng cách chạy các lệnh bên dưới.
Mã:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
 "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) \
 stable"


Cập nhật kho lưu trữ và cài đặt docker-ce.
Mã:
sudo apt update
sudo apt install -y docker-ce
Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ docker và cho phép dịch vụ này khởi chạy mỗi khi khởi động hệ thống.
Mã:
systemctl start docker
systemctl enable docker
Tiếp theo, chúng ta sẽ thêm một người dùng mới có tên là 'omar' và thêm người dùng này vào nhóm docker.
Mã:
useradd -m -s /bin/bash omar
usermod -a -G docker omar


Đăng nhập với tư cách là người dùng omar và chạy lệnh docker như hiển thị bên dưới.
Mã:
su - omar
docker run hello-world
Đảm bảo bạn nhận được thông báo hello-world từ Docker.



Quá trình cài đặt Docker-ce đã hoàn tất.

Bước 2 - Cài đặt Docker-compose​

Trong hướng dẫn này, chúng ta sẽ sử dụng hỗ trợ docker-compose mới nhất cho tệp compose phiên bản 3. Chúng ta sẽ cài đặt docker-compose theo cách thủ công.

Tải xuống phiên bản mới nhất của docker-compose bằng lệnh curl vào thư mục '/usr/local/bin' và thực thi bằng chmod.

Chạy các lệnh bên dưới.
Mã:
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Bây giờ hãy kiểm tra phiên bản docker-compose.
Mã:
phiên bản docker-compose
Và hãy đảm bảo rằng bạn có phiên bản mới nhất của docker-compose 1.21.



Phiên bản docker-compose mới nhất hỗ trợ tệp compose phiên bản 3 đã được cài đặt.

Bước 3 - Cấu hình Môi trường Dự án​

Trong bước này, chúng ta sẽ cấu hình môi trường dự án python Django. Chúng ta sẽ tạo thư mục mới 'guide01' và biến nó thành thư mục chính cho các tệp dự án của chúng ta, chẳng hạn như Dockerfile, dự án Django, tệp cấu hình nginx, v.v.

Đăng nhập vào người dùng 'omar'.
Mã:
su - omar
Tạo thư mục mới 'guide01' và đi đến thư mục đó.
Mã:
mkdir -p guide01
cd guide01/
Bây giờ bên trong thư mục 'guide01', hãy tạo các thư mục mới 'project' và 'config'.
Mã:
mkdir project/ config/
Lưu ý:
  • Thư mục 'project': Tất cả các tệp dự án python Django của chúng ta sẽ được đặt trong thư mục đó.
  • Thư mục 'config': Thư mục cho các tệp cấu hình dự án, bao gồm tệp cấu hình nginx, tệp yêu cầu pip python, v.v.

Tạo một tệp requirements.txt mới​

Tiếp theo, tạo tệp mới 'requirements.txt' bên trong thư mục 'config' bằng lệnh vim.
Mã:
vim config/requirements.txt
Dán cấu hình bên dưới.
Mã:
Django==2.0.4 
 gunicorn==19.7.0 
 psycopg2==2.7.4
Lưu và thoát.

Tạo tệp máy chủ ảo Nginx django.conf​

Trong thư mục config, tạo thư mục cấu hình 'nginx' và thêm tệp cấu hình máy chủ ảo django.conf.
Mã:
mkdir -p config/nginx/
vim config/nginx/django.conf
Dán cấu hình sau vào đó.
Mã:
web ngược dòng {
 ip_hash;
 web máy chủ:8000;
 }
 
 # cổng thông tin
 máy chủ {
 vị trí / {
 proxy_pass http://web/;
 }
 lắng nghe 8000;
 tên máy chủ localhost;
 
 vị trí /static { 
 tự động lập chỉ mục; 
 bí danh /src/static/; 
 }
 }
Lưu và thoát.

Tạo Dockerfile​

Tạo 'Dockerfile' mới bên trong thư mục 'guide01'.

Chạy lệnh bên dưới.
Mã:
vim Dockerfile
Bây giờ hãy dán tập lệnh Dockerfile bên dưới.
Mã:
FROM python:3.5-alpine
 ENV PYTHONUNBUFFERED 1 
 
 CHẠY apk update && \
 apk add --virtual build-deps gcc python-dev musl-dev && \
 apk add postgresql-dev bash
 
 RUN mkdir /config 
 ADD /config/requirements.txt /config/ 
 RUN pip install -r /config/requirements.txt
 RUN mkdir /src
 WORKDIR /src
Lưu và thoát.

Lưu ý:

Chúng tôi muốn xây dựng các hình ảnh Docker cho dự án Django của mình dựa trên Alpine Linux, kích thước nhỏ nhất của Linux. Dự án Django của chúng tôi sẽ chạy Alpine Linux với python 3.5 được cài đặt trên đó và thêm gói postgresql-dev để hỗ trợ cơ sở dữ liệu PostgreSQL. Sau đó, chúng ta sẽ cài đặt tất cả các gói python được liệt kê trong tệp 'requirements.txt' bằng lệnh pip python và tạo '/src' mới cho dự án của chúng ta.

Tạo tập lệnh Docker-compose​

Tạo tệp 'docker-compose.yml' trong thư mục 'guide01' bằng lệnh vim bên dưới.
Mã:
vim docker-compose.yml
Dán cấu hình sau vào đó.
Mã:
version: '3'
 services:
 db:
 image: postgres:10.3-alpine
 container_name: postgres01
 nginx:
 image: nginx:1.13-alpine
 container_name: nginx01
 ports:
 - "8000:8000"
 volumes:
 - ./project:/src
 - ./config/nginx:/etc/nginx/conf.d
 depend_on:
 - web
 web:
 build: .
 container_name: django01
 command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput && gunicorn hello_django.wsgi -b 0.0.0.0:8000"
 depend_on:
 - db
 volumes:
 - ./project:/src
 expose:
 - "8000"
 restart: always
Lưu và thoát.

Lưu ý:

Với tập lệnh tệp docker-compose này, chúng ta sẽ tạo ba dịch vụ. Tạo dịch vụ cơ sở dữ liệu có tên 'db' bằng PostgreSQL alpine Linux, tạo lại dịch vụ 'nginx' bằng Nginx alpine Linux và tạo vùng chứa python Django của chúng tôi bằng hình ảnh docker tùy chỉnh được tạo từ Dockerfile của chúng tôi.


Cấu hình dự án Django​

Sao chép các tệp dự án Django của bạn vào thư mục 'project'.
Mã:
cd ~/django
cp -r * ~/guide01/project/
Đi tới thư mục 'project' và chỉnh sửa cài đặt ứng dụng 'settings.py'.
Mã:
cd ~/guide01/project/
vim hello_django/settings.py
Lưu ý:

Chúng tôi sẽ triển khai ứng dụng Django đơn giản có tên là ứng dụng 'hello_django'.

Trên dòng 'ALLOW_HOSTS', thêm tên dịch vụ 'web'.
Mã:
ALLOW_HOSTS = ['web']
Bây giờ hãy thay đổi cài đặt cơ sở dữ liệu. Chúng tôi sẽ sử dụng cơ sở dữ liệu PostgreSQL chạy như một dịch vụ có tên là 'db' với người dùng và mật khẩu mặc định.
Mã:
DATABASES = { 
 'default': {
 'ENGINE': 'django.db.backends.postgresql_psycopg2',
 'NAME': 'postgres',
 'USER': 'postgres',
 'HOST': 'db',
 'PORT': 5432,
 }
 }
Và đối với thư mục cấu hình 'STATIC_ROOT', hãy thêm dòng này vào cuối dòng của tệp.
Mã:
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Lưu và thoát.



Bây giờ chúng ta đã sẵn sàng để xây dựng và chạy dự án Django dưới docker container.

Bước 4 - Xây dựng và chạy hình ảnh Docker​

Trong bước này, chúng ta muốn xây dựng một hình ảnh Docker cho dự án Django của mình bằng cách sử dụng cấu hình trên thư mục 'guide01'.

Đi tới thư mục 'guide01'.
Mã:
cd ~/guide01/
Bây giờ hãy xây dựng hình ảnh Docker bằng lệnh docker-compose.
Mã:
docker-compose build


Khởi động tất cả các dịch vụ bên trong tập lệnh docker-compose.
Mã:
docker-compose up -d
Chờ vài phút để Docker dựng hình ảnh Python của chúng ta và tải xuống hình ảnh docker nginx và postgresql.



Khi hoàn tất, hãy kiểm tra container đang chạy và liệt kê hình ảnh docker trên hệ thống bằng các lệnh sau.
Mã:
docker-compose ps
hình ảnh docker-compose
Và bây giờ bạn sẽ có ba container đang chạy và danh sách hình ảnh Docker trên hệ thống như hiển thị bên dưới.



Ứng dụng Python Django của chúng ta hiện đang chạy bên trong container docker và hình ảnh docker cho dịch vụ của chúng ta đã được tạo.

Bước 5 - Kiểm tra​

Mở trình duyệt web của bạn và nhập địa chỉ máy chủ có cổng 8000, của tôi là:
Bây giờ bạn sẽ nhận được trang chủ Django mặc định.



Tiếp theo, hãy kiểm tra trang quản trị bằng cách thêm đường dẫn '/admin' vào URL.


Và bạn sẽ thấy trang đăng nhập quản trị Django.



Ứng dụng Dockerizing Python Django đã hoàn tất thành công.

Tham khảo​

 
Back
Bên trên