Docker-php-ext-cài đặt apcu

Ngày nay, mọi thứ hoạt động tốt hơn khi sử dụng Docker để thiết lập môi trường cục bộ thay vì cài đặt cục bộ PHP và các phụ thuộc khác. Khi bắt đầu các dự án PHP mới, Dockerfiles được sao chép từ cơ sở mã này sang cơ sở mã khác vì mỗi dự án yêu cầu các phụ thuộc cơ bản tương tự để chạy. Điều đó gây khó khăn cho việc duy trì các thay đổi đối với vùng chứa

Để tránh điều này tại TeleSoftas, chúng tôi đã nảy ra ý tưởng có một hình ảnh cơ sở đơn giản, giúp đơn giản hóa việc phát triển và bảo trì các dự án của chúng tôi. Hình ảnh này được xuất bản trên DockerHub, giúp bắt đầu một dự án mới dễ dàng bằng cách giảm số lượng mã cần thiết

Giải pháp

Chúng ta hãy xem Dockerfile hình ảnh PHP cơ bản cần thiết để chạy một ứng dụng Symfony

FROM php:8.1-fpm-alpine

RUN addgroup -g 1000 -S app && \
adduser -u 1000 -S app -G app

RUN apk add \
autoconf \
build-base \
git

RUN docker-php-ext-install pdo_mysql

RUN pecl install apcu-5.1.21
RUN docker-php-ext-enable apcu opcache

COPY --from=composer:2.1 /usr/bin/composer /usr/local/bin/composer

Không chỉ vậy, cấu hình đơn giản này còn hoạt động cho các dự án PHP đơn giản cũng như Laravel. Sao chép cùng một Dockerfile và duy trì nó thông qua tất cả các dự án trở nên hơi khó khăn và lộn xộn, vậy tại sao không làm cho nó đơn giản hơn?

Xuất bản hình ảnh lên Dockerhub

Để tránh tạo Dockerfile mới cho từng dự án, bạn có thể xuất bản nó lên DockerHub và kéo nó qua docker-compose. yml trực tiếp từ nó. Và việc xây dựng hình ảnh đơn giản chỉ bằng một vài lệnh — đăng nhập vào tài khoản DockerHub của bạn, xây dựng hình ảnh và đẩy nó lên

docker login -u  -p  docker.iodocker build -t index.docker.io//php:8.1 .docker push index.docker.io//php:8.1
Sử dụng hình ảnh mới được tạo

Đầu tiên, tạo một docker-compose. yml với cấu hình dịch vụ sau

version: '3.7'

services:
php:
image: /php:8.1
user: app
volumes:
- ./app:/srv/app

Giờ đây, bạn có thể bỏ qua việc xây dựng hình ảnh cục bộ và nó sẽ được lấy từ DockerHub. Bằng cách này, bạn tránh được sự trùng lặp Dockerfile giữa các dự án và giúp dễ dàng bảo trì

Điều này hữu ích khi tạo một dự án Symfony/Laravel mới từ đầu hoặc, ví dụ, thực thi một số mã PHP cục bộ, bởi vì Docker ngày nay phổ biến hơn so với việc có tất cả các thư viện trên máy chủ của bạn

Mở rộng Dockerfile cho mỗi dự án

Đôi khi bạn cần một số phụ thuộc trong một dự án và không cần chúng trong một dự án khác. Điều đó cũng dễ thực hiện bằng cách sử dụng hình ảnh mới được xuất bản. Ví dụ: trên một số dự án, bạn có thể cần XDebug hoặc một số thư viện bổ sung khác khi phát triển cục bộ. Để giải quyết vấn đề này, bạn có thể tạo một Dockerfile nhỏ, tệp này sẽ kéo hình ảnh cơ sở và thêm các thư viện cần thiết lên trên nó

FROM /php:8.1RUN pecl install xdebug-3.1.1RUN docker-php-ext-enable xdebug

Tiếp theo, mở rộng docker-compose của bạn. cấu hình yml

version: '3.7'

services:
php:
build: .
user: app
volumes:
- ./app:/srv/app

Và nó đơn giản như thế này. Không có mã trùng lặp và các phụ thuộc cơ bản dễ bảo trì trên tất cả các dự án. Bạn có thể thêm nhiều hoặc ít tùy chỉnh vào Dockerfile cục bộ này nếu cần

Tự động xuất bản lên Dockerhub

Giả sử bạn cần nâng Trình soạn thảo lên phiên bản mới hơn trong hình ảnh cơ sở của mình. Để làm điều này, bạn phải cập nhật Dockerfile của chúng tôi, đăng nhập vào DockerHub, xây dựng hình ảnh và xuất bản nó. Bạn có thể đơn giản hóa điều này bằng cách tự động hóa các giai đoạn xây dựng và xuất bản quy trình của bạn

Đối với hướng dẫn này, tôi đã chọn GitLab làm kho lưu trữ mã nguồn và tạo một. gitlab-ci. yml với cấu hình sau để tự động hóa toàn bộ quá trình

stages:
- build

variables:
IMAGE_VERSION: '8.1'

build:
stage: build
image: docker:latest
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
script:
- docker build --pull -t $CI_REGISTRY_IMAGE:$IMAGE_VERSION .
- docker push $CI_REGISTRY_IMAGE:$IMAGE_VERSION

Chỉ còn một bước nữa — xác định các biến trong cài đặt CI/CD của dự án

CI_REGISTRY=docker.io
CI_REGISTRY_IMAGE=index.docker.io//php
CI_REGISTRY_USER=
CI_REGISTRY_PASSWORD=

Khi bạn đẩy hình ảnh đã cập nhật lên GitLab, hình ảnh sẽ được tạo và đẩy lên DockerHub sau khi quy trình kết thúc. Cấu hình này có thể dễ dàng thích ứng với Bitbucket hoặc Github bằng cách làm theo hướng dẫn thiết lập đường dẫn của họ

Tóm lược

Chỉ có một bước quan trọng cần thực hiện — quyết định những gì được yêu cầu trong hình ảnh cơ sở của bạn, xây dựng nó và xuất bản nó lên DockerHub. Và đó là những gì có thể được thực hiện

  1. Tạo hai kho lưu trữ cho PHP 8. 0 và 8. 1 hình ảnh docker
  2. Tạo Dockerfile và thêm cấu hình CI để tự động hóa toàn bộ quy trình
  3. Gắn thẻ hình ảnh và đẩy nó vào sổ đăng ký hình ảnh DockerHub sau khi quy trình kết thúc. Và đó là nó. Đó là cách bạn có thể đơn giản hóa quá trình phát triển của mình một chút

Điều này không chỉ mang lại lợi ích cho các dự án hiện có mà cả những dự án mới. Nó giúp dễ dàng duy trì tất cả các ứng dụng — nếu cần có thư viện hoặc gói mới để phiên bản Symfony mới nhất hoạt động, chỉ cần cập nhật hình ảnh cơ sở một lần và nó đã có sẵn trong tất cả các dự án

Đi xa hơn

Ngoài những cải tiến đã đề cập trước đó, có thể đơn giản hóa toàn bộ cấu hình ngăn xếp phát triển hơn nữa. Ví dụ này dành cho PHP, nhưng quy trình tương tự có thể được điều chỉnh cho các vùng chứa khác, chẳng hạn như Nginx. Ví dụ: có thể có yêu cầu giảm đăng nhập trong hầu hết các dự án. Để thực hiện điều này, bạn có thể tạo một hình ảnh cơ sở Nginx mới với loại trừ nhật ký và sử dụng lại nó

Chủ Đề