해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

컨테이너 대상


개발한 애플리케이션(실행파일)과 운영환경이 모두 들어있는 독립된 공간

  • 개발한 프로그램과 실행환경을 모두 컨테이너화
  • MSA 환경의 Polyglot 애플리케이션 운영
💡 MSA(Micro Service Architecture)
짧은 life Cycle을 가진 요즘 프로그래밍들에 대해 재빠른 대응 가능

컨테이너 만드는 법 => DockerFile


  • Container를 만들 수 있도록 도와주는 명령어 집합.
  • Dockerfile을 통해서 컨테이너 build!

Dockerfile

  • 쉽고 간단하고 명확한 구문을 가진 text file로 Top-Down 해석.
  • 컨테이너 이미지를 생성할 수 있는 instruction을 가짐.
  • 대소문자를 구분하지 않으나 가독성을 위해 사용
# 디렉토리 생성
mkdir build
cd build

# 실행파일 작성
vi hello.js

# 도커파일 작성
vi dockerfile

# 도커파일 내용
FROM node:12 # base image 생성
COPY hello.js / # 컨테이너의 루트 디렉토리에 hello.js 복사
CMD ["node", "/hello.js"] # 실행

# image 생성
docker build -t imagename:tag .;
docker build -t hellojs:latest .;

Dockerfile 문법

더보기

FROM

  • 베이스 이미지 지정 명령
  • Dockerfile에 무조건 있어야하는 명령어.

LABEL

  • 메타 데이터를 넣을 수 있는 기능
  • =을 기준으로 저자, 버전, 설명, 작성일자를 key를 왼쪽으로 value를 오른쪽에 작성

CMD

  • 컨테이너 동작시 자동으로 실행할 서비스나 스크립트 지정

RUN

  • 이미지 생성시, base image에서 실행할 command

COPY

  • 컨테이너 빌드 시 호스트 파일을 컨테이너로 복사

ADD

  • 컨테이너 빌드시 호스트의 (tar, url)을 컨테이너로 복사

ENV

  • 컨테이너 내의 환경변수 설정

USER

  • 명령 및 컨테이너 실행시 적용할 유저 설정

WORKDIR

  • 이미지 내에서 특정 폴더로 이동하기 위해서 쓰는 명령

EXPOSE

  • docker 컨테이너의 특정 포트를 외부에 오픈하는 설정
  • docker run -p 옵션과 유사. -p옵션과 다르게 매핑은 해주지 않고 외부에 포트를 여는 역할만.

VOLUME

  • 컨테이너내의 특정 디렉토리를 컨테이너 외부 경로에 마운트

컨테이너 배포


  • docker build -t hellojs:latest .
    • docker host에서 container 이미지 생성
    • image name은 hellojs tag는 latest
  • docker login
    • 인증
  • docker push hellojs:latest
    • docker hub에 push

nodejs 기반 애플리케이션 컨테이너 만들기


만들어놓은 컨테이너 배포하기


  • docker login
    • docker hub에 로그인
  • docker <userID>
  • docker tag <oldname> <newName>
    • image 바꾸기

  • docker push <userId>/<images>:<tag>
    • user 계정으로 container 이미지 업로드.

 

'CICD > docker' 카테고리의 다른 글

[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
[Docker] Container 개념  (0) 2024.06.17
[Docker] Docker 설치  (0) 2024.06.16
[Docker] Container를 쓰는 이유  (2) 2024.06.14
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Continaer Vs Container image


Container

  • 컨테이너는 하나의 Application 프로세스
  • 컨테이너는 완벽히 독립적인 공간에서 실행(Cpu, memory, network, disk 등등이 별도..)
  • docker Host ⇒ docker를 설치해서 daemon을 실행하는 것.(docker를 실행할 수 있는 platform 세팅)

Container image

  • build할 때 이 구조를 따라야 함.

Container와 Container image 도식화

  • Docker Host에 docker daemon 실행.
  • 하드 디스크에 file 형태로 container image들이 존재.
  • 메모리에 application이 running 중 ⇒ running 중인 프로세스(이미지) container

컨테이너 동작


  • 도커 허브에 여러 image들 저장.
  • docker search nginx를 하면 docker hub에 nginx 이미지를 가져옴
  • docker pull nginx:latest하면 nginx의 이미지를 docker hub에서 가져와 disk에 저장.
  • docker run -d —name web -p 80:80 nginx:latest으로 실행

용어정리

  • Docker Host(Linux Kernel): 도커를 실행한 client
  • Docker Daemon: docker가 실행되어 있는 환경
  • Docker Client Command:
  • Docker Hub: docker image 집합소
  • Container Images: disk로 가져온 image
  • Container: image를 실행한 Process

Docker Hub에서 컨테이너 이미지 검색


  • docker version
    • 현재 docker daemon 버전 확인
  • systemctl status docker
    • docker 상태 확인.
  • docker search <image>
    • docker hub에 해당 Image가 있는지 확인.
  • docker images
    • 내 컴퓨터 내 docker image 확인

  • docker pull <Image>
    • docker hub에 Image download
    • 다음과 같이 7개의 layer로 구성
  • docker run --name web -d -p 80:80 nginx
    • 독립적인 container id를 통해서 container 실행
  • docker ps
    • 현재 실행중인 docker process

  • docker stop web
    • web이라는 Image stop
  • docker rm web
    • 컨테이너 삭제
  • docker rm image web or docker rmi web
    • web이라는 Image 지우기
  • 현재 이미지를 사용하는 모든 컨테이너를 중지 및 삭제
    • docker stop $(docker ps -aq --filter ancestor=mv1-1/gis:latest)
    • docker rm $(docker ps -aq --filter ancestor=mv1-1/gis:latest)

Container Image layer


var/lib/docker/overlay2

image layer가 존재하는 디렉토리

docker run option

더보기
  • --name [컨테이너 이름] : 컨테이너 이름을 설정
  • -d (또는 --detach): 컨테이너를 백그라운드 모드로 실행. 이 옵션을 사용하면 컨테이너가 실행되고 나서도 현재 터미널 세션과 상호 작용하지 않고 백그라운드에서 동작.
  • -p (또는 --publish): 호스트와 컨테이너 간의 포트 매핑을 설정. '-p 호스트_포트:컨테이너_포트'와 같은 형식으로 사용되며, 호스트의 특정 포트를 컨테이너 내부의 포트와 연결하여 외부와 컨테이너 간 통신을 가능하게 함.
  • -v (또는 --volume): 호스트와 컨테이너 간의 볼륨 매핑을 설정. '-v 호스트_경로:컨테이너_경로'와 같은 형식으로 사용되며, 호스트의 경로와 컨테이너의 경로를 연결하여 데이터를 공유하거나 저장할 수 있게 함.
  • -e (또는 --env): 컨테이너 내부에서 사용할 환경 변수를 설정. '-e 변수=값' 형식으로 사용하여 컨테이너 내부의 프로세스에서 환경 변수를 사용할 수 있음.
  • -it (또는 --interactive와 --tty): 컨테이너와 상호 작용하는 대화형 모드로 컨테이너 내부의 터미널에 접속. 이 옵션을 사용하면 컨테이너 내부에서 명령어를 실행하고 터미널 세션을 유지할 수 있음.

참조

'CICD > docker' 카테고리의 다른 글

[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
[Docker] Docker 설치  (0) 2024.06.16
[Docker] Container를 쓰는 이유  (2) 2024.06.14

+ Recent posts