Dockerfile을 이용해 ubuntu 이미지 만들기

강재민·2022년 5월 10일
2

Docker

목록 보기
3/7
post-thumbnail

docker 설치하기


Dockerfile 만들기

cd ~									#홈디렉토리로 이동
mkdir image-build						#Dockerfile을 저장할 디렉토리 만들기
cd image-build							
echo "hello dockerfile" > index.html	#이미지가 잘 만들어졌는지 확인할 index.html파일
vi Dockerfile							#vi 편집기로 편집 시작

Dockerfile 편집하기

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로 중지해서 나올 수 밖에 없다


timezone 문제 해결 방법 1

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"]

timezone 문제 해결 방법 2

기본적으로 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 주소를 치고 접속하면 결과창이 나옴


timezone 설정 결과

생성한 ubuntu 컨테이너로 들어가서 설정된 시간을 확인해봤더니 링크는 되었지만 date했을 때에 여전히 UTC로 잡혀있는 것을 확인 할 수 있었다.
해결


그리고 당연히 timedatectl 명령어는 실행할 수 없었다.
timedatectl 명령어 패키지는 무엇일까


해결

/usr/share/zoneinfo/Asia/Seoul
seoul > Seoul 대소문자 꼭.. 확인하기..


이거에서 update위치 수정해주어야함

0개의 댓글