Docker 컨테이너를 통한 Ubuntu 설치 및 테스트
○서론
- 개발을 하다보면 Linux 환경에서의 작업을 해야할 경우가 생긴다 (혹은 테스트), 그럴 경우 공부 목적이나, 테스트 목적으로
리눅스 환경을 구성하여, 진행 하는 경우가 생기게 되는데 docker 를 사용하기 이전에는
VMware(유료), VirtualBox(무료) 와 같은 가상화 소프트웨어를 사용했었다.
필자가 사용했던 Virtual Box를 예를 들자면, 설정 -> 설치 -> 실행 까지 시간이 꽤 오래 걸림, 설치 및 설정을 위해 신경써야할 것 많음.
위와 같은 이유로 매번 새로운 가상환경 설정을 하기가 여간 귀찮은 작업이라고 생각되었다. (시간적 소요 + 파일 크랙으로인한 실행 불가 등등)
최근에 Linux 환경에서 테스트 할 일이 생겨, 또 Virtual Box 를 작업해야 하나? 간단하게 구성 할 수 있는 방법을 생각해보니
docker를 활용하면 virtual box 보다는 가볍고 빠르게 할 수 있을거라는 생각에 설정에 대해 기록을 남긴다.
* 실제로 설치 및 접속까지는 굉장히 간단하다. 이 글에서는 설치 -> 간단한 프로그램 설치 ->(로컬PC <-> 컨테이너 우분투 사이의 파일 전송) 순서로 진행 할 예정이다.
* 프로그램 설치가 내용에 들어가 있지만, 2023.08.13 추가) 기본적인 Ubuntu 패키지 설치 & 설정 Shell script 추가.
목차
1. 환경
1. Docker(Desktop) : 20.10.8v
2. Mac OS Monterey
3. 터미널 iterm2 -> bin/sh
4. ubuntu : latest
설치에 앞서 Docker 혹은 Docker DeskTop 을 설치가 되어있어야 한다.
Docker Desktop 의 경우 UI 로 편하게 작업 할 수 있게 하는 Tool 이다.
2. Docker 이미지 다운로드 및 실행
2-1. docker Image 다운로드
# 예시
$docker run -i -t --name [컨테이너명] ubuntu:[version] [실행할 기본 쉘]
#실 사용 커맨드
$docker run -i -t --name first-ubuntu ubuntu /bin/bash
옵션 참고: (-i: interactive / -t: Pseudo-tty)
- --name 의 경우 이름을 지정해주는 부분이다. 추후 컨테이너의 실행,정지를 편하게 하기위해 지정하는걸 추천한다.
- ubuntu:[version] 버전을 지정하여 다운로드 하는 옵션이다, 지정하지 않을시 ubuntu의 최신 버전으로 지정된다 (latest)
- 실행할 기본 쉘의 경우 /bin/bash, /bin/sh 2가지를 선택할 수 있다.
2-2. Ubuntu 실행
기본적으로 위의 명령어를 실행한다면, 자동으로 이미지 다운 -> 설치 -> 실행 이 이루어지지만, 실행이 되지 않는다면 아래의 명령어를 통해 접속 하도록 하자.
# 1.docker Ubuntu 이미지 실행
#docker start [컨테이너명]
$docker start first-ubuntu
# 2.Ubuntu 컨테이너 접속
#docker exec -it [컨테이너명] [실행 할 쉘]
$docker exec -it first-ubuntu /bin/bash
3. 간단한 프로그램 설치 및 테스트
3-1. vim 설치
파일이나, 문서 편집을 더욱 쉽게 해주는 Tool 인 VIM 을 설치 해볼것이다.
# 1
$apt-get update
# 2
$apt-get install vim
# 3 -2번이 안될경우 -> 관리자 계정 (root)
$su
# 4 혹은
$apt-get -y install sudo
$sudo apt-get install vim
apt-get 의 경우 Ubuntu, Devian 계열 Linux 에서 쓰이는 패키지 관련 도구이다.
- 이미 접속한다면 root 계정으로 진행하기 때문에 -> 3,4 번은 진행하지 않아도 된다.
3-2. local <-> Ubuntu(Container) 간 파일 전송
실제 운영 리눅스 사용에서도 파일을 보내고, 가져오는 일이 종종있는데 이럴경우 docker 컨테이너에서 실행중인 Ubuntu 에서는 어떻게
전송하는지 알아보자.
우선 /root 디렉토리에 이동 하여 test.txt 파일을 생성하자. (이전에 설치한 vim 활용)
# /root dir 이동
$cd /root
# vim 사용 파일생성
$vim test.txt
#이후 i -> 작성 후 esc :wq
파일 이동
잠시 해당 파일은 놔두고 아래의 명령을 사용하여 파일 이동을 테스트 해보자.
#컨테이너(Ubuntu) -> 호스트(로컬PC)
$docker cp first-ubuntu:/root/test.txt ~/Users/Desktop
#호스트(PC) -> 컨테이너(Ubuntu)
$docker cp ~/Users/Desktop/logback.xml first-ubuntu:/root
작업이 성공한다면, Ubuntu /root 디렉토리 내부에 로컬PC 에서 전송한 logback.xml 파일이 존재하고,
로컬 PC 의 Desktop 에도 test.txt 파일이 생기게 된다.
cp 명령어? cp 명령어는 Copy 명령어로 파일을 복사한다는 의미의 명령어이다.
3-3. 유저 생성 및 특정 계정으로 접속
보통 Linux 를 사용하다 보면, 보안이나 여러가지 제약사항으로 인해 root 계정으로 바로 접근을 하지는 않는다.
그에 따라 계정을 만들고, 컨테이너에 특정 계정으로 접속해보자.
3-3-1. 유저 추가하기
#sudo adduser [user name]
$sudo adduser tomcat
만약 sudo 를 사용할때 패스워드를 요구한다면, root 계정의 패스워드를 먼저 생성해주자.
# root 계정 패스워드 생성
$sudo passwd root
- 이후 3-4-1 항목을 다시 실행.
- 유저 생성시 추가적인 개인정보를 입력해야 하는데, 필요없다면 'enter' 키로 패스해도 된다.
3-3-2. 생성한 user 확인
# 전체 목록 확인
$cat /etc/passwd
# 아이디만 확인
$cat -f1 -d: /etc/passwd
# useradd 명령어를 통해 생성된 계정 목록
$grep /bin/bash /etc/passwd
# useradd 명령어를 통해 생성된 계정중 아이디만 출력
$grep /bin/bash /etc/passwd | cut -f1 -d:
3-3-3. 생성한 user 에게 sudo 그룹을 추가
#sudo usermod -aG sudo [username]
$sudo usermod -aG sudo tomcat
- 새로 생성한 계정에서 'sudo' 명령어 사용시, 오류가 발생하는 경우 설정. 혹은 계정에서 sudo 권한을 사용하고 싶을때
sudo 그룹을 추가해주는것이다.
3-3-4. Docker exec 명령어를 통해 특정 계정으로 접속하는 방법
#docker exec -it -u [username] [컨테이너명] [쉘선택]
$docker exec -it -u tomcat first-ubuntu /bin/bash
- 해당 커맨드를 통해 Docker에 띄워진 Ubuntu에도 특정계정으로 진입할 수 있다.
간단하게 Linux (Ubuntu) 설치 및 테스트를 진행해 보았다.
이제 계정 설정이라던지, 리눅스 기반에서 할 수있는 공부를 편하게 해보자. (꼬여서 초기화를 해야할 상황도 문제 없다! 다시 설치하면 되니깐.)
* docker 를 통해 Ubuntu 를 설치&실행 하게 된다면, 주요 명령어들이 동작 하지 않을수가 있다 (설치가 안된것), 그럴땐 명령어 관련 패키지를 설치해주면 된다.
- netstat, curl, ipconfig 등등
2023.08.13 추가
- 아래의 shell script 파일을 Ubuntu 내부에서 실행시킨다면 초기에 필수적으로 필요한 패키지를 다운로드, 설정해준다.
(수정, 공유, 모든것은 자유! 출처만 남겨서 공유해주시면 감사하겠습니다.)
설치 & 설정 리스트
# - apt update
# - sudo
# - kor-utf8
# - curl
# - net-tools
# - vim 설치, setting (.vimrc)
# - git (name, email)
도커 컨테이너에 대한 명령어는 아래 링크에서 확인이 가능하다.
https://lucas-owner.tistory.com/51
'Linux' 카테고리의 다른 글
[Linux] Ubuntu - OOM(Out Of Memory) 메모리 부족과 대응 (1) | 2024.09.18 |
---|---|
[Linux] alias로 자주쓰는 커맨드 설정 (0) | 2023.10.25 |
[Linux] Linux(Unix) 2038년 문제 - Y2K38 (1) | 2023.01.04 |
댓글