도커 기본 개념

bo-yoon·2021년 8월 29일
0

docker 

목록 보기
2/2

docker 란?

컨테이너 단위로 애플리케이션을 패키징, 배포 실행하기 위한 플랫폼이다.

  • 컨테이너란? 가볍게 다룰수 있는 vm. 복잡한 세팅 필요 없이 간단하게 서버를 만들수 있다.
  • 컨테이너에서 실행 되는 프로세스는 다른 모든 프로세서와 마찬가지로 호스트 운영체제 내에서 실행되지만 여전히 다른 프로세스와 격리 되어 있다. 그래서 프로세스 입장에서 보면 시스템과 운영체제에서 실행되는 유일한 프로세스 인것처럼 보인다.

이렇게 격리 가능한 이유?

  • 리눅스 네임스페이스
  • 컨트롤 그룹

주요 개념

  • 이미지 : 애플리케이션과 해당 환경을 패키지화
  • 레지스트리 : 저장소
  • 컨테이너 : 이미지 기반으로 생성된 프로세스

작동 원리

  • Registry에서 도커 Image 를 가지고와 Container 화 시킨다.


도커 라이프사이클



도커 멀티 스테이지

: 도커 이미지를 만들때 빌드 과정에서는 필요하지만, 최종적으로는 필요 없는 레이어는 삭제



명령어 정리

이미지

  • 이미지 검색 명령어
docker search tomcat
  • 도커 이미지 다운로드
docker pull {이미지 이름}:{테그}
  • 도커 이미지 삭제
docker rmi {이미지 이름/ 이미지 번호}
  • 다운 받은 도커 이미지 보기
docker images

이미지 중 <none> 이라고 뜨는 것은 댕글링(dangling) 이미지라고 한다.

  • 댕글링 이미지만 보기
docker images -f dangling=true
  • 최근에 다운받은 2개의 이미지만 보기
docker images | head -n 3
  • 도커 이미지 히스토리 확인
    : 이 이미지가 어떤 과정을 통해 생성되었는지, 이 이미지를 만드는 데 사용되는 명령어 확인
docker history nginx:stable


실행

  • 컨테이너 생성 및 실행 (run)
docker run -d --name {별명} {이미지명}
  • -p : 포트포워딩 (예시 : -p 8080:80 )
  • -d: 백그라운드
  • --restart always : 도커를 설치한 환경에 문제가 생겨 중단될때 도커가 리스타트 되면 같이 이 컨테이너도 리스타트
  • --restart no : 기본값, 시스템 재구동시 컨테이너 재시작하지 않음
  • --restart on-failure : 시스템 재구동시 컨테이너 재시작
  • --restart unless-stopped : 시스템 재구동시 사용자가 직접 정지 하지 않은 컨테이너만 시작
  • --name : 별칭 ( --name mynginx)

예시

docker run -d -p 8080:80 --name mynginx --restart always nginx

  • 실행 중인 컨테이너
docker ps
  • 필터링 해서 실행중인 컨테이너 보기
docker ps -f name=mynginx
  • 실행 중인 것, 대기 중인 컨테이너 전부 확인
docker ps -a
  • 컨테이너 아이디만 출력
docker ps -q 
  • 도커 파일 기반으로 이미지 빌드 생성 ( 해당 경로에 도커파일이 있어야함)
docker build -t {이미지 이름} .
  • 컨테이너 중지
docker stop {컨테이너 명, 혹은 컨테이너아이디}
  • 특정 컨테이너 중지
docker stop $(docker ps -q -f name=mynginx )
  • 이미지가 nginx 인것만 조회
docker ps -a -f ancestor=nginx
  • 컨테이너 삭제
docker rm {컨테이너 명 혹은 컨테이너 아이디}
  • 테그 달기
docker tag {프로그램 명} {이미지명}/{테크}


응용

  • 도커 컨테이너에 대한 상세 정보를 Json 형식으로 출력
docker inspect {컨테이너 명}
  • 실행 중인 컨테이너 내부 접속

docker exec -it {컨테이너 명 } bash
  • 실행 중인 컨테이너에게 명령어 실행시키기
docker exec {컨테이너} {리눅스 명령어}
  • 레지스트리에 이미지 푸시
docker push {이미지명}/{테그}
  • 특정 파일을 컨테이너 안으로 복사
docker cp {호스트 os의 파일 경로} {컨테이너이름}:{컨테이너 내부 경로}


도커 볼륨

볼륨이란? 도커 컨테이너가 접근할 수 있는 호스트 os의 공간

  • 도커 볼륨 생성
docker volume create {볼륨 이름}
  • 볼륨 살펴보기

docker volume inspect sample-volume
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/sample-volume/_data",
        "Name": "sample-volume",
        "Options": {},
        "Scope": "local"
    }
]
  • 볼륨을 docker 컨테이너와 연결
docker run  -v {볼륨명}:{컨테이너 내부 경로} {볼륨명} {컨테이너이미지}


도커 이미지 명령어

  • FORM {이미지명}
    : 해당 이미지를 베이스로 서버를 생성

  • COPY {호스트 OS에 파일경로} {게스트 OS에 옮겨 놓을 파일 경로}
    : 옮겨놓을 파일

  • LABEL {키}={벨류}
    : 키벨류 형식으로 이미지에 부가적인 설명 추가

  • EXPOSE {포트번호}
    : 이 포트번호로 컨테이너 구동

  • WORKDIR {게스트 OS 경로}
    : 작업 경로

  • ENTRYPOINT [ "실행할 명령어" ]
    : 컨테이너 안에서 실행할 명령어 리스트


멀티 스테이지 방식으로 도커이미지 명령어

: 두번 빌드함. 하나는 호스트 OS에서 하나는 컨테이너 내 게스트 OS에서
예시) 도커 파일

FROM openjdk:8 AS sample
RUN chmod 700 mvnw
RUN ./mvnw clean package

FROM openjdk:8 
EXPOSE 8089
COPY --from=sample target/sample.jar /app/sample.jar
WORKDIR /app
ENTRYPOINT [ "java", "-jar", "app.jar" ]


profile
개발 로그 🍎 🍎 🍎

0개의 댓글