다 까먹었던 도커를 다시 반복하면서 공부내용을 간략하게 정리 해봤다.
하지만 도커 같은경우에는 명령어 하나면 끝! 자세한 과정은 뒤에
도커이미지는 크게 두가지로 구성 되있음
- 시작시 실행될 명령어
- 파일 스냅샷
-> 이 기술을 토대로 도커가 나옴!
- c-group : 시스템 리소스 사용량 조절
- 네임스페이스 : 하나의 시스템에서 프로세스를 격리시킬 수 있는 기술
docker run imageName
docoker run imageName a(a=이미지 내부 실행명령어 무시하고 이것 실행) -> 하지만 이미지에 이 명령어를 실행할 수 있게하는 파일이 존재하여야함!
docker ps
docker ps -a
docker exec 컨테이너이름 (실행중인 컨테이너 안에 명령어 날리기)
docker exec -it 컨테이너이름 (it = 들어가서 계속 명령어 칠수있음)
docker exec -it 컨테이너이름 sh(컨테이너 쉘환경 접속)
create 는 하드디스크에 넣기만 / start 는 이미지 안에 있는 실행명령어 실행
docker start -a 컨테이너이름
docker stop : sigterm 을 줘서 gracefull하게 중지
docker kill : sigterm 을 주지 않고 바로 중지
FROM : 이미지이름:태그 -> 태그 안붙이면 최신으로
RUN: 도커 이미지가 생성되기전 실행될 쉘 명령어
CMD : 컨테이너가 실행 됬을때 실행될 쉘 스크립트
이미지 생성시 임시 컨테이너 생성 -> 하드디스크에 스냅샷 저장(FROM) -> RUN -> CMD -> 이미지 생성하고 임시컨테이너 삭제
이미지를 만들동안 잠시 받아두는 용도 -> 임시컨테이너
노드로 간단한 어플리케이션을 만든뒤 도커로 띄워보자
베이스이미지는 노드 10으로 하며(from)
추가적 필요한데이터 npm(노드 사용시 필요한것들은 다운 받아주는것)(run)
이미지가 만들어지고 그 이미지로 컨테이너 실행시 server.js 부터 실행(cmd)
package.json / server.js 를 같이 컨테이너 안에 넣어서 이미지를 생성하려고 COPY 명령어 사용
workdir을 설정하면 sh로 접근시 root로 접근하는게 아니라 이곳으로 바로간다
우리가 설정한 파일들이 이곳으로 저장된다.
-> workDir을 설정하지 않으면 이미지를 만들때 COPY로 만든 파일이름과 원래 있던 파일시스템 이름이 동일한 경우 덮어씌우기를 해버려서 workDir에 따로 만들어준다.
기존 방식 ./ ./ 은 코드에 변화가 있을때마다 종속성 변화가 아니였음에도 불구하고 npm install로 종속성을 다운 받는다.
하지만 종속성이 필요한 부분을 COPY명령어로 따로빼주면 -> 그 코드에 변화가 없을시에는 종속성을 따로 다운받지 않음. 기존 방식은 ./ ./ 라 변화가 있으면 무조건 다시 받았음
지금까지는 도커파일 -> 빌드 ->이미지생성 ->컨테이너 시작 순으로 진행을 해왔다. 하지만 이 방법의 단점은 코드가 수정될때마다 다시 처음부터 시작해야 된다는 단점을 가지고 있다. 이 방법은 로컬에서 컨테이너로 '복사'를 하는 방법이고 volume은 '참조'를 하는 방식이다.
npm install로 인해 노드 종속성들이 다운받아지는 곳이 node_module 하지만 로컬에서는 필요없음! 그래서 도커 컨테이너에서 로컬을 참조시 참조하지 말라는 명령어가 두번째, 세번째는 우리가 만든 파일들이 있는곳을 참조 하라는 명령어
여러 컨테이너를 한번에 컨트룰 하고 싶을때 사용!
yml 파일 작성시 services 밑으로 컨테이너 이름 하고 이미지를 넣어준다.
build는 dockerfile 위치 -> . 은 현재 디렉토리위치
docker-compose up -d --build. (d는 백그라운드에서 실행,build는 이미지가 있던 없던 이미지 빌드하고 시작)