Docker (feat.dockerfile)
도커 작동순서
- 도커 클라이언트에 명령어 입력 후 도커 서버로 보냄
- 도커 서버에서 컨테이너를 위한 이미지가 캐쉬 되어 있는지 확인
- 없으면 도커허브에서 다운 받아오고 있다면 가지고 있는 이미지로 컨테이너 생성
도커 이미지
응용프로그램을 실행하는데 필요한 모든것을 포함
모든것이란?
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
도커 이미지 생성하는 순서
- Dockerfile 작성
- 도커 클라이언트에 전달
- 도커 서버
- 이미지 생성
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
Author And Source
이 문제에 관하여(Docker (feat.dockerfile)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wooya/도커저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)