cd ~ #홈디렉토리로 이동
mkdir image-build #Dockerfile을 저장할 디렉토리 만들기
cd image-build
echo "hello dockerfile" > index.html #이미지가 잘 만들어졌는지 확인할 index.html파일
vi Dockerfile #vi 편집기로 편집 시작
FROM ubuntu:focal #베이스 이미지생성
RUN apt update; apt install -y apache2 #아파치 설치
ADD index.html /var/www/html/index.html #html파일 추가
EXPOSE 80/tcp #80포트 설정
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"] #아파치 실행
이렇게 실행을하면 ubuntu20.04버전부터 timezone이 초기화 된 상태로 시작되기 때문에 아래 이미지와 같은 곳에서 막히게된다.
이때 아무런 명령어도 입력할 수 없기 때문에 어쩔수없이
ctrl+c
로 중지해서 나올 수 밖에 없다
centos이미지
는 기본적으로time zone
을 설정하지않으면 기본적으로UTC
로 설정되어있는데redhat
과 우분투 18.04버전 아래에서만 그렇다.
ubuntu의 docker 이미지
는 시간대가 설정되어있지 않다. 그래서 이것을 어떻게 할 것인지 물어보는데 이게 대화형식
으로 작동하다보니 행
이 걸리게되었다.
그래서 ENV DEBIAN_FRONTEND=noninteractive
라는 환경변수 설정을 해주면 기본값
으로 그냥 넘어가게된다.
FROM ubuntu:focal
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update; apt install -y apache2
ADD index.html /var/www/html/index.html
EXPOSE 80/tcp
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]
기본적으로 bash shell을 이용해서 아래와 같은 방식으로 심볼릭 링크를 서울로 변경해주고 리눅스를 껏다 키면 된다.
ls -l /etc/localtime
cd /usr/share/zoneinfo
ls
cd Asia
ls
ls Seoul #이것을 심볼릭 링크를 걸어주어야한다.
sudo ln -sf /usr/share/zoneinfo/Asia/seoul /etc/localtime #f으로 덮어 쓰는 옵션
ls -l /etc/localtime
sudo timedatectl
그래서 이와 같은 작업을 Dockerfile에 작성해주면 된다.
FROM ubuntu:focal
RUN apt update; DEBIAN_FRONTEND=noninteractive apt install tzdata #일단 상호작용을 무시하고 tzdata를 설치해주고
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime #심볼릭 링크를 걸어준다. 대소문자 주의 !!
RUN apt install -y apache2
ADD index.html /var/www/html/index.html
EXPOSE 80/tcp
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]
실행 결과가 잘 나오는 것을 확인할 수 있다.
docker build -t myweb:ubuntu . #Dockerfile로 이미지 만들기
docker images #이미지 잘 만들어졌는지 확인
docker run -d -p 80:80 myweb:ubuntu #컨테이너 실행
###크롬창에 사설ip 주소를 치고 접속하면 결과창이 나옴
생성한 ubuntu 컨테이너로 들어가서 설정된 시간을 확인해봤더니 링크는 되었지만 date했을 때에 여전히 UTC로 잡혀있는 것을 확인 할 수 있었다.
해결
그리고 당연히 timedatectl
명령어는 실행할 수 없었다.
timedatectl
명령어 패키지는 무엇일까
/usr/share/zoneinfo/Asia/Seoul
seoul > Seoul 대소문자 꼭.. 확인하기..
이거에서 update위치 수정해주어야함