유데미 도커 강의 정리

최형준·2022년 6월 6일
1
post-thumbnail

개요

유데미 도커&쿠버네이트 실전 가이드
인강을 들으며 혼자 강의 내용을 정리 및 상기시키기 위해 작성 시작.

도커?

도커는 컨테이너 구축을 위한 기술
컨테이너 기술이란: 표준화된 소프트웨어 유닛, 코드 종속성과 도구 포함
개발환경을 언제 어디서든 동일하게 맞춰 줄 수있음
왜 개발 환경을 맞춰야하나?
버전마다 돌아가는 코드들이 다를 수 있음 예를들어 스프링 쓸때도 보면 라이브러리 스프링 버전에따라 맞춰주는 것 처럼 개발 환경을 맞춰 줘야함

가상 머신 vs 도커

가상머신

분리된 환경 생성가능
모든것을 안정적으로 공유하고 재생산

단점

운영체제 위에서 놀아나기 때문에 용량이 커져 메모리 낭비심함(이게 도커와 큰 차이점이 아닐까..)
프로젝트 배포할려면 가상머신과 동일한 방식으로 구현해야함(유연성 떨어짐)

도커

일단 운영체제를 설치안해도됨.
컨테이너 전체적인게 있다면 도커 내부에 운영체제 설치하고 다른 컨테이너 만들어 내면서 그 안에 기본적으로 배포하기 편리한 코드,도구 만 넣으면 되기 때문에 가벼움
이미지, 도구를 통해 배포하여 공유 재구축 편리

2차 시

이미지란

실제 코드와 코드를 실행하는데 필요한 도구.
컨테이너가 이미지를 가지고 컨테이너를 실행
모든 설정 명령과 모든코드가 포함된 공유가능한 패키지

컨테이너

애플리케이션,웹,노드 서버 등을 실행하는 전체환경을 포함시키는 작은 환경 구축
이미지의 구체적인 실행 인스턴스

인스턴스: 일반적으로 실행중인 임의의 프로세스, 클래스의 현재생성된 오브젝트
데이터베이스나, 백그라운드 프로세스등 광범위한 컴퓨터 시슽메의 자원에 접근에 할당된 물리적 메모리 일부

Dockfile 구성법

FROM 도커 이미지 이름
WORKDIR /app //app 내부에서 실행된다는것을 의미
COPY . . //첫번째 점: 컨테이너 외부, 두번째점: 이미지의 외부 경로 점은 이 파일과 같은 경로를 의미 ex) /app 이때 app이라는 파일이 없으면 자동으로 생성해줌
RUN npm install 
EXPOSE 80
//컨테이너 기반이기때문에 포트 사용되는게 다 다를수있음
//그렇기 때문에 명령어가 끝나기전 도커에게 로컬이 어떤 포트를 연결할지 알려줘야함

CMD ["node","server.js"]//문자열 기반 모든것이 다되면 실행해라

RUN과 CMD 차이

cmd는 이미지가 시작될 때 실행되는것이 아닌 이미지 기반 컨테이너가 시작될때 실행되는것 CMD는 배열로 전달함

expose해도 컨테이너에 명시만 해줬을뿐 실제 실행되는건아님
해결방법(명령어): docker run -p (외부포트내가 로컬에서 사용할 포트)아무거나:내부포트(80) 이미지아이디 해줘야함

이미지 동작방식

처음 이미지를 복사하는시점에 스냅샷만듬
이다음 변경사항이있어도 이 변경사항은 이미지의 소스코드에 포함 x
만약 수정사항이있다면 새로 빌드해줘야함
레이어 기반 아키텍처
도커는 명령어 캐시에 저장시켜
만약 새로 이미지에 추가된내용이없거나하면 빌드해도 빠르게 실행됨
레이어 층구조를 통해 어느명령어부터 실행해야하는지 판단하는게 도커

detach, attach 차이

start는 터미널에서 안막고(detached) run은막음(attach)
attach는 화면의 결과가 콘솔에 출력됨
detach하고싶으면 위의 포트 다음 -d 붙이면됨
옵션 t를사용하면 입력받으수도있음

이미지 컨테이너 지우기

컨테이너 rm 이미지 rmi

docker image inspect ID하면 이미지에 대한 상세정보 보기가능

실행중인 컨테이너 추출, 혹은 추가방법

docker cp ~하면 가능

컨테이너 이름 생성

--name
ex) docker run -p 3000:80 -d --rm --name 이름 ID
이미지 이름 생성
name:tag
이미지그룹:옵션(버전같은게있음)
-t 이름
ex) docker build -t goal:lastest

버전맞추는거뿐만아니라 이미지 컨테이너 여러사람과 공유

방법1 Dockerfile을 공유하여 이미지 빌드하게하기
방법2 : 빌드된 이미지 공유
도커허브에서 또는 개인 저장소

도커허브 넣는법

일단 허브 리포지토리와 이름 맞춰주고 푸시하면됨
docker push chj5156/node-hello-world
하지만 이전에 넣기 위한 권한 필요 로그인해야함

docker login
푸시하게되면 이미지 전체를 넣는것이 아님
기존에 node라는 도커허브에서 이미지를 가져왔기 때문에 해당 이미지에서 추가부분 만 푸시

풀은 로그인 필요x
docker pull 이름.
pull할때 pull을 하면 최신버전을 가져옴
그치만 pull전 run을 실행시 로컬에 없으면 히스토리를 먼저 찾음
지금같은경우 도커허브에서 pull해왓기 떄문에 도커허브에서 최신버전을 가져오게됨

마무리

처음 도커를 공부하는데 너무 신기하고 재밌다..
좀 더 개념을 알차게 공부하기 위해선 어떤게 더 필요할까..

profile
긍정적으로 하루를 살아가자!!

5개의 댓글

comment-user-thumbnail
2022년 6월 6일

💪💪💪

1개의 답글