살다보면 노트북이나 컴퓨터를 바꿔야 할 때나, 낯선 환경에서 새로운 컴퓨터로 개발을 해야하는 등의 문제가 생길 때가 있다.
이 때마다 필요한 package들을 새로 다운받거나 dotfiles를 새로 만드는 것은 힘들고, 다시 새로운 환경에 적응하려면 시간이 걸리기 때문에 내 입맛에 맞는 개발환경을 Docker를 이용해 만들어두기로 했다.
현재, 그리고 앞으로도 여러 방면에서 편하다는 이유로 Windows OS를 사용할 것이고, Linux환경은 VM으로 사용할 것 같아 Dockerfile로 만들고자 한다.
그럼... 바로 dockerfile을 만들기 시작하겠다
FROM image:tag
FROM ubuntu:latest
FROM은 베이스가 될 이미지를 지정하는 명령어이다.
기본이 될 OS를 선택하는 것으로, 꼭 있어야 한다.
LABEL maintainer="Mario"
LABEL version="1.0"
LABEL은 이미지의 정보를 저장하기 위한 명령어다.
docker 명령어로 해당 이미지의 label을 확인할 수 있다.
RUN command -option
RUN apt update
RUN은 명령을 실행한다.
command line에서 입력하는 것과 같이 "/bin/sh -c " 로 명령어를 실행하는 것과 같다.
ENV key value
ENV는 환경변수를 지정해준다. Linux에서 환경변수 설정하는 것과 같다.
FROM ubuntu:latest
LABEL maintainer="Byeongmin Ryoo <bmryu0501@gmail.com>"
최신버전의 ubuntu를 base image로 설정하고
mantainer라는 label을 넣어주었다.
# update & upgrade
RUN set -xe \
&& apt -y -qq update \
&& apt -y -qq upgrade
위처럼 명령어를 길게 쓰거나 나눌 수 있는 경우 가독성을 위해 백슬래쉬(\)를 이용해 분절할 수 있다.
&&는 명령을 실행한 이후 다음 명령을 실행하도록 한다.
apt 명령어로 update 및 upgrade를 실행해주었다.
-y 옵션을 주어 따로 Y를 입력하지 않아도 설치가 진행되도록 했고,
-qq 옵션을 주어 메시지를 출력하지 않도록 했다.
set -xe는 명령 실행시의 옵션을 설정해주는 것으로, 의미는 다음과 같다.
x는 수행하는 명령어를 출력 후 실행
e는 오류 발생시 스크립트를 종료
이를 넣어주는 정확한 이유는 잘 모르겠지만 디버깅 또는 오류 방지를 위한 것 같다.
# set time zone
RUN set -xe \
&& apt -y -qq install tzdata
ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
&& echo $TZ > /etc/timezone
time zone을 설정하기 위해 tzdata를 설치해주고,
환경변수 TZ를 Asia/Seoul로 설정해 시간대를 서울 기준으로 설정해주었다.
ln 명령어는 link해주는 명령어로, timezone을 위와 같이 link해주어야 한다고 한다.
# set locale UTF-8
RUN apt -y -qq install locales \
&& locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
영어권에서는 문제가 없겠지만, 한글을 쓰면 문자가 깨지기 때문에, UTF-8로 설정해주었다.
도커에 제공되는 ubuntu는 기본적으로 필수적인 요소들만 포함하여 배포하기 때문에, 모든 기능을 사용하려면 unminimize 명령을 통해 minimize된 상태를 해제해주어야 한다.
참고: https://wiki.ubuntu.com/Minimal
# ubuntu unminimize
RUN yes | unminimize
이렇게 dockerfile에 기본적인 세팅하는 부분까지 작성을 완료했다.
FROM ubuntu:latest
LABEL maintainer="Byeongmin Ryoo <bmryu0501@gmail.com>"
# update & upgrade
RUN set -xe \
&& apt -y -qq update \
&& apt -y -qq upgrade
## set time zone
RUN set -xe \
&& apt -y -qq install tzdata
ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
&& echo $TZ > /etc/timezone
# set locale UTF-8
RUN apt -y -qq install locales \
&& locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
# ubuntu unminimize
RUN yes | unminimize