본문 바로가기

개발

도커란 무엇인가?

📖도커

 

Docker: Accelerated Container Application Development

Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

 

도커는 컨테이너 기반 가상화 플랫폼으로 Linux, Windows, MacOS 위에서 실행되는 컨테이너 엔진을 제공합니다.

 

📑설치

도커에서 제공하는 사이트에서 설치를 진행할 수 있습니다.

 

📑도커 허브

도커는 도커 허브를 통해 컨테이너 이미지를 공유할 수 있고 관리해 주는 온라인 서비스를 제공합니다. 이를 활용하면 소프트웨어 개발 및 배포 프로세스의 효율성을 크게 증가시킬 수 있습니다.

 

📄도커 구성요소

📑도커 이미지

도커 이미지란 애플리케이션을 실행하기 위해 필요한 모든 파일들 + 실행 방법을 묶어 놓은 것을 말합니다. Stateless 방식으로 변경되는 상태를 저장하지 않습니다.

이미지는 Layer 구조를 가지고 있어 해당 이미지를 바탕으로 다른 이미지를 만드는 것이 가능합니다.

 

자세한 내용은 사이트를 참고하면 좋습니다.

 

What is an image?

What is an image

docs.docker.com

 

📑도커 컨테이너

도커 컨테이너란 도커 이미지의 실행 인스턴스로 도커 이미지를 통해 실제로 동작하는 무언가를 말합니다. 하나의 도커 이미지를 활용해 여러 컨테이너를 만들 수 있는데, 이들은 각각 독립적(=격리되어 있다)으로 동작합니다.

도커 이미지와 다르게 변경되는 상태를 저장하는 Statefull 방식입니다. 컨테이너를 사용하는 과정에서 상태를 변경할 수도 있습니다. 하지만 컨테이너가 소멸한다면 해당 상태를 잊어버립니다.

 

자세한 내용은 사이트를 참고할 수 있습니다.

 

What is a container?

What is a container? This concept page will teach you about containers and provide a quick hands-on where you will run your first container.

docs.docker.com

 

📄도커 활용

📑이미지 만들기

1. docker commit

기존에 있던 이미지를 수정하고 docker commit 명령어를 통해 새로운 이미지를 만들어낼 수 있습니다.

 

2. Dockerfile 활용하기

Dockerfile을 도커에서 지정한 규칙을 따라 작성하면 docker build 명령어를 통해 도커 이미지를 만들 수 있습니다. 

 

자세한 내용은 사이트를 참고하기 바랍니다.

 

📑Docker hub에 등록하기

  • $docker login
  • $docker tag 이미지 새로운 이름
  • $docker push

docker hub에 등록된 모습

실습

더보기

폴더에 새로 만들 이미지의 Dockerfile을 만듭니다.

Dockerfile의 내용은 아래와 같습니다. 해당 이미지는 우분투 환경에서 파이썬을 설치하고 Dockerfile과 같은 곳에 위치한 hello.py의 내용을 복사해 출력하는 이미지입니다.

FROM ubuntu:22.04

RUN apt-get update && apt-get install -y python3
COPY hello.py .

ENTRYPOINT ["python3","hello.py"]

 아래 코드는 hello.py의 코드입니다.

print("Hello World from Python!")

 

이제 $docker build -t hello:0.1로 이미지를 생성합니다.

이미지를 빌드하는 화면

필요한 환경을 설치하고 이미지가 생성됩니다. 생성된 이미지를 docker run 명령어를 통해 실행시켜 보겠습니다.

새로운 이미지를 생성하고 컨테이너를 생성해 실행에 성공한 화면

📑컨테이너의 환경 변수 다루기

Dockerfile에 ENV라고 시작하면 환경 변수로 사용할 수 있습니다. 해당 변수는 -e 옵션을 통해 값을 우선적으로 사용할 수 있습니다. python에서는 os라이브러리를 import 하고 os.environ[변수명]을 통해 환경 변수에 접근할 수 있습니다.

환경 변수를 적용한 이미지

🍯tip! docker run 명령어와 함께 --rm 옵션을 사용한다면 컨테이너의 실행이 끝난 후 컨테이너가 삭제된다.

 

📑컨테이너 이름 지정하기

docker run 명령어에서 --name 옵션을 사용하면 컨테이너의 이름을 원하는 대로 변경할 수 있습니다.

 

📑백그라운드에서 컨테이너 실행하기

docker run 명령어의 -d 옵션을 사용면 됩니다.

 

📑네트워킹

외부에서 내부에 있는 컨테이너에 접속하기 위해서는 docker run 명령어의 -p 옵션을 활용해 호스트의 포트와 컨테이너의 포트를 연결하면 됩니다.

 

📑컨테이너 안의 파일 접근 방법

  • $docker cp 명령어 사용을 통해 파일 복사
  • Dockerfile의 ADD를 통해 이미지 빌드 시 호스트의 파일을 컨테이너에 추가
  • docker -v 옵션을 통해 호스트의 특정 디렉터리를 컨테이너와 공유(바인드 마운트)
  • 도커 볼륨