본문 바로가기
Data Analysis/Computer Science

Docker

by Hagrid 2023. 4. 21.
반응형

도커란 ??

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 즉 , 도커는 컨테이너를 관리하는 플랫폼입니다.

도커는 왜 필요한가

도커가 나오게 된 히스토리

하나의 서버에 여러개의 프로그램을 설치하는 것도 문제였는데 서로 사용하는 라이브러리의 버전이 다르거나 동일한 포트를 사용하는 경우는 설치가 굉장히 까다로웠습니다. 차라리 서로 다른 서버에 설치하는게 나았고 그렇게 조립PC는 늘어나고 자원은 낭비됩니다.

시간이 흐르면서 서버 환경이 계속 바뀌는데 CentOS에 익숙해지면 Ubuntu를 써야하는 일이 생기고 AWS에 익숙해지면 Azure를 써야하는 일이 생깁니다. Chef의 cookbook에 익숙해지면 Ansible의 playbook을 작성해야 하는 일이 생깁니다. 야호

DevOps의 등장으로 개발주기가 짧아지면서 배포는 더 자주 이루어지고 마이크로서비스 아키텍쳐가 유행하면서 프로그램은 더 잘게 쪼개어져 관리는 더 복잡해집니다. 새로운 툴은 계속해서 나오고 클라우드의 발전으로 설치해야 할 서버가 수백, 수천대에 이르는 1 나누기 0 답이 없는 같은 상황에서 도커(Docker) 가 등장하고 서버관리 방식이 완전히 바뀌게 됩니다.

  • 도커이후 운영체제별로 존재하는 복잡한 설치 과정을 겪지 않는다고 생각하면 됩니다.

그래서 ?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.

컨테이너라 하면 배에 실는 네모난 화물 수송용 박스를 생각할 수 있는데 각각의 컨테이너 안에는 옷, 신발, 전자제품, 술, 과일등 다양한 화물을 넣을 수 있고 규격화되어 컨테이너선이나 트레일러등 다양한 운송수단으로 쉽게 옮길 수 있습니다.

컨테이너를 더 쉽게 설명하자면

  • 컨테이너(Container)는 서버나 컴퓨터에서 실행되는 애플리케이션을 격리된 환경에서 실행하기 위한 기술입니다. 이를 비유하면, 컨테이너는 애플리케이션을 담는 컨테이너 박스와 같다고 생각할 수 있습니다.
  • 예를 들어, 여러분이 데스크탑 컴퓨터에서 개발한 애플리케이션을 서버에서 실행하고자 한다면, 서버의 운영 체제, 라이브러리, 설정 등과 충돌이 없도록 신경써야 합니다. 이를 위해서는 서버에서 실행되는 애플리케이션을 격리된 환경에서 실행해야 합니다. 이때, 컨테이너는 이러한 격리된 환경을 제공하여, 애플리케이션을 서버에서 실행할 수 있도록 도와줍니다.
  • 컨테이너는 가상화(Virtualization) 기술을 이용하여, 서버에서 실행되는 애플리케이션을 격리된 환경에서 실행합니다. 컨테이너 안에서 실행되는 애플리케이션은 호스트 운영 체제에서 실행되는 애플리케이션과는 완전히 분리되어 있으며, 호스트 운영 체제에서 실행되는 다른 애플리케이션에도 영향을 주지 않습니다.

도커파일 , 도커 이미지와 컨테이너의 차이

  • 도커 파일 = 이미지를 만들기 위해서 도커파일을 가지고 '빌드' 해야함 / 도커는 도커이미지(Dockerfile)로 구성을 코드로 관리 할 수 있습니다. 그렇기 때문에 빠르고 쉽게 기존 컨테이너를 폐기 및 재구축 할 수 있습니다
# Dockerfile
FROM ubuntu:latest

# 설치 
RUN apt update
# - y 는 동의여부 yes 
RUN apt install -y imagemagick 

# 
$ docker build -t my-imagemagick .
Sending build context to Docker daemon  23.26MB
Step 1/3 : FROM ubuntu:latest
 ---> 93fd78260bd1
Step 2/3 : RUN apt update
 ---> Running in b7d442841e90

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [83.2 kB]
... (중략) ...
Reading package lists...
Building dependency tree...
Reading state information...
4 packages can be upgraded. Run 'apt list --upgradable' to see them.
Removing intermediate container b7d442841e90
 ---> 5345ed18a95b
Step 3/3 : RUN apt install imagemagick
 ---> Running in f3cb19701d3f

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  dbus fontconfig fontconfig-config fonts-dejavu-core fonts-droid-fallback
... (중략) ...
Need to get 36.3 MB of archives.
After this operation, 135 MB of additional disk space will be used.
Do you want to continue? [Y/n] Abort.
The command '/bin/sh -c apt install imagemagick' returned a non-zero code: 1


# 실행
$ docker run -d my-imagemagick
... (중략) ...
  • 도커 이미지 = 컨테이너를 실행하기 위한 파일과 설정 값들이 묶여 있는 것 / 컨테이너 실행에 필요한 모든 것이 이미지에 포함되어 있습니다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다.
  • 도커 컨테이너 = 컨테이너는 도커 이미지를 실행한 상태이며, 실제로 애플리케이션을 실행하고 있습니다. 이 컨테이너는 호스트 운영 체제에서 격리된 환경에서 실행되며, 컨테이너 안에서 실행되는 애플리케이션은 호스트 운영 체제에 영향을 미치지 않습니다. 즉, 도커 컨테이너는 애플리케이션을 실행하기 위한 격리된 환경을 제공하며, 호스트 운영 체제에서 실행되는 다른 애플리케이션에 영향을 미치지 않습니다.
    • 즉 , 이미지는 컨테이너를 생성하기 위한 템플릿

왜 굳이 도커를 써야하나 ?

https://youtu.be/3FcFL2C3ME8?list=PLIUCBpK1dpsNbqvMRDip7XluyIpnwB1Af

  1. 팀원 및 서버와 개발 환경을 쉽게 동기화할 수 있다.
  2. 다른 가상 환경 기술에 비해 가볍고 빠른 실행 속도를 가진다

도커이미지 만들기

판다스(Pandas)를 활용한 도커 이미지를 만들려면, 다음과 같은 과정을 거쳐야 합니다.

  1. 도커 파일 생성: 우선, 도커 파일(Dockerfile)을 생성합니다. 이 파일은 도커 이미지를 빌드하는 데 필요한 모든 정보를 담고 있습니다. 예를 들어, 다음과 같이 도커 파일을 생성할 수 있습니다.
# Base image FROM python:3.8-slim-buster
Working directory
WORKDIR /app

Copy the requirements file
COPY requirements.txt .

Install the requirements
RUN pip install --no-cache-dir -r requirements.txt

Copy the application files
COPY . .

Run the application
CMD ["python", "app.py"]




requirements.txt 파일 작성: 도커 이미지를 빌드하는 데 필요한 모든 라이브러리를 requirements.txt 파일에 작성합니다. 예를 들어, 다음과 같이 작성할 수 있습니다.

pandas==1.2.4
numpy==1.20.2
matplotlib==3.4.2




도커 이미지 빌드: 도커 파일과 requirements.txt 파일이 준비되었다면, 도커 이미지를 빌드할 수 있습니다. 예를 들어, 다음과 같이 명령어를 실행하여 이미지를 빌드할 수 있습니다.

docker build -t myimage:latest .


위 명령어는 현재 디렉토리에서 도커 파일과 requirements.txt 파일을 이용하여 myimage:latest라는 이름의 도커 이미지를 빌드합니다.

도커 컨테이너 실행: 도커 이미지를 빌드한 후에는 해당 이미지를 이용하여 도커 컨테이너를 실행할 수 있습니다. 예를 들어, 다음과 같이 명령어를 실행하여 컨테이너를 실행할 수 있습니다.

docker run -p 5000:5000 myimage:latest

위 명령어는 myimage:latest라는 이름의 이미지를 이용하여 컨테이너를 실행하며, 컨테이너의 5000번 포트를 호스트의 5000번 포트와 연결합니다. 이제 브라우저에서 http://localhost:5000/ 으로 접속하여 확인하면 됩니다

 

# 참고 

 

https://dydtjr1128.gitbook.io/understanding-docker/2.release-docker-container/4-docker-command

 

4. 도커 커맨드 - Understanding Docker

my_go_server 라는 이름을 가진 컨테이너가 이미 존재 할 때 같은 이름으로 생성 시 오류를 발생시키는데, 이때 --rm 옵션을 적용해 컨테이너를 실행한다면 컨테이너 중지 시 제거까지 해주어 오류

dydtjr1128.gitbook.io

 

반응형

댓글