DevCourse TIL Day3 Week11 - k8s, docker

김태준·2023년 6월 17일
0

Data Enginnering DevCourse

목록 보기
49/93
post-thumbnail

✅ docker compose 사용

image 빌드하기
-> docker build USER_NAME/IMAGE_NAME
빌드된 이미지들 확인하기
-> docker images /// docker image ls
이미지 삭제
-> docker image rm IMAGE_ID /// docker rmi
docker hub 연동
-> docker login -u 사용자ID -p 사용자PW
image pull or push
-> docker pull USER_NAME/IMAGE_NAME // docker push USER_NAME/IMAGE_NAME

🎈 docker container 관련 명령

  • docker create
  • docker run --name=지정할 컨테이너이름 -p -v IMAGE_NAME : 빌드한 이미지로 생성
  • docker ps : 현 실행중인 컨테이너 ID 출력
  • docker ps -a // docker ps -q
  • docker stop, start, restart, kill, pause, unpause, rm CONTAINERID (이름도 가능)
  • docker logs -f CONTAINERID : 컨테이너 로그 출력 가능 (ERROR확인)
  • docker logs --tail 100 CONTAINERID : 뒷부분 100줄만 출력
  • docker run -d USER_NAME/CONTAINER_NAME : (백그라운드에서 컨테이너 실행)

✅ docker volume

docker container가 버그나 user 입장에서 실행 중에 중단시키는 과정이 발생될 수 있다.
이때 데이터를 영구적으로 보관하기 위해 사용하는 기능이 docker volume이다.
docker container 내 가상 파일 시스템과 호스트 시스템의 파일 시스템을 맵핑하여 진행
-> 이 경우 docker container가 중단되도 모든 airflow logs는 기록이 남게 된다.
ex) container로 MySQL 실행하는 경우 데이터는 모두 docker volume에 저장된다.

docker volume 의 타입은 다음과 같다.

    1. Host Volumes : docker run -v를 실행할 때 페어로 지정된다. 예시로는 다음과 같다.
      -> docker run -v /home/taejun/logs:/var/lib/airflow/logs
      -> :을 기준으로 앞부분은 호스트 파일 시스템의 path, 뒷부분은 컨테이너 파일 시스템의 path
    1. Anonymous Volumes : docker run -v container path로 실행 시 컨테이너 패스만 지정
    1. Named Volumes : docker run -v name:container path 이름과 컨테이너 패스만 지정

🎈 volume을 Readonly로 지정하길 원한다면 ?

-> docker run -v name:container path:ro

dockerfile : anonymouse volume만 지정
docker-compose : host, named volume 사용하는 것이 일반적

🎈 nginx란?

  • 경량화된 웹 서버이자 Load Balancer
    -> 도커를 이용한 실행방법은 다음과 같다.
$ mkdir nginx
docker run -d --name=nginx -p 8081:80 nginx
docker exec --user=root -it nginx sh
apt update
apt install nano
nano /usr/share/nginx/html/index.html
exit
docker restart nginx

다수의 container로 구성된 프로그램은 어떻게 이미지를 빌드해야 하는가? - 환경 클린업

  • 컨테이너 삭제 : docker container rm -f ~~
  • 이미지 삭제 : docker image rm ~~
  • 다 삭제되었나 docker ps, docker image ls 로 확인

이어서 docker에 존재하는 예제 프로그램인 voting application을 활용하여 다수의 container로 구성된 SW를 도커로 실행해보고자 한다

✅ Practice - Voting Application

# 1. clone 진행
git clone https://github.com/dockersamples/example-voting-app 진행.

# 2. Ubuntu에서 만들어진 폴더로 이동하여 해당 디렉토리에서 image build 진행
docker build -t vote ./vote
docker build -t result ./result
docker build -t worker ./worker

# 3. 컨테이너 실행
docker run -d --name=redis redis
docker run --name=db -e POSTGRES_PASSWORD=password postgres
docker run -d --name=vote -p 5001:80 vote
docker run -d --name=worker worker
docker run -d --name=result -p 5002:80 result
docker ps로 컨테이너 실행 확인

# 4. 네트워크 세팅하여 포트 연결
# -> vote 들어가서 redis 연결여부 확인
ping www.google.com
docker exec -it --user root vote sh
ping redis : ping install 필요
apt update
apt install iputils-ping
ping redis : Name or service not known이 나오면 연결해주어야 함.
# -> exit빠져나온 후 네트워크 커맨드 사용
docker container rm -f $(docker container ls -aq)

# 네트워크 생성
: docker network create mynetwork

# 네트워크 옵션 지정
docker run -d --name=redis --network mynetwork redis
docker run -d --name=db -e POSTGRES_PASSWORD=password --network mynetwork postgres
docker run -d --name=vote -p 5001:80 --network mynetwork vote
docker run -d --name=result -p 5002:80 --network mynetwork result
docker run -d --name=worker --network mynetwork worker

# 이후 docker ps로 실행중인 컨테이너들 확인
# 이후 localhost::5001 들어가서 voting 후 5002 들어가서 result 확인
# 또는 아래 커맨드 실행
docker exec -it --user root vote sh
apt update
apt install iputils-ping
ping redis
profile
To be a DataScientist

0개의 댓글