오늘의 IT/Docker

[Docker] php, apache image 생성하기 #절망편

오늘의 대장 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개 생겨 있음 포트번호 다른 걸로....

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

반응형