작성 배경
- 몇 주에 걸쳐 진행 중인 과제들과 프로젝트를 진행함에 있어 ubuntu18.04 환경을 사용하길 권장 받았다.
지난 경험에 미루어 봤을 때, 버전 이슈로 인한 종속성 에러는 생각보다 사람을 힘들게 한다. 😓
- 함께 정글 과정을 헤쳐나가시는 분들은 사용하는 컴퓨터의 운영체제나 환경이 제각각 다르기 때문에, EC2를 이용하는 방법으로 통합 솔루션을 제공하려는 의도를 가지고 작성하게 됐다.
개인적으로는 docker를 사용해보고 싶었던 니즈도 한 몫 했다.
<진행 전 참고하면 좋을 영상들>
🏁 목표
- 우리의 AWS EC2에 docker를 설치 → Ubuntu 18.04 이미지를 설치해,
앞으로 있을 실습에 버전 이슈로 인한 종속성 에러를 방지한다.
- 최종적으로는 VS Code에 ubuntu18.04 환경을 연결해 사용할 수 있는 개발 환경을 목표로 한다.
- ++가능하다면 이번 기회에 docker에 대해 탐구하고 학습하는 시간도 가져본다!
- 위 포스팅을 참고하면서 진행합니다.
- 아래 내용은 모두 7기 Jungler 용재님이 공유해주신 내용을 통해 작성하였습니다.
설치 과정을 함께하며 과정 모두를 캡쳐본으로 남겨준 민영누님까지.
모두에게 감사 인사를 전하며. 🫡
- 아래 설치 과정은 ubuntu22.04버전을 이용하는 AWS EC2 환경을 기준으로 작성 되었습니다.
- 우리의 목표는 ‘버전 이슈로 인한 에러의 방지’ 이므로, 혹시 모를 위험에 대비해 AWS EC2 버전도 프리티어 혜택을 받을 수 있으면서 비교적 안정적인 22.04 버전을 추천 드리겠습니다. /(개인의견)
ssh -i {받은 키페어(.pem 파일의 경로) 끌어다 놓기} ubuntu@{AWS에 적힌 내 아이피}
#아래 명령어를 통해 현재 EC2 에 올라간 리눅스 커널의 배포판 버전을 확인하실 수 있습니다. 22.04버전(프리티어 기준)이 출력된다면 정상
cat /etc/os-release
# 설치 시작 전에 패키지 목록을 최신 상태로 업데이트 합니다.
sudo apt update
# apt-get 을 써도 무방합니다.
# apt 라는 리눅스의 온라인 패키지 매니저(ios의 애플 스토어 같은 녀석)이있는데 그중에 패키지를 가져오는 옵션이 apt-get 입니다.
sudo apt install apt-transport-https ca-certificates curl software-properties-common
# docker 패키지를 받아오기전 보안을 위해 https(ssl)을 통해 암호화 하여 패키지를 다운로드 하기 위해 필요한 패키지들 입니다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
docker 패키지의 무결성 검증 을 위해 키를 받아옵니다 .
‘무결성 보장’은 패키지가 변조되지 않았음 을 보장 한다는 의미 입니다.
docker는 시스템 내부까지 다루기 때문에, 내부 정보가 유출되면 치명적일 수 있습니다.
따라서, gpg 를 사용하여 암호화 합니다.
(엔터 눌렀을 때 아무것도 안 뜨면 정상입니다.)
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
sudo apt-get update
# update는 우분투 의 공식 저장소로부터 패키지의 버전정보를 업데이트하는 것일뿐 , 적용되지 않습니다.
sudo apt install docker-ce docker-ce-cli containerd.io
# docker-ce -> docker 소켓을 가지고 있는 docker 본체
# docker-ce-cli -> 쉘 에서 docker 명령을 사용할 수 있게 해주는 docker 클라이언트 패키지
# containerd.io -> containerd.io는 docker뿐만 아니라 다른 컨테이너 런타임에서도 사용할 수 있는 컨테이너 실행에 관여하는 고수준의 컨테이너 런타임 ,
# 이는 컨테이너의 생성, 관리, 삭제 등 전반적인 수명 주기를 관리.
sudo docker --version
# 앞으로 본인의 docker 상황을 아래 명령어를 통해 모니터링 할 수 있습니다.
sudo docker ps
sudo docker run hello-world
# docker ps 명령에 -a 옵션을 주면, 내 docker의 상황을 더 상세하게 출력 해 줍니다.
sudo docker ps -a
/etc/apt/sources.list.d$
# apt가 패키지를 받아올 수 있는 저장소의 목록을 저장하고 있는 경로임.
cat /etc/passwd
# 현 리눅스 시스템의 사용자 정보 경로임.
아래와 같이 현재 EC2 사용자에 대한 정보들을 확인할 수 있습니다.
아래와 같이 원하는 사용자에 대한 정보만 골라서 확인할 수도 있습니다.
cat /etc/passwd | grep ubuntu
root 사용자는 사용자 번호 0번, 그룹 번호 0번을 사용중인 것을 확인할 수 있습니다.
위의 과정까지가 docker 설치를 다룬 내용입니다. 아래부터는 docker에 ubuntu18.04 이미지를 설치하는 과정을 다룹니다.
cd
pwd
# ubuntu18.04 이미지를 다운로드 할 폴더를 생성합니다. (이 때, sudo를 붙이면 루트 권한으로 만들어지니 붙이지 말아주세요.)
# root로 만들면 해당 디렉토리에 대해 소유자가 아니므로 권한에 따라 일부작업 수행 불가.
# 리눅스의 기본 권한이 755 이므로, 읽기,실행만 가능.
mkdir ubuntu18.04
nano 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
```
cat dockerfile
sudo docker build -t ubuntu18.04 .
# 빌드하여 컨테이너 로 실행할 수 있는 docker 이미지를 생성.
# docker run 명령어에 -d 옵션을 붙여 백그라운드로 실행
sudo docker run -d --name ubuntu18.04 ubuntu18.04
# docker 상황을 모니터링 해보면, ubuntu18.04가 잘 돌고 있는 것을 아마 확인하실 수 있을 겁니다.
sudo docker ps
# docker의 exec 명령어를 이용해 실행 중인 ubuntu18.04 환경으로 입장
sudo docker exec -it ubuntu18.04 /bin/bash
cat /etc/os-release

sudo docker exec -it ubuntu18.04 /bin/bash
sudo docker ps
sudo docker stop -d --name ubuntu18.04 ubuntu18.04
sudo docker start -d --name ubuntu18.04 ubuntu18.04
이 외에 리눅스 명령어가 아직 낯선 분들을 위하여
나아가 추가적인 과정을 거쳐 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 옵션 주면 인터렉티브 쉘 , 즉 쉘 종료하면 컨테이너도 내려감.
```bash
sudo docker run -d --name ubuntu18.04 ubuntu18.04
# 백그라운드로 실행하려면 -d 옵션으로 명령어를 실행
```
같은 이유로 멈춤 오류가 발생했다면, 터미널을 종료하시고 다시 실행 해 EC2를 연결 해 주세요.
ssh -i {받은 키페어 끌어다 놓기} ubuntu@{AWS에 적힌 내 아이피}