AWS EC2, docker를 활용한 ubuntu18.04 개발환경의 구축 1 - EC2에 docker 설치하기

@developer/takealittle.time·2024년 10월 13일
1

Jungle

목록 보기
10/21

작성 배경

  • 몇 주에 걸쳐 진행 중인 과제들과 프로젝트를 진행함에 있어 ubuntu18.04 환경을 사용하길 권장 받았다.
    지난 경험에 미루어 봤을 때, 버전 이슈로 인한 종속성 에러는 생각보다 사람을 힘들게 한다. 😓

  • 함께 정글 과정을 헤쳐나가시는 분들은 사용하는 컴퓨터의 운영체제나 환경이 제각각 다르기 때문에, EC2를 이용하는 방법으로 통합 솔루션을 제공하려는 의도를 가지고 작성하게 됐다.
    개인적으로는 docker를 사용해보고 싶었던 니즈도 한 몫 했다.

<진행 전 참고하면 좋을 영상들>


🏁 목표

  • 우리의 AWS EC2에 docker를 설치 → Ubuntu 18.04 이미지를 설치해,
    앞으로 있을 실습에 버전 이슈로 인한 종속성 에러를 방지한다.


  • 최종적으로는 VS Code에 ubuntu18.04 환경을 연결해 사용할 수 있는 개발 환경을 목표로 한다.

  • ++가능하다면 이번 기회에 docker에 대해 탐구하고 학습하는 시간도 가져본다!

도커

  • 위 포스팅을 참고하면서 진행합니다.
  • 아래 내용은 모두 7기 Jungler 용재님이 공유해주신 내용을 통해 작성하였습니다.
    설치 과정을 함께하며 과정 모두를 캡쳐본으로 남겨준 민영누님까지.
    모두에게 감사 인사를 전하며. 🫡

00. 들어가며

  • 아래 내용을 통해 우리는 위와 같은 형태의 개발 환경을 구축합니다. 본인이 사용 중인 EC2 에 Docker를 설치하고, 여기에 Ubuntu18.04 이미지를 이용해 컨테이너를 적재합니다.
  • 우리는 딱 ‘버전 이슈(종속성 에러)의 방지’를 위해 Docker를 통해 Ubuntu18.04 환경을 이용할 뿐 입니다.

01. EC2에 docker 설치하기

  • 아래 설치 과정은 ubuntu22.04버전을 이용하는 AWS EC2 환경을 기준으로 작성 되었습니다.
  • 우리의 목표는 ‘버전 이슈로 인한 에러의 방지’ 이므로, 혹시 모를 위험에 대비해 AWS EC2 버전도 프리티어 혜택을 받을 수 있으면서 비교적 안정적인 22.04 버전을 추천 드리겠습니다. /(개인의견)

00. 본인 AWS EC2에 ssh 연결

ssh -i {받은 키페어(.pem 파일의 경로) 끌어다 놓기} ubuntu@{AWS에 적힌 내 아이피}
  • 우리는 사용 중인 EC2에 docker를 설치할 것이므로, EC2에 먼저 연결 하겠습니다.
  • 각자의 쉘을 이용해서 본인 EC2에 위와 같이 연결 해 주세요.
#아래 명령어를 통해 현재 EC2 에 올라간 리눅스 커널의 배포판 버전을 확인하실 수 있습니다. 22.04버전(프리티어 기준)이 출력된다면 정상
cat /etc/os-release
  • EC2에 연결하셨다면, 위의 명령어를 이용해 버전을 먼저 확인 해 줍니다.

1. 패키지 목록 업데이트

# 설치 시작 전에 패키지 목록을 최신 상태로 업데이트 합니다.
sudo apt update
# apt-get 을 써도 무방합니다.
# apt 라는 리눅스의 온라인 패키지 매니저(ios의 애플 스토어 같은 녀석)이있는데 그중에 패키지를 가져오는 옵션이 apt-get 입니다.

2. 필요한 패키지 설치

  • HTTPS를 통해 패키지를 사용하고, APT를 통해 docker의 공식 리포지토리를 추가하기 위해 필요한 패키지들을 설치합니다.
sudo apt install apt-transport-https ca-certificates curl software-properties-common

# docker 패키지를 받아오기전 보안을 위해 https(ssl)을 통해 암호화 하여 패키지를 다운로드 하기 위해 필요한 패키지들 입니다.

3. docker의 GPG 키 추가

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  • docker 패키지의 무결성 검증 을 위해 키를 받아옵니다 .

    ‘무결성 보장’은 패키지가 변조되지 않았음 을 보장 한다는 의미 입니다.

  • docker는 시스템 내부까지 다루기 때문에, 내부 정보가 유출되면 치명적일 수 있습니다.

  • 따라서, gpg 를 사용하여 암호화 합니다.

  • (엔터 눌렀을 때 아무것도 안 뜨면 정상입니다.)

    • cd / etc/apt 로 이동 해 ls 명령어로 폴더를 살펴보면 gpg 키가 받아와진 것을 확인할 수 있습니다.

4. docker 공식 리포지토리 연결

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • (docker의 공식 APT 리포지토리를 추가하는 명령어)

  • 이는 리눅스 의 온라인 패키지 매니저(apt) 가 docker 의 저장소를 통해 docker 패키지를 검색하여 다운 할 수 있도록 합니다.
  • cd sources.list.d 폴더로 이동 후, ls로 폴더를 살펴보면 docker의 공식 리포지토리가 받아와진 것 을 확인할 수 있습니다.
  • docker의 공식 리포지토리를 추가하는 과정은 마치 우리가 git에서 git repository를 clone 해 오는 것과 같습니다.
    이제 우리의 EC2는 docker의 공식 리포지토리와 연결되어서, docker를 다운 받아올 수 있게 되었습니다.

5. 패키지 목록 다시 업데이트

sudo apt-get update

# update는 우분투 의 공식 저장소로부터 패키지의 버전정보를 업데이트하는 것일뿐 , 적용되지 않습니다.
  • docker 리포지토리까지 추가가 잘 되었다면, 패키지 목록을 다시 업데이트 합니다.
  • 다시 업데이트 하는 과정에는 위와 같은 출력이 있을 겁니다.
    ~//download.docker.com/lunux ~ 와 같은 내용들이 보여진다면 정상입니다.
  • 이제, docker를 설치 해 봅시다.

6. docker 설치

sudo apt install docker-ce docker-ce-cli containerd.io

# docker-ce -> docker 소켓을 가지고 있는 docker 본체 
# docker-ce-cli -> 쉘 에서 docker 명령을 사용할 수 있게 해주는 docker 클라이언트 패키지
# containerd.io -> containerd.io는 docker뿐만 아니라 다른 컨테이너 런타임에서도 사용할 수 있는 컨테이너 실행에 관여하는 고수준의 컨테이너 런타임 , 
# 이는 컨테이너의 생성, 관리, 삭제 등 전반적인 수명 주기를 관리. 
  • docker 엔진과 docker CLI를 설치합니다.
sudo docker --version
  • docker가 정상적으로 설치되었는지 확인합니다.
  • 위와 같이 docker의 버전이 출력된다면 정상적으로 설치된 것입니다.
# 앞으로 본인의 docker 상황을 아래 명령어를 통해 모니터링 할 수 있습니다.
sudo docker ps

  • 현재는 docker에서 아무런 서비스도 실행하지 않았기 때문에, 위와 같이 출력됩니다.
    간단한 실행을 돌리면서, docker가 정상적으로 실행되는지 확인 해 보겠습니다.
sudo docker run hello-world

  • docker를 이용해 hello-world를 실행 해 보았습니다. 이제 다시 내 docker 상황을 살펴봅시다.
# docker ps 명령에 -a 옵션을 주면, 내 docker의 상황을 더 상세하게 출력 해 줍니다.
sudo docker ps -a

  • 방금 실행한 hello-world가 위와 같이 보여지면 됩니다.
  • docker가 잘 설치된 것을 확인 했다면, 이제 ubuntu18.04 환경을 docker 위에 돌려보겠습니다.

✍️ (잠깐 번외) 실행 전 사용자 번호 / 그룹 번호 확인해보기 :: skip 하셔도 됩니다 ~


/etc/apt/sources.list.d$

# apt가 패키지를 받아올 수 있는 저장소의 목록을 저장하고 있는 경로임.

  • sources.list 폴더 안에 passwd 파일을 잠깐 살펴봅시다.
cat /etc/passwd

# 현 리눅스 시스템의 사용자 정보 경로임.
  • 아래와 같이 현재 EC2 사용자에 대한 정보들을 확인할 수 있습니다.

    • 예를 들어, ubuntu라는 사용자명의 사용자는 사용자 번호 1000번, 그룹 번호 1000번에 할당된 것입니다.
  • 아래와 같이 원하는 사용자에 대한 정보만 골라서 확인할 수도 있습니다.

    cat /etc/passwd | grep ubuntu

  • root 사용자는 사용자 번호 0번, 그룹 번호 0번을 사용중인 것을 확인할 수 있습니다.

    • docker는 기본적으로 root 권한으로 실행됩니다.
  • 위의 과정까지가 docker 설치를 다룬 내용입니다. 아래부터는 docker에 ubuntu18.04 이미지를 설치하는 과정을 다룹니다.


02. docker 위에 ubuntu18.04 이미지 설치

00. ubuntu 이미지 설치 전 폴더 생성, dockerfile 설정

cd
pwd

  • 설치 전 cd 명령어를 통해 홈 디렉토리로 나가줍니다. pwd 명령어를 통해 현재 디렉토리를 확인했을 때, 경로가 /home/ubuntu 라면 맞습니다.
# ubuntu18.04 이미지를 다운로드 할 폴더를 생성합니다. (이 때, sudo를 붙이면 루트 권한으로 만들어지니 붙이지 말아주세요.)
# root로 만들면 해당 디렉토리에 대해 소유자가 아니므로 권한에 따라 일부작업 수행 불가.
# 리눅스의 기본 권한이 755 이므로, 읽기,실행만 가능.
mkdir ubuntu18.04
  • nano 편집기로 dockerfile을 열어줍니다.
nano dockerfile

  • 위와 같은 텍스트 편집기 화면이 보여질 것입니다. 아래 내용을 붙여넣고, 사용자 이름과 비밀번호를 수정해주세요.
  • 미리 필요에 맞게 ubuntu18.04 이미지를 이용해 작성 해 둔 dockerfile 입니다.
# Ubuntu 18.04 이미지를 베이스로 사용
FROM ubuntu:18.04
# apt 패키지 목록 업데이트 및 기본 패키지 설치
RUN apt-get update && apt-get install -y \
    curl \
    vim \
    git \
    sudo \
    net-tools \
    iputils-ping \
    locales \
    && apt-get clean
# 로케일 설정 (UTF-8 로케일 설정)
RUN locale-gen en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
# 사용자 {사용자 이름} 추가 및 sudo 권한 부여
RUN useradd -ms /bin/bash 여기 사용자 이름 && adduser 여기 사용자 이름 sudo
# root 비밀번호 변경 (원하는 비밀번호로 변경)
RUN echo "root:여기 원하는 패스워드" | chpasswd
# {사용자 이름}의 사용자 비밀번호 변경 (원하는 비밀번호로 변경)
RUN echo "여기 사용자 이름:여기 원하는 패스워드" | chpasswd
# 홈 디렉토리로 워킹 디렉토리 설정
WORKDIR /home/여기 사용자 이름
# {사용자 이름}으로 스위치하여 bash 사용
USER 여기 사용자 이름
# 컨테이너 종료 방지: 무한 대기 프로세스 실행(docker는 컨테이너 내부에서 돌아가는 프로세스가 없으면 스스로 컨테이너 종료 시킴, 따라서 무한대기 프로세스 생성)
CMD ["tail", "-f", "/dev/null"]
```bash
# 수정이 끝났다면
ctrl x   누르고
Y 누르고 enter
```
  • dockerfile이 잘 설정되었는지 확인합니다.
cat dockerfile
  • 위의 nano 편집기를 이용해 작성한 내용이 출력된다면 제대로 수정된 것입니다.

01. 빌드 과정

sudo docker build -t ubuntu18.04 .

# 빌드하여 컨테이너 로 실행할 수 있는 docker 이미지를 생성.

  • 위와 같이 빌드 과정의 내용을 확인할 수 있습니다.

02. docker에서 ubuntu18.04 실행

# docker run 명령어에 -d 옵션을 붙여 백그라운드로 실행 
sudo docker run -d --name ubuntu18.04 ubuntu18.04
# docker 상황을 모니터링 해보면, ubuntu18.04가 잘 돌고 있는 것을 아마 확인하실 수 있을 겁니다.
sudo docker ps

  • docker 위에서 ubuntu18.04 컨테이너가 생성된 것을 확인했다면, ubuntu18.04 환경으로 입장 해 줍니다.
# docker의 exec 명령어를 이용해 실행 중인 ubuntu18.04 환경으로 입장
sudo docker exec -it ubuntu18.04 /bin/bash
  • 실행 중인 컨테이너를 확인 해 봅시다.
cat /etc/os-release

  • 위와 같이 ubuntu18.04 버전을 확인할 수 있으면 됩니다. 이제 설치가 끝났습니다.
  • pwd 명령어를 이용해 현재 경로를 확인해보면, ‘/home/사용자이름’ 이 출력 될 것입니다.
    ubuntu18.04의 home 디렉토리라고 생각하시면 됩니다.
    ![](https://velog.velcdn.com/images/takealittletime/post/c674fbff-044e-45b4-aa8f-5cf95a81f964/image.png)
  • 이제 이 경로에 mkdir 명령어를 이용해 디렉토리를 만들고, git clone 등 작업을 수행하시면서 주차별 과제를 해결 하시면 됩니다. 😊
  • 위의 ubuntu18.04는 우리가 따로 종료를 하지 않는 이상, 이제 EC2→docker 환경에서 계속해서 실행되고 있다고 생각하시면 됩니다.
  • 종료하실 때는 exit를 두 번 (docker의 ubuntu18.04에서 EC2로 나가는 exit 한 번, EC2에서 로컬로 돌아오는 exit 한 번) 이용해주시면 됩니다.
    • exit 하면 docker의 ubuntu18.04 환경에서 나가는 것을 확인할 수 있음
      (docker가 꺼지는 것은 아님)

마치며..

✅ 간단한 명령어 모음

  1. docker에서 실행중인 ubuntu18.04 환경으로 입장하는 명령어
    • 앞으로 ubuntu18.04 환경에 입장하고 싶을 때는 EC2 환경에서 아래 명령어를 이용하시면 됩니다.
sudo docker exec -it ubuntu18.04 /bin/bash
  1. docker의 현재 상태를 확인하는 명령어
sudo docker ps
  1. docker에서 해당 컨테이너를 중지하는 명령어
sudo docker stop -d --name ubuntu18.04 ubuntu18.04
  1. docker에서 중지한 컨테이너를 다시 실행하는 명령어
sudo docker start -d --name ubuntu18.04 ubuntu18.04
  1. 이 외에 리눅스 명령어가 아직 낯선 분들을 위하여

    [Rocky Linux] 15가지 리눅스 기본 명령어 정리


  • 나아가 추가적인 과정을 거쳐 VS Code에서 ubuntu18.04 환경을 ssh를 통해 한 번에 연결하는 데에 성공하였습니다.


  • VS code와의 연결을 위한 dockerfile의 수정 등에 대한 내용은 나중에 추가적으로 작성토록 하겠습니다.


  • 🚩 docker를 미리 설치해본 선발대 인원들은 여기서 보통 멈춤 현상이 발생하는 오류가 발생했습니다.

    ~ ‘2. Docker에 ubuntu18.04 실행’ 부분에서 ~

    # docker의 run명령어를 이용해 ubuntu18.04 이미지를 실행 하여 컨테이너를 띄움.
    # 아래 명령어는 무한대기 프로세스 생성후 인터렉티스 로 접근하면 무한대기 때문에 화면이 멈춘것 처럼 보일 수 있음.
    # 아래 코드 사용 하지 말것.
    sudo docker run -it --name ubuntu18.04 ubuntu18.04 /bin/bash
    # -it 옵션 주면 인터렉티브 쉘 , 즉 쉘 종료하면 컨테이너도 내려감.

    • 확인해보니 docker는 잘 실행되고 있더라구요.
      / 혹시나 해당 오류에 대해 피드백을 주실 수 있는 분이 계시다면 언제든 환영입니다.
      - ㄴ> 오류 해결 되었습니다 ✔️
      → 무한대기 프로세스 생성후 -it (interactive) 옵션으로 접근하면 무한대기 때문에 화면이 멈춘 것처럼 보일 수 있습니다.
          ```bash
          sudo docker run -d --name ubuntu18.04 ubuntu18.04
          # 백그라운드로 실행하려면 -d 옵션으로 명령어를 실행 
          ```
          
  • 같은 이유로 멈춤 오류가 발생했다면, 터미널을 종료하시고 다시 실행 해 EC2를 연결 해 주세요.

    ssh -i {받은 키페어 끌어다 놓기} ubuntu@{AWS에 적힌 내 아이피}

profile
능동적으로 사고하고, 성장하기 위한. 🌱

0개의 댓글

관련 채용 정보