Docker

이동현·2023년 3월 22일
0

코드 캠프 블로그

목록 보기
6/50

1. Docker

  1. 컴퓨터 안에 또다른 컴퓨터를 설치하는 것(가장 대표적임)
  2. 내 포트가 이상해
  3. 데이터베이스! 잠시 이것좀 저장해줄래?
    docker, docker-compose이 같이 설치 되어야함
    sudo apt install docker-compose
  4. 서로 운영체제가 다르기 때문에 가상머신(VM : virtual Machine)을 이용한다.

하지만 컴퓨터가 매우 느려진다!!
그래서 등장한것이 Docker이다!!!

Docker란?

  • 부팅 등 운영체제의 핵심기능(커널)은 공유하는 가상머신
    => os전체를 새로 설치하지 않아도 됨
  • windows는 WSL을 설치해야 doker가 실행 된다.
  • setting된 file을 열면 docker를 통해 세팅을 할 수 있게 된다.
  • 설치할 목록이 셋팅되어 있어 편하며, 용량도 작고, Linux로 통일되어 있어 충돌을 방지할 수 있다.

1) Docker의 장점

  1. 개발/배포환경 통일
  2. 프로그램 미리 설치
  3. 가벼운 가상컴퓨터

2) hub.docker.com을 통해

  • hub.docker.com 사이트에서 필요한 명령어
    - docker push(보내기)
    - docker pull (받기
    - sudo apt install nodejs(nodejs설치하기)

    컴퓨터 만드는 과정(이미지)에서 실행하는 명령어 => RUN(여러번 작성 가능!!!)
    컴퓨터 실행하는 명령어 => CMD (실행 명령어로서 1번만 작성!! 처음 딱 한번 실행할 것이기 때문에)
    //1. 운영체제 및 프로그램 설치(이미 리눅스, node, npm, yarn까지 모두 깔려있는 컴퓨터 다운로드하기)
    From node:14
    docker 컴퓨터 안에 qqq가 만들어진다.
    //2. 내 컴퓨터에 있는 폴더나 파일을 도커 컴퓨터 안으로 복사하기
    Run mkdir qqq
    왼쪽이 내 컴퓨터 파일 / 오른쪽이 도커 컴퓨터 파일 index.js파일이 qqq안에 복사된다.
    COPY ./index.js /qqq/index.js
    #qqq파일로 들어가줘!!
    WORKDIR /qqq
    Run cd qqq
    여기까지가 컴퓨터 만들기
    // 3. 도커 안에서 index.js 실행시키기( 컴퓨터 실행하기)
    CMD node index.js
    소스 코드가 수정되면 build를 다시해야한다.
    index.js 안에 while(true)를 만들어 컴퓨터가 꺼지지 않게 만들어 줄 수 있으며 docker 컴퓨터로 이동할 수가 있다.
    하면 무한 docker를 꺼줄수 있다.

3) docker 설치하기

https://docs.docker.com/engine/install/ubuntu/

4) .docherignore

로컬에서는 각자의 컴퓨터 환경에서 설치된 node_modules 폴더로 모듈을 관리했다면,

가상 컴퓨터에서는 서로 다른 환경에 간섭 받지 않도록 모듈들을 설치를 해줘야합니다.

모든 소스 코드들이 복사 된 후, 모듈을 설치하는 명령어를 추가하여 로컬의 환경에 간섭받지 않도록 dockerfile 을 작성해 줍니다.

  • .dockerignore 파일을 새로 만들고 아래와 같이 적습니다. (.gitignore과 같은 맥락이라고 보면 편하다)
node_modules

2. 포트 포워딩


포트를 전달해줘서 도커 컴퓨터 안에 실행되고 있는 서버를 연동해 줄 수 있다.

docker run -p 3000:3000 컴퓨터(이미지)id
이런식으로 postman에서는 2500으로 받고 docker안에서는 4000을 받게끔 할 수 있다.

index.js가 바뀌었기 때문에 docker build .을 다시 해줘야 한다.

  • 이런식으로 원본의 포트값을 4000으로 바꾸고 복사를 하고
    docker build .
    docker images
    docker run -p 2500:4000 이미지id

3. cached

  • docker안의 최적화방식으로 docker를 만드는 데 썻던 코드를 임시저장공간 넣어준다.
  • docker안에 이미 있던 것을 다시 복사할 필요가 없기에 임시 저장공간에서 확인하여 시간을 줄여준다!
  • 특정위치에서 cached가 깨지면 그 아래 있는 코드는 다 cached를 깨버린다.(안정성을 위해)
package.json을 바꾸지 않는 다는 가정하에 yarn install을 계속해주는 수고를 덜기 위해 !!
(이 경우에는 package.json과 yarn.lock이 있어야 한다!!)
From node:14
COPY ./package.json /myfolder/
COPY ./yarn.lock /myfolder/
WORKDIR /myfolder/  
Run yarn install
COPY . /myfolder/
CMD yarn start:dev

4. docker 지우기

  • 지워졌던 모든 것을 가져오는 방법
    docker ps -a

  • 지워졌던 모든 CONTAINER ID를 가져오는 법
    docker ps -a -q

  • 지워졌던 모든 IM를 가져오는 법
    docker images -q

  • 지금 쓰고 있는 container을 제외한 모든 것을 지우는 방법


5. docker 명령어 모음

  • docker build .
    => docker파일의 내용을 수행할 수 있는 틀(docker 이미지)을 만든다.
  • docker images
    =>만들어진 이미지 목록을 보여준다.
    ex) REPOSITORY / TAG / IMAGE ID / CREATED / SIZE
  • docker run 이미지ID
    1) 지정된 이미지ID의 docker를 실행해주며, 실제 docker파일안에 cmd 명령어가 실행된다.
    2) 가상의 컴퓨터가 생성되며 컨테이너 ID가 생성된다
  • docker ps
    => 생성된 컴퓨터의 목록을 보여준다.
    ex)CONTAINER ID / IMAGE / COMMAND / CREATED / STATUS
  • docker exec -it 컨테이너ID /bin/bash
    => 들어가진 docker 파일의 쉘을 실행해준다.
  • docker stop 컨테이너ID
    => 생성된 가상의 컴퓨터를 멈추게 해준다.
  • docker run -p 2500:4000 이미지id
    => 가상의 컴퓨터를 생성 하기 전에 포트포워딩을 해준다.
  • docker ps -a
    =>실행되고 있는 컨테이너 ID를 보여준다.
  • docker ps -a -q
    =>멈췄던 것을 포함한 모든 컨테이너 ID를 보여준다.
  • docker images -q
    =>멈췄던 것을 포함한 모든 이미지 ID를 보여준다.
  • docker rm docker ps -a -q
    =>모든 컨테이너 ID를 지워준다.
  • docker rmi docker images -q
    => 모든 이미지 ID를 지워준다.
  • docker system prune -a
    => 모든 이미지/컨테이너 ID를 지워준다.

0개의 댓글