Docker 복습 및 실습

박경현·2022년 11월 9일
0

Kubernetes를 사용해서 제대로 된 MSA형태의 어플리케이션을 12월 말에 만들어보자! 라는 계획을 세웠어서
배웠던 Docker와 리눅스 그리고 AWS 에 대한 복습을 다시 하게 되었습니다

이제는 지금까지 배운 방식과 다르게 강의를 보더라도 "왜"를 항상 물어보며 내게 질문하고
책을 봐도 "왜 이렇게 했지"를 질문하며 스스로 상기시켜보려고 노력중이다

목차

  1. 컨테이너를 배워야하는 이유!
  2. 컨테이너와 이미지에 대한 정의 및 차이점
  3. Docker Host란
  4. Dockerfile 내부 명령어
  5. 도커 컨테이너 실습! -> Dockerfile

컨테이너를 배워야하는 이유!

왜 컨테이너를 굳이 사용해야 할까 에서 나의 답변은

독립적으로 자신만의 메모리와 CPU를 가진 어플리케이션들을
컨테이너화 해서 여러개 돌리게 되었을때
하나의 OS에서 여러개의 어플리케이션을 돌릴때보다
서로간의 메모리 침범이나 어플리케이션 수정 시
다른 어플리케이션에 영향을 안 줄 수 있기 때문이다.

Docker Host 란

컨테이너들을 실행할 수 있는 리눅스 커널을 가진 하나의 VM

도커 호스트에 우리가 만든 이미지를 저장할 수도 있고
컨테이너를 각각 독립적인 cpu와 메모리를 할당시켜서 실행할 수도 있다

docker host란 docker daemon을 가지고 있으며
실제로 image를 저장하고 container를 돌리는 머신의 의미를 갖는다.
내부에 있는 docker daemon이 클라이언트로부터 명령어를 받아
이를 직접 실행시키는 것이다. => 즉 서버에 해당한다.

컨테이너와 이미지에 대한 정의 및 차이점

컨테이너는 하나의 프로세스 -> 이건 run등의 명령으로 실행하여 실제 구동이 가능!
이미지는 하나의 파일 -> 이걸 만들었다고 실행할 수는 없다!

Dockerfile 내부 명령어

결국 Container를 생성하려면 Docker hub에서 가져오거나 image를 직접 만들어야한다!

이때 직접 만들려면 Dockerfile내부에 목적에 맞게 선언을 해줘야한다!

# - 주석
FROM - 우리가 docker hub등에서 가져올 베이스 이미지
MAINTAINER - 메타 정보 작성
LABEL - 간단한 라벨
WORKDIR - 실제 컨테이너 빌드시 명령어 실행될 작업 디렉토리 설정
COPY - 컨테이너 빌드시 호스트의 파일을 컨테이너로 복사
ADD - (url,tar)등의 파일도 추가로 가져오기 가능
RUN - 베이스 이미지에서 실행할 명령어 !!
ENV - 환경변수
USER - 명령어 실행할 유저 설정
VOLUME - 파일 또는 디렉토리를 컨테이너의 디렉토리로 마운트
EXPOSE - 포트 지정
CMD - 명령어 + 인자
ENTRYPOINT - 명령어

도커 컨테이너 실습! -> Dockerfile을 만들고 docker hub에 배포까지

  1. VirtualBox에 들어가서 mkdir ubuntuWebserver로 디렉토리를 만든 후 cd로 이동
  2. vim dockerfile로 작성
FROM ubuntu:18.04
LABEL maintainer="pkh"
# install apache2
RUN apt-get update && \ 
	apt-get install -y apache2 #이러면 한줄이 한개의 레이어로 만들어진다 
RUN echo "Test pkh web server" > /var/www/html/index.html
EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]
  1. docker build -t web ubuntuWebserver(아니면 그냥 . 하면 됨 -> 현재 디렉토리)

  2. docker images 해서 image 만들어 졌는지 확인하기

  3. docker -tag webserver:v1 rudgus1117/webserver:v1

  4. docker push rudgus1117/webserver:v1

이러면 이미지도 dockerfile로 만들었고 배포도 끝!!

docker run -d -p 80:80 --name web rudgus1117/webserver:v1 하면 컨테이너 실행!
curl localhost:80 들어가면 echo 내용 나온다!!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글