[실습] 도커 실습 2 - 도커 허브, 도커 컴포즈
필기자
2023-09-07 01:40
1,996
0
본문
목차
도커 허브
도커 허브란
도커 레지스트리
리포지토리
태그
이미지에 태그를 부여해 복제하는 명령어
이미지를 업로드하는 명령어
리포지토리 실습 - 컨테이너 생성시 개인 리포지토리에 있는 도커 이미지를 가져다 생성
도커 허브 웹 사이트 접속 및 계정 생성
계정 모드 선택 및 이메일 인증
로그인 및 개인 리포지토리 생성
개인 리포지토리 생성
개인 리포지토리 화면
개인 리포지토리에 저장할 도커 이미지 내려받기
개인 리포지토리에 도커 이미지 저장
컨테이너 이미지 경로 확인
도커 컴포즈
도커 컴포즈란
도커 컴포즈의 구조
도커 컴포즈 사용법
컴포즈 파일 작성
도커 컴포즈 실습 - 워드프레스와 MySQL 연동
도커 컴포즈 yaml 파일
도커 컴포즈 설치
도커 컴포즈 실행
도커 컴포즈 up 옵션
웹 브라우저에서 워드 프레스에 접속 가능한지 확인
도커 컴포즈로 만든 리소스 삭제
도커 컴포즈 dwon 옵션
도커 컴포즈 stop
아파치와 php를 포함하는 도커 이미지로 컨테이너 생성하여 php 파일로 아파치 초기 화면 변경 실습
- 도커 허브
- 도커 컴포즈
도커 허브
도커 허브란
- 도커 제작사에서 운영하는 공식 도커 레지스트리
도커 레지스트리
- 도커 이미지를 저장하고 관리하는 중앙 저장소로서 동작하는 서버
- 도커 이미지를 업로드, 다운로드, 검색, 삭제 등의 작업을 수행
- 도커 이미지를 공유하고 배포하기 위해 사용
리포지토리
- 도커 이미지의 집합을 나타내는 공간
- 이미지의 다양한 버전을 관리하고 구분
태그
- 도커 이미지의 버전을 식별하기 위한 라벨
- 이미지의 특정 버전을 구분하고 관리하는 데 사용
- 레지스트리_주소(도커 허브는 ID)/리포지토리_이름:버전
이미지에 태그를 부여해 복제하는 명령어
- docker tag [기존_이미지_이름] [레지스트리_주소]/[리포지토리_이름]:[태그]
- 명령어 실행 후 기존 이미지와 태그가 부여된 이미지가 둘 다 존재
이미지를 업로드하는 명령어
- docker push [레지스트리_주소]/[리포지토리_이름]:[태그]
- 리포지토리는 처음 업로드할 때는 존재하지 않고, push 커맨드를 실행하며 만들어짐
리포지토리 실습 - 컨테이너 생성시 개인 리포지토리에 있는 도커 이미지를 가져다 생성
도커 허브 웹 사이트 접속 및 계정 생성
계정 모드 선택 및 이메일 인증
로그인 및 개인 리포지토리 생성
개인 리포지토리 생성
- 리포지토리 옵션
- public(공개) : 리포지토리 내의 이미지들이 공개, 누구나 해당 리포지토리와 이미지를 볼 수 있고 다운로드 가능
- private(비공개): 리포지토리 내의 이미지들이 비공개, 특정 사용자나 팀에게만 이미지를 공유하거나 접근 권한 부여
개인 리포지토리 화면
개인 리포지토리에 저장할 도커 이미지 내려받기
#nginx 최신 도커 이미지 내려받기
docker pull nginx
#도커 로그인(개인 리포지토리에 내려받은 도커 이미지를 저장하려면 로그인 필요, 도커 허브 계정)
docker login
개인 리포지토리에 도커 이미지 저장
#이미지에 새로운 태그 붙이기
#docker tag [이미지_이름]:[태그] [유저_이름]/[리포지토리_이름]:[새로운_태그]
docker tag nginx:latest dlaxogns/lim:latest
#리포지토리에 이미지 PUSH
#docker push [유저_이름]/[리포지토리_이름]:[태그]
docker push dlaxogns/lim:latest
#개인 리포지토리에 있는 이미지로 컨테이너 생성
#컨테이너 생성시 이미지 경로를 개인 리포지토리 경로로 변경 dlaxogns/lim:latest([도커허브_유저이름]/[리포지토리_이름]:[태그])
docker run -d -p 8081:80 --name my-nginx dlaxogns/lim:latest
컨테이너 이미지 경로 확인
#실행중인 컨테이너 목록
docker ps
도커 컴포즈
도커 컴포즈란
- 시스템 구축과 관련된 명령어를 하나의 텍스트 파일(정의 파일)에 기재해 명령어 한번에 시스템 전체를 실행하고 종료와 폐기까지 한번에 하도록 도와주는 도구
도커 컴포즈의 구조
- 시스템 구축에 필요한 설정을 YAML(YAML Ain’t a Markup Language) 포맷으로 기재한 정의 파일을 이용해 전체 시스템을 일괄 실행(run) 또는 일괄 종료 및 삭제(down)할 수 있는 도구
- 정의 파일에는 컨테이너나 볼륨을 ‘어떠한 설정으로 만들지'에 대한 항목이 기재
- up 커맨드
- docker run 커맨드와 비슷
- 정의 파일에 기재된 내용대로 이미지를 내려받고 컨테이너를 생성 및 실행
- 정의 파일에는 네트워크나 볼륨에 대한 정의도 기재할 수 있어 주변 환경을 한꺼번에 생성 가능
- down 커맨드
- 컨테이너와 네트워크를 정지 및 삭제
- 볼륨과 이미지는 삭제하지 않음
도커 컴포즈 사용법
- 호스트 컴퓨터에 폴더를 만들고 이 폴더에 정의 파일(YAML 파일)을 배치
컴포즈 파일 작성
컴포즈 파일(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
# 네트워크 확인
docker network ls
# 볼륨 확인
docker volume ls
웹 브라우저에서 워드 프레스에 접속 가능한지 확인
- 워드프레스는 데이터베이스와 연동이 되지 않으면 오류 발생
- http://localhost:8085
도커 컴포즈로 만든 리소스 삭제
- docker-compose -f [컴포즈_파일_경로] down [옵션]
#Docker Compose를 사용하여 지정된 Compose 파일로 정의된 리소스를 삭제
docker-compose -f ~/compose/docker-compose.yaml down
- 컨테이너를 정지하지 않아도 삭제가 가능
- 볼륨과 이미지는 데이터의 영속성과 이미지 재사용의 이유로 삭제가 되지 않음
도커 컴포즈 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"
- "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
- 웹 브라우저에서 로컬호스트와 지정된 포트 번호로 접속하여 업데이트된 초기 화면을 확인
댓글목록0