ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker] php, apache image 생성하기 #절망편
    오늘의 IT/Docker 2023. 1. 29. 01:07
    반응형

     

    폴더 생성해주기

    mkdir daejang

     

    폴더 들어가서 Dockerfile 만들기

    touch Dockerfile

     

    Dockerfile 파일 만들기

    일단 apache 먼저 설치 해줌

    # Dockerfile
    FROM ubuntu:20.04
    
    # MAINTAINER 명령어 docker에서 지원 안함 LABEL로 사용
    LABEL maintainer="daejang"
    
    # 아파치 설치
    RUN apt install apache2 -y
    ENV APACHE_RUN_USER www-data
    ENV APACHE_RUN_GROUP www-data
    ENV APACHE_LOG_DIR /var/log/apache2
    ENV APACHE_PID_FILE  /var/run/apache2/apache2.pid
    
    EXPOSE 80
    
    CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

     

     hub.docker 사이트 로그인 및 image build [docker login 및 build]

    docker login
    # docker build -t [tag] [dockerfile 파일 경로]
    docker build -t daejang-php8.2_apache2 .

     

    빌드 할때 나온 에러 모음

    1. WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

    apt 명령어의 경우 사용자와의 interaction 에 중점을 둔 CLI 이기에 script 내에서 사용하기에 부적절하다는 에러로 apt-get 등의 명령어로 대체하여 사용하면 된다.

    2. Unable to locate package apache2

    우분투에서 패키지를 설치할때 위와같은 에러가 발생할 경우 해결방법

    위 에러는 package 의 레포지토리가 정상적으로 접근이 안될 때 나오는 명령어 이기 때문에 패키지 레포지토리를 최신으로 만들어주는 apt update 명령어를 사용해주면 됩니다.

    3. Geographic area 설정이 뜰 때

    Geographic area 설정

    Dockerfile 스크립트 build 시에 해당 설정이 불가능 하기 때문에 2가지 해결 방법이 있다

    ENV TZ=Asia/Seoul # 1. 명시적으로 timezone 설정
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    
    ENV DEBIAN_FRONTEND=noninteractive # 2. 추가적인 창 비활성화

     

     

    최종 build한 Dockerfile

    # Dockerfile
    FROM ubuntu:20.04
    
    # 명시적인 타임존 설정
    ENV TZ=Asia/Seoul
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    # MAINTAINER 명령어 docker에서 지원 안함 LABEL로 사용
    LABEL maintainer="daejang"
    
    # 업데이트
    RUN apt update
    
    # 아파치 설치
    RUN apt-get install apache2 -y
    ENV APACHE_RUN_USER www-data
    ENV APACHE_RUN_GROUP www-data
    ENV APACHE_LOG_DIR /var/log/apache2
    ENV APACHE_PID_FILE  /var/run/apache2/apache2.pid
    
    EXPOSE 80
    
    CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

     

    빌드 실행

    docker run -d -p 80:80 daejang-php8.2_apache2

     

    오류 #1

    Error response from daemon: driver failed programming external connectivity on endpoint ~

    외부로 오픈하는 포트가 겹쳐서 컨테이너가 실행이 제대로 안되는 오류

    나 같은 경우에는 포트번호가 없어서 그냥 포트번호는 생략하고 다시 실행해봄

    docker run daejang-php8.2_apache2

     

    오류 #2

    apache2: Could not reliably determine the server's fully qualified domain name

    이후 shell이 멈췄고 다시 들어가려고 하니 권한 오류 남...

     

    ssh  키 다시 등록하고 들어가보니

    똑같은 container 2개 생겨 있음 포트번호 다른 걸로....

    흑흑....망한건가.....

    반응형

    '오늘의 IT > Docker' 카테고리의 다른 글

    [Docker] image란?  (0) 2023.01.28
    [Docker] docker 정보 확인 및 container 생성/시작/정지  (0) 2023.01.25
    [Docker] docker란?  (0) 2023.01.22
Designed by Tistory.