데이터 엔지니어링 공부 (2)

HJ·2024년 8월 8일
0

시작

지난번에 virtualbox에 리눅스를 설치하고 원격으로 접속하는것과 명령어에 대해 다뤄 보았다. 이번 포스팅에서는 리눅스에서 가상환경을 실행시켜 분석환경을 만드는 과정 일부와 필수로 알아야하는 container, docker ,k8s 의 기본 개념 및 명령어에 대해 포스팅해볼 예정이다.

환경 구성

항상 특정 프로젝트에 필요한 라이브러리와 종속성을 독립적으로 관리하기 위해 프로젝트마다 가상환경을 만들어왔다. 리눅스에서도 마찬가지로 가상환경을 만들어 분석환경을 구성해보겠다. 과정은 다음과 같다.

1. 가상환경 만들기

평소에 파이썬기반 가상환경으로 venv를 많이 사용했었는데 일반적으로는 virtually를 많이 사용한다고 한다. 둘의 차이점을 궁금해 찾아보니 큰 차이는 없고 venv는 python 3.5이상에 내장된 라이브러리라고 한다.

가상환경은 기본적으로 만들기->환경 실행->필요 패키지 설치 과정으로 이루어지며 환경 실행이 매번 귀찮으면 .sh파일로 만들어 실행하곤 한다.

# 1.만들기
> python -m virtually '가상환경이름' 

# 2. 패키지 설치 
> pip install pandas numpy requests .....

# 3. 활성화 
> source "가상환경 폴더경로/venv/bin/activate" 

위 순서대로 만들고 실행시키면 끝이라 간단하다.

이후 'myenv'라는 .sh 파일을 만들어서 위 과정을 쉽게 할 수 있도록 스크립트를 넣어주면 된다. cat으로 스크립트 내용을 살펴보면 위와 같다.

커널은 jupyter Notebook에서 코드 실행을 담당하는 백엔드 컴포넌트이다.

> python -m ipykernel install --user --name '가상환경이름' --display-name '커널이름' 

위와 같은 명령어로 만들 수 있으며, 만들면 쥬피터 노트북을 서버에서 실행했을때 위처럼 커널 선택이 가능하다. 즉, 내가 원하는 패키지만 담은 환경에서 코딩이 가능하다.

2. 개념

container

컨테이너는 어떤 환경에서도 실행할 수 있도록 애플리케이션과 그 의존성이 패키징되어 있는 기술이다. 컨테이너는 운영 체제 수준에서 격리되어 더 가벼운 리소스 사용과 빠르게 시작 할 수 있다는점이 장점이며, 어디서나 동일한 실행 환경을 보장해 현재 엄청 많이 사용하는 기술이다.

Docker

Docker는 위와 같은 컨테이너를 생성,배포 및 관리하기 위한 플랫폼이다. 기본적으로 리눅스에서 가장 원활하게 작동하며, 도커 컨테이너는 성능의 손실이 거의 없어서 차세대 클라우드 인프라 솔루션으로 많은 개발자들에게 주목받고 있다.

kubernetes(k8s)

kubernetes(k8s)는 컨테이너화된 애플리케이션의 오케스트레이션(여러 개의 컴퓨터 시스템을 관리하고 조정)을 위한 오픈 소스 플랫폼으로 대규모 분산,자동 배포,확장등이 가능하도록 설계되었다.

즉 , 컨테이너는 Docker로만 만들 수 있는게 아닌 가장 큰 범위의 기술이고, 이러한 컨테이너를 주로 도커를 사용해서 만들고, 컨테이너화된 애플리케이션을 kubernetes를 활용해 배포,확장 및 관리를 한다.

도커 환경

컨테이너 생성,배포를 위해 가장 많이 사용하는 도커를 설치하고 환경구성을 해보겠다.

# Docker의 공식 리포지토리를 시스템에 추가하고, 해당 리포지토리에서 Docker 패키지를 설치할 수 있도록 환경을 설정

> sudo apt-get update
  sudo apt-get install ca-certificates curl gnupg
  sudo install -m 0755 -d /etc/apt/keyrings
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg   --dearmor -o /etc/apt/keyrings/docker.gpg
  sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 도커 설치
> curl -sSL get.docker.com | sh 

위처럼 도커가 정상적으로 설치되면, 버전을 확인 가능하다. 이후 도커를 내 계정(ict) 에 추가하고 컨테이너 및 이미지를 만들어 보겠다.

# ict 계정에 도커 추가 
> sudo usermod -aG docker ict

사진처럼 그룹에 도커가 생겼다.

# 컨테이너 추가
> docker run -it ubuntu:18.04

위처럼 run 명령어를 하면 pull,start,attach을 한번에 해준다. 즉 컨테이너를 만들고 실행시켜 주는 명령어이다. 또한, 도커는 컨테이너 상태를 기억하는 이미지라는 개념이 매우 중요한데, 이 도커 이미지를 불러오기만 한다면 다른사람이 만든 환경도 내 환경에서 그대로 구현이 가능하다.

도커 이미지는 새로운 이미지를 불러올때 기존에 없는것들만 새로 불러와지는 stack 형태이다. 따라서, run 명령어에 포함된 pull로 ubuntu:18.04 이미지를 불러오는데 같은 이미지가 없다면 이미지가 새로 생성된다.

위처럼 run 명령어 하나로 컨테이너와 이미지를 생성한것을 확인할 수 있다. 용량은 가상머신 전체보다 훨씬 작은 용량이다.

위처럼 dockerhub에서 다양한 이미지를 가져올 수 있다. 필자는 mysql을 가져와 컨테이너를 만들어보겠다.

> docker run -d --name mysql-test3 -e MYSQL_ROOT_PASSWORD=123 -p
  3307:3306 -v /home/ict/data:/var/lib/mysql mysql:8.3

mysql이미지를 가져와서 run명령어에 좀 더 복잡한 옵션을 추가한다면 위와같다. 설명하자면 mysql:8.3 이미지를 가져와서 mysql-test3컨테이너를 만드는데, 포트를 3307로 열고 비밀번호는 123으로 , 호스트의 /home/ict/data 과 컨테이너의 /var/lib/mysql를 동기화 시키는 명령어이다. -d 옵션이므로 background에서 실행된다.

docker ps 는 현재 실행중인 컨테이너 프로세스를 보는건데, 의도한대로 컨테이너가 만들어진것을 볼 수 있다.

mysqlworkbench를 통해 만들어진 port 와 비밀번호를 입력하면 db에 성공적으로 접속 가능하다. 즉 간단한 명령어로 mysql 서버 하나를 구축한것이다.

도커 명령어

마지막으로 docker ps 와 같이 자주 사용하는 명령어를 정리해보겠다.

docker ps
-> 도커중에서 살아있는 프로세스만 보여줌
docker ps -a
-> 도커중에서 죽은 프로세스까지 포함
docker rm [컨테이너 ID or 컨테이너 이름]
-> 컨테이너 지우기
docker rmi <이미지 ID>
-> 이미지 지우기
docker pull mysql:8.3
-> mysql 8.3버전 이미지 가져오기
docker start '컨테이너이름'
-> 컨테이너 실행시키기
docker attach '컨테이너이름'
-> 컨테이너 접근
docker stats '컨테이너이름'
-> 컨테이너 스팩 확인
docker commit '컨테이너이름' '이미지이름'
-> 도커이미지만들기
docker save '이미지이름' -o '경로/파일명'(예 ~/myimg.tar)
-> 이미지 파일 만들기(굽기)
docker load -i 
-> 도커 환경 살리기 '경로/파일명'(예 ~/myimg.tar)
docker images 
-> 이미지 리스트 확인

docker exec -it mysql-test1 /bin/bash
-> 컨테이너한테 명령어 전송하는 exec
-> mysql-test1이랑 소통하고 싶은데 /bin/bash파일이랑 하고싶어
docker rm $(docker ps -a -q)
-> $는 환경변수 , docker ps -a -q는 컨테이너 아이디 출력 
-> 즉, 모든 컨테이너 지우기 

위는 다양한 명령어를 실행한 결과이다.

마지막

이번 포스팅에서는 간단한 jupyter 환경구성과 containier , docker , k8s의 기본 개념 , docker 컨테이너 생성 및 기본 명령어에 대해 포스팅해보았다. 다음 포스팅에서는 본격적으로 docker를 활용해 더 다양한 서버를 구성해보려고 한다.

profile
데이터 공부 기록

0개의 댓글

관련 채용 정보