DevOps/Docker

[Docker] ubuntu 이미지로 httpd 서비스 이미지 만들기 ( + Timezone 세팅)

TTOII 2022. 5. 11. 18:39
728x90

✔️ ubuntu 이미지로 httpd 이미지 만들기

ubuntu 이미지로 httpd 서비스가 동작하는 이미지를 만들기 위해서는 Timezone 설정이 필요하다.

ls -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

Timezone 설정을 위해서는 해당 명령을 실행해야 하는데 파일이 없어서 실행할 수 없다.

tzdata : /usr/share/zoneinfo 라고 하는 디렉토리와 하위 파일을 생성하는 패키지이다.

apt update
apt install tzdata

apt update를 수행 후 apt install tzdata로 tzdata 패키지를 설치한다.
tzdata를 설치할 때 대륙과 국가를 묻는 대화 형식의 설치창을 볼 수 있다.

Current default time zone: 'Asia/Seoul'
Local time is now:      Wed May 11 18:27:56 KST 2022.
Universal Time is now:  Wed May 11 09:27:56 UTC 2022.
Run 'dpkg-reconfigure tzdata' if you wish to change it.

선택을 완료하면 다음과 같이 Asia/Seoul로 Timezone이 셋팅된다.

root@6502596ebc05:/# cd /usr/share/zoneinfo
root@6502596ebc05:/usr/share/zoneinfo# ls
Africa      CST6CDT  Etc      Greenwich  Kwajalein  PRC        UCT                leapseconds
America     Canada   Europe   HST        Libya      PST8PDT    US                 localtime
Antarctica  Chile    Factory  Hongkong   MET        Pacific    UTC                posix
Arctic      Cuba     GB       Iceland    MST        Poland     Universal          posixrules
Asia        EET      GB-Eire  Indian     MST7MDT    Portugal   W-SU               right
Atlantic    EST      GMT      Iran       Mexico     ROC        WET                tzdata.zi
Australia   EST5EDT  GMT+0    Israel     NZ         ROK        Zulu               zone.tab
Brazil      Egypt    GMT-0    Jamaica    NZ-CHAT    Singapore  iso3166.tab        zone1970.tab
CET         Eire     GMT0     Japan      Navajo     Turkey     leap-seconds.list

root@6502596ebc05:/usr/share/zoneinfo# cd Asia
root@6502596ebc05:/usr/share/zoneinfo/Asia# ls
Aden       Bishkek     Gaza         Kathmandu     Novokuznetsk  Seoul          Ulan_Bator
Almaty     Brunei      Harbin       Katmandu      Novosibirsk   Shanghai       Urumqi
Amman      Calcutta    Hebron       Khandyga      Omsk          Singapore      Ust-Nera
Anadyr     Chita       Ho_Chi_Minh  Kolkata       Oral          Srednekolymsk  Vientiane
Aqtau      Choibalsan  Hong_Kong    Krasnoyarsk   Phnom_Penh    Taipei         Vladivostok
Aqtobe     Chongqing   Hovd         Kuala_Lumpur  Pontianak     Tashkent       Yakutsk
Ashgabat   Chungking   Irkutsk      Kuching       Pyongyang     Tbilisi        Yangon
Ashkhabad  Colombo     Istanbul     Kuwait        Qatar         Tehran         Yekaterinburg
Atyrau     Dacca       Jakarta      Macao         Qostanay      Tel_Aviv       Yerevan
Baghdad    Damascus    Jayapura     Macau         Qyzylorda     Thimbu
Bahrain    Dhaka       Jerusalem    Magadan       Rangoon       Thimphu
Baku       Dili        Kabul        Makassar      Riyadh        Tokyo
Bangkok    Dubai       Kamchatka    Manila        Saigon        Tomsk
Barnaul    Dushanbe    Karachi      Muscat        Sakhalin      Ujung_Pandang
Beirut     Famagusta   Kashgar      Nicosia       Samarkand     Ulaanbaatar

그리고 아까는 없었던 디렉토리가 생성된다.

이제 이것을 /etc/localtime에 심볼릭 링크 걸어주면 된다.

 

지금까지의 작업은 사람이 직접 숫자를 입력해서 설정을 완료했다.

 

그렇다면 Dockerfile로 이미지를 빌드할 때는 어떻게 처리해야할까 ? 

 

우선 여기서 짚고 가야할 중요한 점은 모든 패키지가 설치시에 다 yes or no를 물어보지는 않는다는 것이다.

tree 패키지는 yes or no를 묻지 않고 설치하지만 apache2는 yes or no를 물어본다.

tree 같은 경우는 서비스 제어나 관리자 권한이 필요한 형태의 도구가 아니므로 묻지 않는다.

시스템에 루트 권한이 필요한 패키지를 설치할 때는 yes or no를 물어본다.

Dockerfile을 작성할 때 고려해야하는 중요한 점은 Dockerfile은 대화형식를 지원하지 않으므로 모든 질의를 제거해야하는 점이다.

tzdata 패키지를 설치할 때는 yes or no를 묻지 않지만, timezone을 설정할 때 숫자를 입력해야한다.

 

다시 한번 Dockerfile에서는 이런 자동화의 걸림돌을 어떻게 처리해야 할까 ?

DEBIAN_FRONTEND=noninteractive apt install tzdata 
root@b120644a6bb9:/# DEBIAN_FRONTEND=noninteractive apt install tzdata
Reading package lists... Done
Building dependency tree
Reading state information... Done
tzdata is already the newest version (2022a-0ubuntu0.20.04).
tzdata set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
root@b120644a6bb9:/#

DEBIAN_FRONTEND=noneinteractive를 붙이면 yes or no를 묻지않고 설치가 완료된다.
하지만 이 변수는 지금 이 apt install tzdata에만 적용된다.

root@b120644a6bb9:/# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
root@b120644a6bb9:/# apt install -y apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
apache2 is already the newest version (2.4.41-4ubuntu3.10).
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

이후 필요한 명령들을 실행하면 timezone 설정이 완료된다.

이를 Dockerfile에 적용시켜서 이미지를 빌드해보자

Dockerfile을 이렇게 수정하면 된다.

728x90