도커

김태웅·2021년 9월 14일
0

개발스터디

목록 보기
1/8
post-thumbnail

컨테이너 기반의 오픈소스 가상화 플랫폼

요즘 너무 핫 하다.
사실 요즘도 아니다.

그래서 도커가 무엇일지 궁금했다.

내가 들었던 도커는 한번 환경을 컨테이너화 시켜놓으면 그 컨테이너를 통해 언제 어디서 어떤 환경이든 동일한 환경 구축이 가능하다는 점이 굉장히 신기해 보였다.

VM vs Docker

도커를 가장 먼저 검색할때 귀여운 고래 아이콘과 함께 가장 많이 볼 수 있는 그림이다.
가상 머신과 도커를비교하는 그림인데, 간단하게 생각하면 도커는 (가상 머신을 생성하고 구동하는 소프트웨어인) Hypervisor 와 GuestOS를 도커 엔진에서 구동할 수 있도록 하여 오버헤드를 줄여준다고 한다.

가상머신을 사용해본 사람들은 알것이다. 가상 머신은 자체 운영체제를 필요로 하며, 느리고 이동이 어렵고.. 등등 그냥 불편하다.
대학을 다닐때 사용해 본, 리눅스를 사용해보고 싶어서 설치했던 가상머신들은 한마디로 불편했다.

가상머신을 통해 OS가상화를 진행하면 더 높은 격리 레벨을 지원하여 보안적인 측면에서 유리하고 Host OS와의 완벽한 분리가 가능하다는 장점이 있을 수 있지만, 위에서 언급한것 처럼 무겁고 느리고 느리다.

그에 비해 도커의 컨테이너 가상화는 이식성이 뛰어나고, 성능이 향상되며 무엇보다 편하고 빠르고 빠르다.

용어

도커 컨테이너

가상화 기술 중 하나로, 기존 OS를 가상화 시키던 것과 달리 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식

도커 이미지

컨테이너를 실행할 수 있는 실행파일, 설정 값들을 가지고 있는 파일

도커 허브

https://hub.docker.com/
깃 허브 처럼, 다양한 사람들이 공개한 이미지를 pull 받을 수 있는 곳이다.

도커 파일

나만의 이미지를 만들기 위한 설계도라고 생각하면 쉽다. 이미지를 받기만 한다고 되는것이 아니라, 이를 커스텀하고 설정등을 진행해주기 위해 작성하는 파일이다.

실습

얄팍한 코딩 사전 - 가장 쉽게 배우는 도커

Node.js 이미지로 노드 설치

docker run -it node
  • run
    이미지 Pull 이후 실행 (로컬에 이미지가 없으면 Docker Hub에서 Pull, 있다면 바로 실행)
  • -it
    컨테이너 실행 후 CLI 환경 사용

이미지 확인

docker images
  • images
    로컬에 설치된 이미지 확인

컨테이너 확인

docker ps
  • ps
    현재 실행중인 도커 프로세스 확인

컨테이너 bash shell 실행

docker exec -it (컨테이너명) bash
  • (컨테이너명) 안의 bash shell 실행,
  • 각 컨테이너는 리눅스 기반의 도커 데스크탑 프로그램 위에서 돌아가므로, 리눅스 환경을 확인 할 수 있음

작업 중지된 컨테이너까지 확인

docker ps -a
  • -a
    작업이 중단된 컨테이너까지 모두 확인 (all)
  • 해당 옵션이 없다면, 실행중인 컨테이너만 확인 가능
  • 위에서 실행시킨 node.js 를 control+c 이후 확인해보자

컨테이너 및 이미지 전체 삭제

docker stop $(docker ps -aq)
docker system prune -a

FrontEnd 도커파일 확인

해당 컨테이너 실행 후 진행해야할 프로세스 및 설정들이 명령어로 설정 되어있는 것을 확인할 수 있음.

FROM // 어느 버전의 어느 이미지에서 적용될 이미지인가
RUN // 이미지를 생성하는 과정에서 실행할 명령어
WORKDIR // 명령어를 실행할 위치를 설정
CMD // RUN 명령어를 통해 이미지를 생성 하고, 이후 컨테이너가 실행될때 실행될 명령어

FrontEnd 도커파일로 이미지 생성

docker build -t  frontend-img .
  • frontend-img
    원하는 이미지명 입력
  • .
    Dockerfile로의 상대 경로 입력
    파일명이 Dockerfile이면 따로 적을필요 없음

FrontEnd 도커파일로 만든 이미지 확인

docker images

FrontEnd 도커파일로 만든 이미지로 컨테이너 실행

docker run --name frontend-con -v $(pwd):/home/node/app -p 8080:8080 frontend-img
  • --name frontend-con
    생성될 컨테이너 이름 지정
  • -v
    볼륨
    컨테이너와 특정 폴더를 공유하는 것
    pwd에 위치한 폴더들이 : /home/node/app에 들어가서 공유한다는 뜻
    컨테이너에서 CMD명령어로 로컬의 현재 위치에 있는 파일을 실행 할 수 있게 됨
  • -P 8080:8080
    포트 설정, 로컬의 8080포트를 컨테이너의 8080포트와 연결
  • frontend-img
    컨테이너로 실행할 이미지 입력

localhost:8080 접속

성공적으로 컨테이너 실행 후 http://localhost:8080 접속시 8080번 포트로 컨테이너가 실행되고 있는 것을 확인할 수 있다.

컨테이너 및 이미지 전체 삭제

DB 도커 파일 확인

RUN // 
ENV // 환경변수 설정
COPY // 컨테이너 생성시 스트립트를 실행하는 폴더로 미리 작성된 스크립트들을 이동
  • DockerFile의 COPY
    이미지를 생성하는 과정에서 해당 이미지 안에 특정 파일을 미리 넣어두는 것
  • Docker run 시 Volume 옵션
    CMD와 같이 컨테이너가 생성될 때 내부 폴더와 외부 폴더를 연결

스크립트 파일들은 컨테이너 초기화 과정에서 필요하기에, COPY를 통해 미리 넣어두는 것이 올바른 방법

DB 도커파일로 이미지 생성

docker build -t database-img .

DB 도커 파일로 만든 이미지로 컨테이너 실행

docker run --name database-con -p 3306:3306 database-img
  • -v 옵션을 통해 실제 데이터를 저장하기 위한 볼륨 공유 필요

DataGrip으로 데이터베이스 확인

실행중인 컨테이너 중지

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

백그라운드로 도커 실행

docker run --name database-con -p 3306:3306 -d database-img
  • -d
    Deamon의 약자로, 백그라운드에서 도커 실행

실시간 도커 로그 확인

docker logs -f database-con
  • database-con
    본인이 확인하고 싶은 컨테이너 명 입력

컨테이너 및 이미지 전체 삭제

docker-compose.yml 파일 확인 및 실행

도커 컴포즈 버전 확인 사이트
여러 DockerFile을 연결하고 서비스를 간편하게 실행하기 위한 파일
각종 DockerFile로 컨테이너를 실행하기 위한 설정을 하나의 파일에 작성해두고, 해당 파일로 서비스를 실행 할 수 있다.

docker-compose up 
docker-compose up -d
  • -d
    백그라운드에서 도커 컴포즈 실행
profile
Everything Counts

0개의 댓글