Docker 입문

홍찬우·2023년 7월 24일
0
post-custom-banner

가상화

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

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
post-custom-banner

0개의 댓글