✔️ 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을 이렇게 수정하면 된다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] Alpine Linux (알파인 리눅스) (0) | 2022.05.11 |
---|---|
[Docker] Dockerfile 이미지 빌드와 Cache (0) | 2022.05.11 |
[Docker] Shell(쉘) 변수 (0) | 2022.05.11 |
[Docker] Dockerfile로 이미지 빌드하기 (0) | 2022.05.11 |
[Docker] 이미지 레이어(Layer) (0) | 2022.05.11 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!