Docker (feat.dockerfile)

도커 작동순서

  1. 도커 클라이언트에 명령어 입력 후 도커 서버로 보냄
  2. 도커 서버에서 컨테이너를 위한 이미지가 캐쉬 되어 있는지 확인
  3. 없으면 도커허브에서 다운 받아오고 있다면 가지고 있는 이미지로 컨테이너 생성

도커 이미지

응용프로그램을 실행하는데 필요한 모든것을 포함
모든것이란?
1.실행 명령어 (run node)
2.설치에 필요한 파일

이미지로 컨테이너 만들기

docker run node, redis ....

컨테이너 생성과 동시에 실행

실행중인 컨테이너 나열

docker ps

모든 컨테이너 나열

docker ps -a

컨테이너 중지

docker stop 컨테이너ID or 컨테이너Name -> 하던 작업 완료하고 중지
docker kill 컨테이너ID or 컨테이너Name -> 하던 작업 그만두고 중지

컨테이너 삭제

docker rm 컨테이너ID or 컨테이너Name

컨테이너 모두 삭제

docker rm 'docker ps -a -q'

이미지 목록 보기

sudo docker images

이미지 삭제

docker rmi 이미지ID

한번에 컨테이너, 이미지, 네트워크 모두 삭제

docker system prune
단, 실행중인 컨테이너에는 영향을 주지 않는다

이미 실행중인 컨테이너에 명령어 전달 (exec)

docker exec -it <컨테이너ID> 명령어

docker run <이미지 이름> ls 와의 차이점은
run은 새로 컨테이너를 만들어서 실행하는 것

실행중인 컨테이너 shell 환경으로 접근

docker exec -it <컨테이너ID> 명령어를 계속 치기가 귀찮다.... 이럴땐?
쉘 환경으로 접근해주면 된다.
docker exec -it <컨테이너ID> sh ->

/ # 명령어

쉘 환경 빠져나오려면 cmd + D

Dockerfile

도커 이미지 생성하는 순서

  1. Dockerfile 작성
  2. 도커 클라이언트에 전달
  3. 도커 서버
  4. 이미지 생성

dockerfile이란 도커 이미지를 만들기 위한 설정 파일이다.
컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의해준다.

Dockerfile을 도커 클라이언트에게 전달

docker build ./

도커 이미지에 이름 주는 방법 (도커빌드)

docker build -t <내도커아이디/앱이름> ./

컨테이너 실행

docker run <도커아이디/앱이름> ./

로컬 네트워크와 컨테이너 네트워크 포트 맵핑

docker run -d -p 로컬포트번호:컨테이너포트번호 이미지이름

workdir

이미지안에서 app 소스 코드를 가지고 있을 디렉토리를 생성
왜 따로 working 디렉토리가 있어야 하나?

위와 아래의 Root디렉토리 파일이 다르다
위의 이미지파일과 아래의 이미지 파일이 같다면
중복이 되므로 원래있던 폴더가 덮어씌어져 버린다.
그리고 정돈을 위해서 사용

앞으로 컨테이너에 접근할때 Root디렉토리가 아니라 Work디렉토리에 바로 접근
(dev,lib....)안보임

COPY 와 Volume 차이

copy는 로컬 -> 도커 컨테이너 로 복사
volume은 로컬 <- 도커 컨테이너 로 참조

volume을 쓰면 굳이 이미지를 빌드하지 않아도 소스코드 변경이 가능

docker run -d -p 3000:8080 -v /usr/src/app/node_module -v $(pwd):/usr/src/app togongs/nodejs

좋은 웹페이지 즐겨찾기