[새싹] 현대IT&E 231228 기록 - Docker / Kubernetes

최정윤·2023년 12월 28일
0

새싹

목록 보기
45/67
post-custom-banner

Hello World

# 컨테이너 만들고 실행
docker run hello-world

# 컨테이너 확인
docker ps

# 실행중인 컨테이너 확인
docker ps -a

Build

# test라는 이름의 폴더를 만들고 이동
mkdir test && cd test

# 빌드하기
docker build -t node-app:0.1 .

# built한 이미지 보기
docker images

Run

# 빌트한 이미지에 기반한 컨테이너를 아래 코드를 실행함으로써 run
docker run -p 4000:80 --name my-app node-app:0.1

# 터미널 열어서 서버 테스트해보기
curl http://localhost:4000

# 초기 터미널을 닫고 컨테이너 실행 중지 및 삭제
docker stop my-app && docker rm my-app

4. 컨테이너를 실행해보자

4.1. 엔진 시작하기/종료하기

4.2. 컨테이너의 기본적인 사용방법

docker 커맨드 (옵션) 대상 (인자)
  • 옵션
    • 커맨드에 세세한 설정을 지정하는 용도로 쓰임
    • 백그라운드로 실행 : -d
    • 키보드를 통해 조작하고 싶다면 : -i, -t
    • 한꺼번에 모아 쓸 수도 : -dit
  • 대상
    • 커맨드와 달리 구체적인 이름 지정
    • 이름이 penguin인 이미지의 컨테이너를 실행하려면
    • container start [옵션] penguin
  • 인자
    • 대상에 전달할 값 지정
    • 문자 코드 또는 포트 번호 전달 가능
    • 인자를 지정하는 경우는 그리 많지 않음
      • 또는 - -로 시작하는 경우가 많다

4.3. 컨테이너의 생성과 삭제, 실행, 정지

docker run (옵션) 이미지 (인자)
  • 컨테이너를 생성해 실행하는 커맨드
  • docker image pull + docker container create + docker container start
docker stop 컨테이너_이름
  • 컨테이너를 삭제하기 위해서는 반드시 컨테이너를 정지시켜야 함
docker rm 컨테이너_이름
  • 컨테이너를 삭제하는 커맨드
  • 정지상태여야 함
docker ps (옵션)
  • 컨테이너의 목록을 출력하는 기능

4.4. 컨테이너의 통신

-p 호스트_포트_번호:컨테이너_포트_번호
  • 웹 브라우저를 통해 컨테이너에 접근하려면 외부와 접속하기 위한 설정 필요 →포트 설정

4.6. 이미지 삭제

docker image rm httpd

5. 여러 개의 컨테이너를 연동해 실행해보자

5.1. 워드프레스 구축

  • 워드프레스는 웹 사이트를 만들기 위한 소프트웨어
  • 워드프레스 컨테이너 + MySQL 컨테이너
docker network create 네트워크_이름
  • 가상 네트워크를 만들고 이 네트워크에 두 개의 컨테이너를 소속시켜 두 컨테이너를 연결
docker network rm 네트워크_이름

5.2. 워드프레스 및 MySQL 컨테이너 생성과 연동

docker network create wordpress000net1
  • 네트워크 생성
docker run --name mysql
  • MySQL 이미지로 mysql이라는 이름으로 컨테이너를 생성 및 실행하는 명령어 입력
docker run --name wordpress
  • 워드프레스 이미지로 워드프레스 컨테이너 생성 및 실행
  • ps 커맨드로 실행 상태 확인 후
  • 웹 브라우저 통해 워드프레스에 접근해 확인
  • stop, rm 명령어로 컨테이너 종료 및 이미지 삭제

5.3. 명령어를 직접 작성하자

  • 리눅스 + 웹 서버 + 프로그래밍 언어 런타임 + 데이터베이스 조합은 변함 없다.
  • MYSQL 컨테이너
docker run --name mysql000ex11 -dit --net=wordpress000net1
MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress0
MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql
--character-set-server=utf8mb4 --collation-server=utf8mb4_
--default-authentication-plugin=mysql_native_password
  • 워드프레스 컨테이너
docker run --name wordpress000ex12 -dit --net=wordpress000
-e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=word
-e WORDPRESS_DB_USER=wordpress000kun -e WORDPRESS_DB_PASSWO

5.4. 레드마인 및 MariaDB 컨테이너를 대상으로 연습하자

  • 레드마인은 누구에게 어떤 업무를 맡길지 관리하는 소프트웨어
  • 워드프레스와 거의 비슷하지만 포트 번호와 옵션의 이름이 다름
  • 생성할 네트워크 및 컨테이너의 정보
항목설정값
네트워크 이름redmine000net2
MYSQL 컨테이너 이름mysql000ex13
MYSQL 이미지 이름mysql
레드마인 컨테이너 이름redmine000ex14
레드마인 이미지 이름redmine
  • 네트워크 생성
docker network create redmine000net2
  • MYSQL 컨테이너 생성 및 실행
docker run --name mysql000ex13 -dit --net=redmine000net2 -e
MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=redmine000
MYSQL_USER=redmine000kun -e MYSQL_PASSWORD=rkunpass mysql
--character-set-server=utf8mb4 --collation-server=utf8mb4_
--default-authentication-plugin=mysql_native_password
  • 레드마인 컨테이너의 생성 및 실행
docker run -dit --name redmine000ex14 --network redmine000
-e REDMINE_DB_MYSQL=mysql000ex13 -e REDMINE_DB_DATABASE=red
REDMINE_DB_USERNAME=redmine000kun -e REDMINE_DB_PASSWORD=r
  • http://localhost:8086에 접근하면 레드마인의 초기 화면을 볼 수 있다
  • 이제 데이터 베이스를 바꿔볼 것 (레드마인 + MariaDB)
    • 네트워크 생성 → MariaDB 컨테이너 생성 → 레드마인 컨테이너 생성 → 확인 → 뒷정리

6. 실전에 활용 가능한 컨테이너 사용법을 익히자

컨테이너와 호스트 간에 파일 복사하기

파일 복사는 컨테이너 → 호스트, 호스트 → 컨테이너 양방향 모두 가능

# 호스트 -> 컨테이너
docker cp 호스트_경로 컨테이너_이름:컨테이너_경로
# 컨테이너 -> 호스트
docker cp 컨테이너_이름:컨테이너_경로 호스트_경로
# 파일 복사 명령어
docker cp 원본_경로 복사할_경로

볼륨 마운트

  • 볼륨이란 스토리지의 한 영역을 분할한 것
  • 마운트는 연결하다의 의미
  • 데이터는 보통 외부에 두는데 이를 Data Persistency

스토리지 마운트의 종류

1. 볼륨 마운트

  • 도커 엔진이 관리하는 영역 내에 만들어진 볼륨을 컨테이너에 디스크 형태로 마운트
  • 이름만으로 관리 가능하여 다루기 쉽지만 볼륨에 비해 직접 조작하기 어려우므로 임시나 자주 안쓰지만 지우면 안되는 파일 다루는 목적으로 많이 사용

2. 바인드 마운트

  • 도커 엔진 관리하지 않는 영역의 기존 디렉터리를 컨테이너에 마운트하는 방식
  • 자주 사용하는 파일 다루는 목적으로 사용함
항목볼륨 마운트바인드 마운트
스토리지 영역볼륨디렉터리 또는 파일
물리적 위치도커 엔진의 관리 영역어디든지 가능
마운트 절차볼륨을 생성한 후 마운트기존 파일 또는 폴더를 마운트
내용 편집도커 컨테이너를 통해서일반적인 파일과 같이
백업절차가 복잡함일반적인 파일과 같이

커맨드

  • 어느 방식이든 스토리지 마운트는 run 커맨드의 옵션 형태로 저장
# 볼륨 생성
docker volume create 볼륨_이름

# 볼륨 삭제
docker volume rm 볼륨_이름

# 바인드 마운트
docker run (생략) -v 스토리지_실제_경로 : 컨테이너_마운트_경로
docker run (생략) -v 볼륨_이름 : 컨테이너_마운트_경로
커맨드내용
create볼륨을 생성
inspect볼륨의 상세 정보를 출력
ls볼륨의 목록을 출력
prune현재 마운트되지 않은 볼륨을 모두 삭제
rm지정한 볼륨을 삭제

컨테이너로 이미지 만들기

  • 이미 존재하는 컨테이너를 이용하면 누구나 쉽게 이미지를 만들 수 있다.
  • 컨테이너 - commit ->이미지 - run -> 컨테이너 여러개

1. commit 커맨드로 기존 컨테이너 이미지로 변환

docker commit container+name new_name

2. Dockfile 스크립트로 이미지를 만드는 방법

  • dockerfile 스크립트를 작성하고 이 스크립트를 빌드해 이미지를 만드는 방법
  • dockerfile은 이미지를 만드는 것뿐
docker build -t img_name comp_folder_path

| instruction | 내용 |
| FROM | 토대로 되는 이미지를 지정 |
| COPY | 이미지에 파일이나 폴더를 추가 |
| RUN | 이미지를 빌드할 때 실행할 명령어를 지정 |
-> 도커파일 스크립트에 사용되는 주요 인스트럭션

컨테이너 개조

a. 파일 복사와 마운트 이용
b. 컨테이너에서 리눅스 명령어 실행

  • 컨테이너에서 리눅스 명령어 실행하려면 리눅스에 명령 전달 프로그램인 shell 있어야함
    가장 일반적으로 사용되는 셸은 bash
  • bash를 실행해 우리의 명령을 입력받을 수 있는 상태로 만들어야 하는데, bash를 실행하려
    면 다음 인자 전달하면 됨
# bash를 실행하는 인자
/bin/bash
  • docker exec 커맨드와 함께 사용됨 = 컨테이너 속에서 명령어를 실행하는 커맨드
  • bash를 사용한 컨테이너 조작 끝나면 다시 docker start로 컨테이너 재시작
docker exec (옵션) 컨테이너_이름 /bin/bash
  • bash가 실행되면 셸에 입력된 명령은 도커 엔진이 아니라 해당 컨테이너로 전달됨
  • 요약하자면 컨테이너 자체 명령 = 도커 엔진 = 컨테이너 전체에 대한 관리 작업
  • 컨테이너 내부 명령 = bash = sw 설치, 실행, 종료, 설정 변경, 파일 작업
  • bash를 통해 사용하는 명령어는 리눅스 명령어
  • 컨테이너에 들어있는 운영체제에 따라 컨테이너 내부에서 사용해야 하는 명령어 달라짐
  • 특별한 이유가 없데면 데비안 계열을 기반으로 하는 것이 좋다

도커 허브 등록 및 로그인

  • 직접 만든 이미지를 도커 허브에 올릴 수 있다.

도커 허브와 도커 레지스트리

  • 이미지를 배포하는 장소 = 도커 레지스트리
  • 도커 제작사에서 운영하는 공식 도커 레지스트리 = 도커 허브
  • 레지스트리는 이미지를 배포하는 장소, 레파지토리는 레지스트리를 구성하는 단위

태그와 이미지 업로드

  • 이미지에 태그를 부여해야 하는데, 레지스트리의 주소와 버전 표기를 추가해 정식 명칭으로 만든다.
# 이미지에 태그를 부여해 복제하는 명령어
docker tag original_image_name registry_path / repository_name
# 이미지 업로드
docker push registry_path / repository_name : version

레지스트리 만들기

  1. 비공개 레지스트리 만들기
docker run -d -p 5000:5000 registry
  1. 도커 허브 사용

7. 도커 컴포즈를 익히자

도커 컴포즈란?

  • 도커 설정을 기재한 설정 파일을 이용해 한 번에 여러 개의 컨테이너를 생성, 실행, 폐기하는 기능 제공
  • 시스템 구축과 관련된 명령어를 하나의 텍스트 파일(정의 파일)에 기재해 명령어 한번에 시스템 전체를 실행하고 종료와 폐기까지 한번에 하도록 도와주는 도구
  • YAML 포맷으로 기재한 정의 파일을 이용해 전체 시스템을 일괄 실행 또는 일괄 종료 및 삭제할 수 있는 도구
  1. up 커맨드
  • docker run 커맨드와 비슷
  • 정의 파일에 기재된 내용대로 이미지를 내려받고 컨테이너를 생성 및 실행
  • 주변 환경 한꺼번에 생성도 가능(네트워크나 볼륨에 대한 정의로)
  1. down 커맨드
  • 컨테이너와 에트워크를 정지 및 삭제

  • 볼륨과 이미지는 삭제 X

  • 삭제 없이 종료만 하고 싶다면 stop 커맨드

  • 도커 컴포즈는 컨테이너와 주변 환경을 생성하며, 네트워크와 볼륨까지 만들 수 있다.

  • 스크립트는 이미지를 만들기 위한 것으로 네트워크나 볼륨은 만들 수 없다.

도커 컴포즈 파일을 작성하는 법

# 아파치 컨테이너의 컴포즈 파일 예시
version: "3"
services:
apa000ex2:
image: httpd
ports:
-8080:80
restart: always
# apa000ex2 컨테이너 실행 명령어
docker run --name apa000ex2 -d -p 8080:80 httpd
# 컴포즈 파일 작성 예시
version: "3"
services:
 컨테이너_이름1:
컨테이너_이름2:
networks:
네트워크_이름1:
volumes:
볼륨_이름1:
볼륨_이름2:

주 항목

항목내용
services컨테이너를 정의한다.
networks네트워크를 정의한다.
volumes볼륨을 정의한다.

자주 나오는 정의 내용

항목docker run 커맨드의 해당 옵션 또는 인자내용
image이미지 인자사용할 이미지를 지정
networks--net접속할 네트워크를 지정
volumes-v, --mount스토리지 마운트를 설정
ports-p포트 설정
environment-e환경변수 설정
depends_onX다른 서비스에 대한 의존관계를 정의
restartX컨테이너 종료 시 재시작 여부를 설정

restart의 설정값

| 설정값 | 내용 |
| no | 재시작하지 않는다 |
| always | 항상 재시작한다 |
| on-failure | 프로세스가 9외의 상태로 종료됐다면 재시작 |
| unless-stopped | 종료 시 재시작하지 않음. 그 외에는 재시작 |

도커 컴포즈 실행

  • 도커 컴포즈는 docker -compose 명령을 사용함
## ex
# up
docker-compose -f def_file_path up opt
# down
docker-compose -f compose_file_path down opt
# stop
docker-compose -f compose_file_path stop opt

maven과 gradle 차이점

profile
개발 기록장
post-custom-banner

0개의 댓글