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

본문 바로가기

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

필기자
2023-09-07 01:40 1,996 0

본문

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

도커 허브

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

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

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

20230906230802_9adc1450f76646e099e11ca3f3d0a0db_fvu1.png

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

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

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

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

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

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

20230906234957_9adc1450f76646e099e11ca3f3d0a0db_vnkg.png

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

20230906235136_9adc1450f76646e099e11ca3f3d0a0db_wwih.png

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

개인 리포지토리 화면

20230906235607_9adc1450f76646e099e11ca3f3d0a0db_mtg7.png

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


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

20230906235955_9adc1450f76646e099e11ca3f3d0a0db_6jlr.png


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

20230907000156_9adc1450f76646e099e11ca3f3d0a0db_90vl.png

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


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



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


20230907000614_9adc1450f76646e099e11ca3f3d0a0db_xjez.png


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


컨테이너 이미지 경로 확인


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

20230907002054_9adc1450f76646e099e11ca3f3d0a0db_fcb5.png


도커 컴포즈

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

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

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

컴포즈 파일 작성

 
컴포즈 파일(yaml 형식) 작성 요령
첫 줄에 도커 컴포즈 버전을 기재
주 항목 services, networks, volumes 아래에 설정 내용을 기재
항목 간의 상하 관계는 공백을 사용한 들여쓰기로 나타냄
들여쓰기는 같은 수의 배수만큼의 공백을 사용
이름은 주 항목 아래에 들여쓰기한 다음 기재
컨테이너 설정 내용은 이름 아래에 들여쓰기한 다음 기재
여러 항목을 기재하려면 줄 앞에 ’-’를 붙임
이름 뒤에 콜론( : )을 붙임
콜론 뒤에는 반드시 공백이 와야함(바로 줄바꿈하는 경우는 예외)
# 뒤의 내용은 주석으로 간주
문자열은 작은 따옴표( ‘ ) 또는 큰 따옴표( “ ) 로 감싸 작성

도커 컴포즈 실습 - 워드프레스와 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:

# 데이터 저장용 볼륨 설정
volumes:
  mysql000vol11:  # MySQL 데이터 저장용 볼륨
  wordpress000vol12:  # WordPress 웹 애플리케이션 파일 저장용 볼륨


도커 컴포즈 설치


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



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



# Docker Compose 설치
sudo pip install 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

20230907011013_9adc1450f76646e099e11ca3f3d0a0db_oisx.png


# 네트워크 확인
docker network ls

20230907011037_9adc1450f76646e099e11ca3f3d0a0db_hgx7.png


# 볼륨 확인
docker volume ls

20230907011139_9adc1450f76646e099e11ca3f3d0a0db_wsoq.png

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

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

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

 
  • 컨테이너를 정지하지 않아도 삭제가 가능
  • 볼륨과 이미지는 데이터의 영속성과 이미지 재사용의 이유로 삭제가 되지 않음
20230907011951_9adc1450f76646e099e11ca3f3d0a0db_3aud.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

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

댓글목록0

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