도커 실습 2 - 도커 허브, 도커 컴포즈 > 도커 & 쿠버네티스

본문 바로가기

[실습] 도커 실습 2 - 도커 허브, 도커 컴포즈

필기자
2024-09-21 10:49 694 0

본문

목차
  • 도커 허브
  • 도커 컴포즈

도커 허브

도커 허브란
  • 도커 제작사에서 운영하는 공식 도커 레지스트리

도커 레지스트리
  • 도커 이미지를 저장하고 관리하는 중앙 저장소로서 동작하는 서버
  • 도커 이미지를 업로드, 다운로드, 검색, 삭제 등의 작업을 수행
  • 도커 이미지를 공유하고 배포하기 위해 사용

리포지토리
  • 도커 이미지의 집합을 나타내는 공간
  • 이미지의 다양한 버전을 관리하고 구분

2049277881_91zhFDWU_18a4c9d3981cad3f1a42cbf8591373584515e72c.png

태그
  • 도커 이미지의 버전을 식별하기 위한 라벨
  • 이미지의 특정 버전을 구분하고 관리하는 데 사용
  • 레지스트리_주소(도커 허브는 ID)/리포지토리_이름:버전

이미지에 태그를 부여해 복제하는 명령어
  • docker tag [기존_이미지_이름] [레지스트리_주소]/[리포지토리_이름]:[버전]
  • 명령어 실행 후 기존 이미지와 태그가 부여된 이미지가 둘 다 존재

이미지를 업로드하는 명령어
  • docker push [레지스트리_주소]/[리포지토리_이름]:[버전]
  • 리포지토리는 처음 업로드할 때는 존재하지 않고, push 커맨드를 실행하며 만들어짐

리포지토리 실습 - 컨테이너 생성시 개인 리포지토리에 있는 도커 이미지를 가져다 생성

도커 허브 웹 사이트 접속 및 계정 생성
2049277881_CM5TyPA0_b2135f951274e45e3c6fdd86043158d3ead95490.png

계정 모드 선택 및 이메일 인증

2049277881_8BpT23za_ab28c567b5dc02490281d698afae6ecceea6936b.png

로그인 및 개인 리포지토리 생성

2049277881_b5vnDLd9_412e4da97c0483dc5b9367544a260647fda889ce.png

개인 리포지토리 생성
  • 리포지토리 옵션
    • public(공개) : 리포지토리 내의 이미지들이 공개, 누구나 해당 리포지토리와 이미지를 볼 수 있고 다운로드 가능
    • private(비공개): 리포지토리 내의 이미지들이 비공개, 특정 사용자나 팀에게만 이미지를 공유하거나 접근 권한 부여 
2049277881_yXhDA5ws_1c59c6da69c9d0bbc37887ca587a1c4656cbc2e0.png

개인 리포지토리 화면

2049277881_hCikNqUI_c0fcf3b351e7a310ee305022d85cc96f15476da1.png

개인 리포지토리에 저장할 도커 이미지 내려받기


#nginx 최신 도커 이미지 내려받기
docker pull nginx

2049277881_Xa5uBVHJ_3f8ae460f6e63e56e1fa275be56912c0354dd697.png


#도커 로그인(개인 리포지토리에 내려받은 도커 이미지를 저장하려면 로그인 필요, 도커 허브 계정)
docker login

2049277881_9s6yQzMe_3adfdb5a848297bac83930ce3567f864decd817e.png

개인 리포지토리에 도커 이미지 저장


#이미지에 새로운 태그 붙이기
#docker tag [이미지_이름]:[태그] [유저_이름]/[리포지토리_이름]:[새로운_태그]
docker tag nginx:latest dlaxogns/lim:latest



#리포지토리에 이미지 PUSH
#docker push [유저_이름]/[리포지토리_이름]:[태그]
docker push dlaxogns/lim:latest


2049277881_N8lEDAbr_b13d91b942d607fb6f9ef906e7a59763ce8679da.png


#개인 리포지토리에 있는 이미지로 컨테이너 생성
#컨테이너 생성시 이미지 경로를 개인 리포지토리 경로로 변경 dlaxogns/lim:latest([도커허브_유저이름]/[리포지토리_이름]:[태그])
docker run -d -p 8081:80 --name my-nginx  dlaxogns/lim:latest


컨테이너 이미지 경로 확인


#실행중인 컨테이너 목록
docker ps

2049277881_6FMW1AzC_b3503109b9314ab65fb085e09497e27ff35d4a98.png


도커 컴포즈

도커 컴포즈란
  • 시스템 구축과 관련된 명령어를 하나의 텍스트 파일(정의 파일)에 기재해 명령어 한번에 시스템 전체를 실행하고 종료와 폐기까지 한번에 하도록 도와주는 도구
2049277881_r6ioz4mu_075351f9f0510fc4e0bc8a47315563c9b57b95a2.png

도커 컴포즈의 구조
  • 시스템 구축에 필요한 설정을 YAML(YAML Ain’t a Markup Language) 포맷으로 기재한 정의 파일을 이용해 전체 시스템을 일괄 실행(run) 또는 일괄 종료 및 삭제(down)할 수 있는 도구
  • 정의 파일에는 컨테이너나 볼륨을 ‘어떠한 설정으로 만들지'에 대한 항목이 기재
  • up 커맨드
    • docker run 커맨드와 비슷
    • 정의 파일에 기재된 내용대로 이미지를 내려받고 컨테이너를 생성 및 실행
    • 정의 파일에는 네트워크나 볼륨에 대한 정의도 기재할 수 있어 주변 환경을 한꺼번에 생성 가능
  • down 커맨드
    • 컨테이너와 네트워크를 정지 및 삭제
    • 볼륨과 이미지는 삭제하지 않음

도커 컴포즈 사용법
  • 호스트 컴퓨터에 폴더를 만들고 이 폴더에 정의 파일(YAML 파일)을 배치
2049277881_GRuHD4dk_0bfc34a00abd805f0eae1dc1c9e96a2b59ee58ad.png

컴포즈 파일 작성

 

항목 설명 예시
첫 줄에 도커 컴포즈 버전을 기재 Docker Compose 파일 버전 기재 version: '3'
주 항목 services, networks, volumes 각 항목 아래에 설정 기재 services:
항목 간의 상하 관계는 들여쓰기로 나타냄 들여쓰기를 사용하여 계층 구조 표현 mysql000ex11:
들여쓰기는 일정한 공백 사용 2칸 또는 4칸의 공백을 사용 image: mysql:5.7
각 항목의 키 뒤에 콜론(:)을 붙임 키 뒤에 콜론을 붙이고 값을 기재 image: mysql:5.7
리스트 항목은 줄 앞에 -를 붙임 리스트 형태로 여러 값을 나열할 때 - wordpress000net1
콜론 뒤에는 공백 키와 값 사이에 공백 삽입 MYSQL_ROOT_PASSWORD: myrootpass
# 뒤는 주석 주석 작성 # MySQL 설정
문자열은 작은따옴표 또는 큰따옴표로 감쌈 문자열 값은 따옴표로 감쌈 'mysql' 또는 "mysql"


도커 컴포즈 실습 - 워드프레스와 MySQL 연동


# 디렉토리 생성
mkdir ~/compose



# 도커 컴포즈 yaml 파일 생성
nano ~/compose/docker-compose.yaml


도커 컴포즈 yaml 파일


version: "3"
services:
  # MySQL 컨테이너 설정
  mysql000ex11:
    image: mysql:5.7  # MySQL 5.7 이미지 사용
    networks:
      - wordpress000net1  # wordpress000net1 네트워크 연결
    volumes:
      - mysql000vol11:/var/lib/mysql  # MySQL 데이터 저장을 위한 볼륨 마운트
    restart: always  # 컨테이너 재시작 설정
    environment:
      MYSQL_ROOT_PASSWORD: myrootpass  # MySQL 루트 비밀번호 설정
      MYSQL_DATABASE: wordpress000db  # WordPress 데이터베이스 생성
      MYSQL_USER: wordpress000kun  # WordPress 사용자 생성
      MYSQL_PASSWORD: wkunpass  # WordPress 사용자 비밀번호 설정

  # WordPress 컨테이너 설정
  wordpress000ex12:
    depends_on:
      - mysql000ex11  # mysql000ex11 컨테이너가 먼저 실행되어야 함
    image: wordpress  # WordPress 이미지 사용
    networks:
      - wordpress000net1  # wordpress000net1 네트워크 연결
    volumes:
      - wordpress000vol12:/var/www/html  # WordPress 웹 애플리케이션 파일 저장을 위한 볼륨 마운트
    ports:
      - 8085:80  # 호스트 포트 8085를 컨테이너의 80번 포트로 매핑
    restart: always  # 컨테이너 재시작 설정
    environment:
      WORDPRESS_DB_HOST: mysql000ex11  # MySQL 호스트 설정
      WORDPRESS_DB_NAME: wordpress000db  # WordPress 데이터베이스 이름 설정
      WORDPRESS_DB_USER: wordpress000kun  # WordPress 데이터베이스 사용자 이름 설정
      WORDPRESS_DB_PASSWORD: wkunpass  # WordPress 데이터베이스 사용자 비밀번호 설정

# 컨테이너 간 통신을 위한 네트워크 설정
networks:
  wordpress000net1:
      #driver: bridge # 네트워크 드라이버 가 기본 설정이면 본 내용 생략 가능

# 데이터 저장용 볼륨 설정
volumes:
  mysql000vol11:  # MySQL 데이터 저장용 볼륨
      #driver: local # 볼륨 드라이버가 기본 설정이면 본 내용 생략 가능
  wordpress000vol12:


도커 컴포즈 설치


# 시스템 패키지 업데이트
sudo apt update



# 파이썬 및 ‘pip’ 설치
#Docker Compose는 파이썬 패키지로 설치됨
sudo apt install python3 python3-pip



# Docker Compose 설치
sudo pip install docker-compose

도커 컴포즈 pip로 설치시 실행 문제가 발생할 때 curl로 설치


sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose


도커 컴포즈 실행

  • docker-compose -f [정의_파일_경로] up [옵션]

# 컴포즈 파일 실행
docker-compose -f ~/compose/docker-compose.yaml up -d


도커 컴포즈
up 옵션
옵션 내용
-d 백그라운드로 실행
--no-color 화면 출력 내용을 흑백으로 함
--no-deps 링크된 서비스를 실행하지 않음
--force-recreate 설정 또는 이미지가 변경되지 않더라도 컨테이너를 재생성
--no-create 컨테이너가 이미 존재할 경우 다시 생성하지 않음
--no-build 이미지가 없어도 이미지를 빌드하지 않음
--build 컨테이너를 실행하기 전에 이미지를 빌드
--absort-on-container-exit 컨테이너가 하나라도 종료되면 모든 컨테이너를 종료
-t, --timeout 컨테이너를 종료할 떄의 타임아웃 설정, 기본은 10
--remove-orphans 컴포즈 파일에 정의되지 않은 서비스의 컨테이너를 삭제
--scale 컨테이너의 수를 변경



# 컨테이너 목록 확인
docker ps

2049277881_QWRDPALY_af111c0d79a42469b2eaffc9c9df5ba098bc6531.png


# 네트워크 확인
docker network ls

2049277881_6KjtWImB_e57233f19c5587a8a6cf37cce52c8e19ea9295ff.png


# 볼륨 확인
docker volume ls

2049277881_hafr2RgZ_84416cab35c7b7022afbe88af80fce2bd46b1823.png

웹 브라우저에서 워드 프레스에 접속 가능한지 확인
2049277881_KC2i6QPp_2393ef8bd170071ae015729b5168076882808d85.png

도커 컴포즈로 만든 리소스 삭제
  • docker-compose -f [컴포즈_파일_경로] down [옵션]

#Docker Compose를 사용하여 지정된 Compose 파일로 정의된 리소스를 삭제
docker-compose -f ~/compose/docker-compose.yaml down

 
  • 컨테이너를 정지하지 않아도 삭제가 가능
  • 볼륨과 이미지는 데이터의 영속성과 이미지 재사용의 이유로 삭제가 되지 않음
2049277881_lCtKUVXf_ebefc26a591d374157c3df71c3708ad36e7f6abf.png

도커 컴포즈 dwon
 옵션
옵션 내용
--rmi 옵션 삭제 시에 이미지도 삭제, 옵션을 all로 지정하면 사용했던 모든 이미지가 삭제,  local로 지정하면 커스텀 태그가 없는 이미지만 삭제
-v, --volumes volumes 항목에 기재된 볼륨을 삭제한다. , external로 지정된 볼륨은 삭제되지 않음
--remove-orphans 컴포즈 파일에 정의되지 않은 서비스의 컨테이너도 삭제

도커 컴포즈 stop
  • docker-compose -f [컴포즈_파일_경로] stop [옵션]
기타
  • docker-compose [명령어] -d
    • -d 옵션을 붙이고 경로 정의 없이 도커 컴포즈 명령어를 실행하면 현재 작업 디렉터리를 컴포즈용 폴더로 사용
  • --scale 옵션 : 한번에 여러개 띄움
    • docker-compose scale [서비스명]=[컨테이너 갯수]
    • docker-compose -f my-docker-compose.yml up --scale filebeat=3
    • scale 사용시 포드 포워드 중복 에러 유의
ports:
      - "8001-8002:80"


아파치와 php를 포함하는 도커 이미지로 컨테이너 생성하여 php 파일로 아파치 초기 화면 변경 실습


# php 파일을 배치할 디렉토리 생성
mkdir ~/test



# php 파일 nano 에디터로 디렉토리 경로에 생성 
nano ~/test/index.php
  • "Hello, World!"를 화면에 출력하는 PHP 코드

<?php
echo "Hello, World!";
?>



# 아파치와 php를 포함하는 이미지로 컨테이너 생성
docker run -d -p 8080:80 --name my-apache-php-container -v ~/test:/var/www/html php:7.4-apache



# 컨테이너 내부의 bash 셸로 이동
docker exec -it my-apache-php-container bash



# html 파일은 정적인 파일로, 서버에서 별도의 처리가 필요하지 않지만 php 파일은 동적인 스크립트로 서버에서 처리가 필요
# php 파일 적용을 위해 아파치 웹 서버 재시작
service apache2 restart



# 컨테이너 내부 나가기
exit

 
  • 웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 업데이트된 초기 화면을 확인
2049277881_QnrTDumC_4812d9ed757ffb63c62f00276a9a83e4e78ae830.png
 

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색