DevOps/Docker

도커 정리

PHM 2023. 11. 10. 16:21

Docker 란? : 컨테이너 기반의 가상화 플랫폼

 

Container 란? : 응용 프로그램과 그 의존성을 격리된 환경에 묶어 동작할 수 있도록 하는 가상화 단위

 

Docker vs Virtual Machines

Docker Container Virtual Machines
- 운영체제와 시스템에 미치는 영향이 적다.
- 빠르다. 최소한의 디스크 공간을 사용한다.
- 공유, 재구축 및 배포하는 것이 매우 쉽다.
- 앱에 필요한 모든 것을 캡슐화한다
- 운영 체제에 많은 영향을 미친다.
- 속도가 느리고, 디스크 공간을 더 많이 차지하는 경향이 있다.
- 공유, 재구축 및 배포가 도커보다 까다롭다.
- 컴퓨터 전체를 캡슐화한다. (완전한 운영체제)

 

* Docker Engine : 도커를 실행하는데 필요한 Linux를 호스팅하는 가상머신

 

Images 란? : 이미지는 모든 설정 명령과 모든 코드가 포함된 공유 가능한 패키지

    ㆍ컨테이너는 이미지의 구체적인 실행 인스턴스

 

* 레이어기반 아키텍처

: 도커는 모든 명령 결과를 캐시하고, 이미지를 다시 빌드할 때 명령을 다시 실행할 필요가 없으면 캐시된 결과를 사용

- example - Dockerfile

FROM node
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE
CMD ["node", "server.js"]

    ㆍpackage.json이 변경되지 않으면 npm install도 실행되지 않는다.

 


잘 쓰는 명령어 정리

$ docker start [ID | name]	# 기존의 중지된 컨테이너 실행

    ㆍ-a : attached 모드

$ docker stop [ID | name]	# 실행중인 컨테이너 정지
$ docker run [ID | name]	#이미지를 기반으로 새 컨테이너를 만들고 시작

    ㆍ-p 호스트포트:컨테이너포트 : 호스트와 컨테이너 간의 포트 매핑 설정

    ㆍ-it : 컨테이너를 실행할 때 대화형 터미널을 사용하도록 설정

    ㆍ-d : detached 모드 (백그라운드 실행)

    ㆍ--rm : 컨테이너가 종료될 때 자동으로 제거되는 플래그

    ㆍ--name [name] : 컨테이너 이름 지정

$ docker ps			#실행중인 모든 컨테이너

 

    ㆍ-a : 중지된 컨테이너 포함

$ docker rm [ID | name]		# 컨테이너 삭제
$ docker images			#도커 이미지 목록
$ docker rmi [ID]		#이미지 삭제
$ docker build [Dockerfile 위치]

    ㆍ-t [name:tag(version)] : image의 이름 지정

$ docker push [image_name]	#도커허브 푸쉬
$ docker pull [image_name]

 

 

번외 명령어

$ docker image prune		#사용되지 않는 모든 이미지 제거
$ docker attach [ID | name]	#실행중인 컨테이너에 연결
$ docker logs [ID | name]	# 출력된 과거의 로그 확인

    ㆍ-f : 수신대기

 

$ docker image inspect [ID]	# 이미지 정보
$ docker cp			# 호스트와 도커 사이에서 파일을 복사하는 명령어

Docker Volumes

- 볼륨은 호스트 머신의 폴더를 도커 컨테이너 내부의 폴더에 매핑

- 데이터 유지 가능 - 컨테이너가 종료된 경우에도 지속되며 계속 존재한다.