Ubuntu(zsh) 이미지 실행하는 방법

|

Docker 컨테이너에 zsh 설치하기

이미 빌드된 이미지 사용하기

이미 Docker Hub에 위 이미지가 올라가 있기 때문에, 별도의 과정 필요없이 아래 명령어로 바로 사용할 수 있습니다.

$ docker run -it snowdeer/ubuntu-22p04 zsh

이미지 생성하는 방법

위의 이미지를 생성하는 방법입니다. Dockerfile을 이용해서 생성할 수도 있지만, 실제 Ubuntu를 사용하면서 신규 패키지를 설치하는 경우도 있기 때문에 이번에는 컨테이너에 다양한 패키지를 직접 설치한다음 이미지로 만드는 방법으로 실행해보았습니다.

zsh가 설치된 Docker 이미지는 이미 Docker Hub에서 받을 수 있지만, 제가 개인적으로 사용하는 Ubuntu 이미지에 zsh를 설치해서 사용하는 것을 더 좋아합니다.

기본 ubuntu 이미지에 zsh만 설치했을 때는 몇 가지 문제(ex. Locale 설정 등)가 발생해서 그 해결 방법을 아래와 같이 포스팅합니다.

Ubuntu 이미지 다운로드

# 최신 Ubuntu 이미지 다운로드(현 시점 기준 22.04 버전)
$ docker pull ubuntu

$ docker run -it ubuntu

필요 패키지 설치

Docker 컨테이너 속의 터미널에서는 다음과 같이 입력합니다.

$ apt update

# vi를 써도 되지만 개인적으론 nano가 더 편해서 nano도 설치
$ apt install -y git curl nano zsh

# 생략해도 되지만 network 관련 유틸리티이기 때문에 그냥 설치 
$ apt install -y iputils-ping net-tools iproute2 dnsutils

# oh-my-zsh 설치
$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

... 
Time to change your default shell to zsh:
Do you want to change your default shell to zsh? [Y/n] y

ZSH 설정 편집

nano ~/.zshrc 명령어로 편집기를 실행해서 ZSH_THEME="robbyrussell" 부분만 ZSH_THEME="agnoster"으로 수정합니다.

이 상태에서 zsh 명령어로 zshell을 실행하면 아래와 같은 오류가 발생합니다.

$ zsh

(anon):12: character not in range

ZSH Locale 문제 해결

이 문제는 Locale 때문에 발생하는 문제로 아래와 같이 해결할 수 있습니다.

$ apt install -y locales

$ locale-gen en_US.UTF-8

자, 제가 개인적으로 즐겨 사용하는 ubuntu 이미지가 생성 완료되었습니다. 이 상태에서 해당 컨테이너의 내용으로 이미지를 만들어줍니다. (컨테이너 터미널 외부에서 입력합니다.)

Docker 이미지 commit

# 먼저 컨네이터의 ID를 확인합니다.
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
d0b9b5314e29   ubuntu    "/bin/bash"   8 minutes ago   Exited (0) 2 seconds ago             adoring_carson

$ docker commit d0b9 snowdeer/ubuntu-22p04
sha256:b4a5a887e027af8a49062c67e2a53ea6cac8fd0c22d92a013ec2aba3b40896dc

$ docker images
REPOSITORY                    TAG       IMAGE ID       CREATED         SIZE
snowdeer/ubuntu-22p04         latest    b4a5a887e027   3 seconds ago   226MB

Docker Hub에 업로드

$ docker push snowdeer/ubuntu-22p04
Using default tag: latest
The push refers to repository [docker.io/snowdeer/ubuntu-22p04]
f5048f19797c: Pushed
c5ca84f245d3: Pushed
latest: digest: sha256:206d44f8646bb6bd041728531b74e193f325c340c8537b4881a3daf2f0522349 size: 741