[Docker] Docker란?

Serin Yoon·2021년 8월 4일
1

Backend

목록 보기
4/5
post-thumbnail

1. Docker란?

1) 장점

  • environment disparity 문제 해결
    (ex. 윈도우 컴퓨터의 코드를 리눅스 서버에 올렸는데 작동하지 않는 경우)
  • 다른 머신에서도 같은 환경 구현

2) 방식

  • 컴퓨터와 서버에 docker 설치
  • docker 파일 생성 후 환경 설정 (ex. Ubuntu, Python, Git, ...)
  • 해당 파일을 컴퓨터, 서버에게 모두 제공
  • docker가 파일을 읽고 필요한 것들 다운
  • 컴퓨터에서 서버로 docker 파일과 함께 코드 업로드 하면 잘 작동

3) 컨테이너

  • 각기 분리되어 있으며, 독립적임
  • 하나의 서버에 여러 컨테이너 가질 수 있음 (ex. Python/Django, NodeJS, Java, ...)
  • 특정 서비스가 인기 많으면 관련 컨테이너 수 늘렸다가, 트래픽 줄어들면 수 줄이면 됨

2. Docker 기초 실습 (Windows)

1) Docker Desktop 설치

2) Powershell 실행

3) C:\Users[유저명] 내부에 폴더 생성

4) VS Code로 해당 폴더 오픈 후 git clone https://gitlab.com/yalco/practice-docker.git

5) practice-docker/frontend로 이동 후 docker run -it node

  • -it : 컨테이너를 연 다음 환경 안에서 CLI를 사용할 것임을 의미
  • NodeJS가 없어도 NodeJS가 설치되어 있을 때처럼 입력 콘솔이 나타남
  • 실행 중지하려면 ctrl + C

💥 이유

▼ Docker Hub에서 검색한 node image

  • 이미지: Linux 컴퓨터의 특정 상태를 캡쳐해서 박제해놓은 것
  • Node 이미지: 리눅스에 NodeJS가 설치된 상태를 캡쳐해서 클라우드에 올려놓은 것
  • docker는 내 컴퓨터에서 해당 이미지를 찾아본 뒤, 없으면 Docker Hub 등으로부터 해당 이름의 이미지 다운받고, 내 컴퓨터에서 컨테이너로 만듦

6) docker ps 입력하여 컨테이너 확인

  • 현재 작업이 진행 중인 컨테이너들만 표시됨
  • 모든 컨테이너 보려면 -a 붙여줌

7) docker exec -it [컨테이너명] bash 입력하여 컨테이너 내부 확인

  • 해당 컨테이너 내에서 bash shell 실행할 것임을 의미
  • 해당 컨테이너 내부를 통해 가상의 리눅스 환경으로 들어간 것

8) docker stop $(docker ps -aq), docker system prune -a 입력하여 컨테이너, 이미지 삭제

3. Dockerfile 사용하기

  • 섬세한 컨테이너 활용을 위해 Dockerfile 사용

  • 나만의 이미지 만들기 위함 (공식 이미지를 개조하는 것)

    • 왜 나만의 이미지가 필요한가?
      ex. 컴퓨터에서 http-server 돌리려면 NodeJS 뿐만 아니라 여러 모듈이 전역으로 설치되어 있어야 함. 그렇지 않으면 컨테이너 실행할 때마다 매번 모듈 설치해야 함
  • 명령 옵션

    명령 옵션설명
    FROM기반 이미지 (형식 <이미지명>:<태그>)
    MAINTAINER메인테이너(작성자) 정보
    RUNShell Script 또는 명령 실행
    CMD컨테이너 실행될 때 명령 실행
    LABEL라벨 작성
    EXPOSEhost와 연결할 포트번호 설정
    ENV환경변수 설정
    ADD파일/디렉토리 추가
    COPY파일 복사
    ENTRYPOINT컨테이너 시작될 때 스크립트 실행
    VOLUME볼륨 마운트
    USER명령 실행할 사용자 권한 지정
    WORKDIRRUN, CMD, ENTRYPOINT 명령 실행될 작업 디렉토리
    ARGDockerfile 내부 변수
    ONBUILD다른 이미지의 Base Image로 쓰인느 경우 실행될 명령 수행
    SHELLDefault Shell 지정


📑 참고 자료
https://youtu.be/chnCcGCTyBg
https://youtu.be/hWPv9LMlme8
https://blog.d0ngd0nge.xyz/docker-dockerfile-write/

profile
티스토리로 이사했습니다 🏠

0개의 댓글