기술나눔

【Docker-compose】php 환경 구축

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Docker 작성 컨테이너 오케스트레이션

1. 무엇입니까?

Compose는 Docker Company에서 출시한 도구 소프트웨어로, 여러 Docker 컨테이너를 관리하여 애플리케이션을 구성할 수 있습니다. YAML 형식으로 구성 파일 docker-compose.yml을 정의하고 여러 컨테이너 간의 호출 관계를 작성해야 합니다.그런 다음 단 하나의 명령으로 이러한 컨테이너를 동시에 시작/중지할 수 있습니다.

  • · Docker-Compose는 Docker 컨테이너 클러스터의 신속한 오케스트레이션을 구현하는 Docker의 공식 오픈 소스 프로젝트입니다.

2. 당신은 무엇을 할 수 있나요?

Docker는 각 컨테이너에서 하나의 서비스만 실행할 것을 권장합니다. Docker 컨테이너 자체는 리소스를 거의 차지하지 않기 때문에 각 서비스를 별도로 분리하는 것이 가장 좋습니다. 그러면 또 다른 문제가 발생할까요?

동시에 여러 서비스를 배포해야 하는 경우 각 서비스에 대해 별도의 Dockerfile을 작성한 다음 이미지와 컨테이너를 빌드해야 합니까? 이는 매우 힘든 일이므로 docker는 공식적으로 docker-compose 다중 서비스 배포 도구를 제공합니다. .

예를 들어 웹 마이크로서비스 프로젝트를 구현하려면 웹 서비스 컨테이너 자체 외에도 백엔드 데이터베이스 mysql 서비스 컨테이너, redis 서버, 등록 센터 유레카, 로드 밸런싱 컨테이너 등을 추가해야 하는 경우가 많습니다. . . . . .

Compose를 사용하면 사용자는 별도의 docker-compose.yml 템플릿 파일(YAML 형식)을 통해 연결된 애플리케이션 컨테이너 세트를 프로젝트로 정의할 수 있습니다.

구성 파일을 사용하여 다중 컨테이너 애플리케이션을 쉽게 정의한 다음 단일 명령을 사용하여 애플리케이션의 모든 종속성을 설치하고 빌드를 완료할 수 있습니다. Docker-Compose는 컨테이너를 관리하고 조정하는 방법에 대한 문제를 해결합니다.

3. 갈 곳

  • 공식 웹사이트 · https://docs.docker.com/compose/compose-file/compose-file-v3/
  • https://docs.docker.com/compose/install/

빠른 다운로드 주소

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 1

실행 권한 추가

chmod +x /usr/local/bin/docker-compose
  • 1

설치가 잘 되었는지 확인

docker-compose --version
  • 1
  • 제거

    sudo rm / usr/ local/ bin/docker-compose
    
    • 1

4. 핵심 개념 구성

  • Compose를 사용하는 3단계

    Dockerfile을 작성하여 각 마이크로서비스 애플리케이션을 정의하고 해당 이미지 파일을 빌드합니다.

    docker-compose.yml을 사용하여 전체 비즈니스 단위를 정의하고 전체 애플리케이션에서 다양한 컨테이너 서비스를 배열합니다.

    마지막으로 docker-compose up 명령을 실행하여 전체 애플리케이션을 시작 및 실행하여 원클릭 배포를 완료하고 온라인으로 전환합니다.

  • 일반 명령 작성

    docker-compose -h # 도움말 보기

    docker-compose up # 모든 docker-compose 서비스를 시작합니다.

    docker-compose up -d # 모든 docker-compose 서비스를 시작하고 백그라운드에서 실행합니다.

    docker-compose down # 컨테이너, 네트워크, 볼륨 및 이미지를 중지하고 삭제합니다.

    docker-compose exec yml의 서비스 ID # 컨테이너 인스턴스 내부에 입력

    docker-compose exec docker-compose.yml 파일 작성 서비스 ID /bin/bash

    docker-compose ps # 현재 docker-compose에 의해 조정되고 실행 중인 모든 컨테이너를 표시합니다.

    docker-compose top # docker-compose에 의해 조정되는 현재 컨테이너 프로세스를 표시합니다.

    docker-compose 로그의 서비스 ID yml # 컨테이너 출력 로그 보기

    docker-compose config # 구성 확인

    docker-compose config -q # 문제가 있는 경우에만 구성 및 출력을 확인합니다.

    docker-compose restart # 서비스를 다시 시작합니다

    docker-compose start # 서비스 시작

    docker-compose stop # 서비스 중지

docker-machine 명령 설치

 base=https://get.daocloud.io/docker/machine/releases/download/v0.14.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine
  • 1
  • 2
  • 3

5. 실전 전투: Linux에서 DNS 서버를 구성하고 Lemp 환경 구축(Nginx + MySQL(MariaDB) + PHP)

필요하다

1) Linux 가상 머신에서 IP 주소를 192.168.90.215(x는 학생 ​​ID의 마지막 3자리, y는 직접 지정)로 구성하면 가상 머신이 인터넷에 정상적으로 접속할 수 있습니다.

2) DNS 서버를 구성합니다. 도메인은 cr.com(abc는 이름의 이니셜)입니다. 구성이 완료된 후 nslookup을 사용하여 정방향 및 역방향 확인을 확인합니다.

3) LEMP(예: Nginx + MySQL(MariaDB) + PHP)를 구성하고 실제 호스트를 통해 www.cr.com(abc는 이니셜)에 액세스하여 구축된 LEMP에 액세스합니다. (로컬 확인을 위해 호스트 파일을 수정할 수는 없지만 구성한 자체 DNS를 사용해야 합니다.)

6. DNS 해상도 구성

먼저 Linux http://alleniverrui.top/archives/linux-pei-zhi-jing-tai-ip 용 고정 IP를 구성하십시오 (열리지 않으면 아래 주소를 변경하십시오)

//할 것

/etc/named.conf 파일을 편집합니다.

vim /etc/named.conf
  • 1

청취 및 쿼리 값을 임의대로 변경하십시오.

cr.com을 192.168.90.215로 확인하도록 DNS를 구성합니다.

vim /etc/named.rfc1912.zones 
  • 1

파일 끝에 추가

zone "cr.com" IN {
   type master;
   file "cr.com.zone";
  allow-update { none; };
};
zone "215.90.168.192.in-addr.arpa" IN {
        type master;
        file "com.cr.loop";
        allow-update { none; };
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

:wq 저장

해당 구성 파일 vim /var/named/com.cr.loop를 편집합니다.

다음을 추가하세요

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
        PTR     cr.com.
        NS      ns.cr.com.
ns      A       192.168.90.215
201     PTR     www.cr.com.
201     PTR     email.cr.com.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

vim /var/named/cr.com.zone 편집

다음을 추가하세요

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       192.168.90.215
        AAAA    ::1
        NS      ns.server.com.
ns      IN A    192.168.90.215
www     IN A    192.168.90.215
email   IN A    192.168.90.215
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

DNS 다시 시작

systemctl restart named
  • 1

DNS 상태 보기

systemctl status named
  • 1

성공적으로 시작되었습니다

nslookup cr.com 정방향 구문 분석

역방향 구문 분석 nslookup 192.168.90.215

Lemp 구성

docker-compose.yml 파일을 /mydocker/lemp에 씁니다.

vim /mydocker/lemp/docker-compose.yml 다음 내용을 입력하세요.

nginx:
    build: ./nginx/
    ports:
        - 80:80
    links:
        - php
    volumes_from:
        - app

php:
    build: ./php/
    expose:
        - 9000
    links:
        - mysql
    volumes_from:
        - app

app:
    image: php:7.0-fpm
    volumes:
        - .:/var/www/html
    command: "true"

mysql:
    image: mysql:latest
    volumes_from:
        - data
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: bookmarks
        MYSQL_USER: cr
        MYSQL_PASSWORD: cr123

data:
    image: mysql:latest
    volumes:
        - /var/lib/mysql
    command: "true"

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql
    environment:
        PMA_HOST: mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

/mydocker/lemp/에 nginx/Dockerfile 만들기

채우다

FROM nginx:latest

COPY ./default.conf /etc/nginx/conf.d/default.conf
  • 1
  • 2
  • 3

default.conf 생성

다음 내용을 입력하세요.

 

server {

  listen 80 default_server;

  root /var/www/html;

  index index.html index.php;

 

  charset utf-8;

 

  location / {

try_files $uri $uri/ /index.php?$query_string;

  }

 

  location = /favicon.ico { access_log off; log_not_found off; }

  location = /robots.txt  { access_log off; log_not_found off; }

 

  access_log off;

  error_log  /var/log/nginx/error.log error;

 

  sendfile off;

 

  client_max_body_size 100m;

 

  location ~ .php$ {

  fastcgi_split_path_info ^(.+.php)(/.+)$;

  fastcgi_pass php:9000;

 fastcgi_index index.php;

 include fastcgi_params;

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_intercept_errors off;

fastcgi_buffer_size 16k;

 fastcgi_buffers 4 16k;

  }

 

  location ~ /.ht {

 deny all;

  }

}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

/mydocker/lemp/에 php/Dockerfile을 생성합니다.

채우다

FROM php:7.0-fpm

RUN docker-php-ext-install mysqli

 
  • 1
  • 2
  • 3
  • 4
  • 5

Docker 컨테이너 오케스트레이션

 docker-compose up -d 
  • 1

컨테이너 실행 상태를 보기 위한 Docker ps

성공적으로 시작되었습니다

이 머신은 IP를 통해 php 환경과 nginx 환경에 접근합니다.

액세스 성공

로컬 DNS 서버를 가상 머신(192.168.90.215)으로 구성합니다.

cmd 창을 열고 cr.com에서 ping 테스트를 수행합니다.

성공적으로 핑을 보냈습니다

도메인 이름을 통해 구축된 PHP 환경에 액세스

nginx 구성 파일 수정

최종 도메인 이름은 웹사이트에 직접 접속됩니다.