Docker 입문

홍찬우·2023년 7월 24일

가상화

개발할 때, 서비스 운영에 사용하는 서버에 직접 들어가서 개발하지 않음

Local 환경에서 개발하고 완료되면 Staging 서버, Production 서버에 배포

Local 환경과 Production 서버 환경이 다른 경우는?

  • e.g., local 환경은 윈도우, 서버 환경은 linux

밀키트처럼 집에서도 사용하고 레스토랑에서도 사용하는 방법

특정 SW 환경을 만들고, Local과 Production 서버에서 그대로 활용

  • 어느 환경에서나 동일한 환경으로 프로그램 실행

  • VM은 OS위에 OS를 매번 실행

    • 리소스를 굉장히 많이 사용하며 무거움
  • Container은 Host OS 하나만 존재

    • 빠르고 가벼움



Docker

Container 기술을 쉽게 사용할 수 있도록 나온 도구

PC방에서 특정 게임만 설치하고, 고객이 특정 프로그램을 깔아도 재부팅할 때 항상 PC방에서 저장해준 형태로 다시 복구

⇒ Docker Image로 만들어두고, 재부팅하면 Docker Image 상태로 실행


Docker Image

컨테이너를 실행할 때 사용할 수 있는 템플릿

Read Only


Docker Container

Docker Image를 활용해 실행된 인스턴스

Write 가능

다른 사람이 만든 소프트웨어를 Docker Image라고 함

  • OS, 설정을 포함한 실행 환경

  • Linux, Window, Mac 어디서나 동일하게 실행 가능

  • e.g., MySQL을 Docker로 실행, Jupyter Notebook을 Docker로 실행


자신만의 이미지를 만들면 다른 사람에게 공유 가능

  • 원격 저장소에 저장하면 어디서나 사용할 수 있음

  • 원격 저장소 : Container Registry




실습

MySQL 실행하기 예제

docker pull mysql:8

  • mysql 8 버전의 이미지를 다운
  • docker pull 명령어 사용

docker images

  • 다운받은 이미지 확인 가능


docker run "이미지 이름:태그"

  • 다운받은 MySQL 이미지 기반으로 Docker Container를 만들고 실행
  • docker run --name 컨테이너 이름 -e 환경변수 설정 -d -p 포트 지정 이미지

  • 컨테이너 이름을 mysql-tutorial로 지정

  • MySQL은 환경변수로 MYSQL_ROOT_PASSWORD를 필요로 함

  • -d

    • 컨테이너를 백그라운드 모드로 실행

    • -d 옵션이 없으면 컨테이너를 나갈 시 실행이 종료

  • -p 3306:3306

    • 로컬 호스트 포트:컨테이너 포트

    • 로컬 포트 3306으로 접근 시 컨테이너 포트 3306으로 연결되도록 설정


docker ps

  • 실행중인 컨테이너 확인

docker exec -it “컨테이너 이름(또는 OID)” /bin/bash

  • MySQL이 실행되고 있는지 확인하기 위해 컨테이너에 진입

  • 진입 후 mysql -u root -p 입력 시 MySQL 쉘 화면이 나타남


docker stop “컨테이너 이름(또는 ID)”

  • 실행 중인 컨테이너 중지

docker rm “컨테이너 이름(ID)”

  • 중지된 컨테이너 삭제

Volume Mount

  • docker 컨테이너 내부는 특별한 설정이 없으면 컨테이너를 삭제할 때 파일이 사라짐

    • Host와 Container 파일 공유가 되지 않음
  • Volume Mount를 진행하면 Host와 Container의 폴더가 공유

  • -v host_folder:Container_folder

    • e.g., docker run -it -p 3306:3306 -v 호스트 폴더:컨테이너 폴더


Docker Image 만들기

Dockerfile 만들기



Registry에 Docker Image Push

dockerhub 이용

push한 이미지는 docker pull로 어디서든 받을 수 있음







※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※

profile
AI-Kid

0개의 댓글