Skip to content

syoon827/ssm-seoul-training

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SSM Seoul Data Engineering Training

SSM-Seoul-Data-Engineering-Training

전체 과정에서 사용하는 기본적인 명령어(docker, docker-compose)에 대해 실습하고 사용법을 익힙니다.

1. 컨테이너 환경에 접속

putty 혹은 terminal 을 이용하여 접속하여 패키지 설치 여부를 확인합니다

docker --version
docker-compose --version
git --version
[실습] 출력 결과 확인

출력 결과가 오류가 발생하지 않고, 아래에 명시된 버전보다 높다면 정상입니다

Docker version 20.10.6, build 370c289
docker-compose version 1.29.1, build c34c88b2
git version 2.17.1

목차로 돌아가기



2. Docker Compose 명령어 실습

도커 컴포즈는 도커의 명령어들을 반복적으로 수행되지 않도록 yml 파일로 저장해두고 활용하기 위해 구성되었고, 여러개의 컴포넌트를 동시에 기동하여, 하나의 네트워크에서 동작하도록 구성한 것이 특징입니다. 내부 서비스들 간에는 컨테이너 이름으로 통신할 수 있어 테스트 환경을 구성하기에 용이합니다.


실습을 위한 기본 환경을 가져옵니다

HOME 경로가 운영체제에 따라 다르기 때문에 틸드(~/)를 통해 접근합니다

# terminal
mkdir -p ~/work ; cd ~/work
git clone https://github.com/psyoblade/ssm-seoul-training.git
cd ~/work/ssm-seoul-training

Docker Compose 기본 명령어

도커 컴포즈는 컨테이너를 기동하고 작업의 실행, 종료 등의 명령어를 주로 다룬다는 것을 알 수 있습니다. 아래에 명시한 커맨드 외에도 도커 수준의 명령어들(pull, create, start, stop, rm)이 존재하지만 잘 사용되지 않으며 일부 deprecated 되어 자주 사용하는 명령어 들로만 소개해 드립니다


2-1. 컴포즈 명령어 옵션

2-1-1. config : 컨테이너 실행 설정을 확인합니다

  • -q, --quiet : 설정의 정상여부만 확인하고 출력하지 않습니다
# docker-compose config [options]
docker-compose config

2-1-2. up : docker-compose.yml 파일을 이용하여 컨테이너를 이미지 다운로드(pull), 생성(create) 및 시작(start) 시킵니다

  • -d, --detach : 서비스들을 백그라운드 모드에서 수행합니다
# docker-compose up [options] <services>
docker-compose up -d

2-1-3. exec : 컨테이너 내부에서 커맨드를 실행합니다

  • -d, --detach : 백그라운드 모드에서 실행합니다
  • -e, --env KEY=VAL : 환경변수를 전달합니다
  • -u, --user [string] : 이용자를 지정합니다
  • -w, --workdir [string] : 워킹 디렉토리를 지정합니다
# docker-compose exec [options] [-e KEY=VAL...] [--] SERVICE COMMAND [ARGS...]
docker-compose exec ubuntu echo hello world

2-1-4. down : 컨테이너를 종료 시킵니다

  • -t, --timeout [int] : 셧다운 타임아웃을 지정하여 무한정 대기(SIGTERM)하지 않고 종료(SIGKILL)합니다 (default: 10초)
# docker-compose down [options] <services>
docker-compose down

[실습] `up -d` 과 down 명령어를 통해 컨테이너를 기동하고, `hello data engineer` 출력 후, 종료해 보세요

출력 결과가 오류가 발생하지 않고, 아래와 같다면 성공입니다

[+] Running 2/2
 ⠿ Container ubuntu Started
 ⠿ Container mysql  Started

아래와 같은 방법으로 실행할 수 있습니다

docker-compose up -d
docker-compose exec ubuntu echo hello data engineer
docker-compose down


2-2. 컴포즈 옵션


2-2-1. compose options : 반드시 docker-compose 명령어 다음에 입력해야 하는 옵션

  • --file, -f [filename] : 별도 yml 파일을 통해 기동시킵니다 (default: -f docker-compose.yml)
  • --env-file [env-file] : 별도 env 파일을 통해 환경변수를 지정합니다l (default: --env-file .env)
# docker-compose [compose options] [command] [command options]
docker-compose -f docker-compose.yml up -d

MySQL 서버에 접속 하는 방법

  • 로컬 환경에서는 --host 정보는 입력하지 않아도 됩니다. 단, 서버가 뜨는 데에 시간이 걸리므로 10초 대기 후에 접속합니다
# docker-compose exec mysql mysql --host=localhost --user=scott --password=tiger default
sleep 10
docker-compose exec mysql mysql -hlocalhost -uscott -ptiger default
  • mysql 접속 이후에 테이블 목록 조회 및 종료
show tables;
select * from seoul_popular_trip limit 5;
exit;

테이블 목록 및 데이터 출력 되고 exit 명령으로 나옵니다.


2-2-2. 접속정보를 별도의 환경변수 파일에 저장하는 방법

코드와 동일한 수준에서 형상관리가 되는 docker-compose.yml 파일에 접속정보를 저장하는 것은 위험할 수 있으므로 별도로 관리(ansible 등)하는 경우 .env 파일에 저장관리될 수 있습니다

  • default 값이 같은 경로에 .env 파일로 KEY=VALUE 형식으로 저장될 수 있습니다
# cat .env
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=default
MYSQL_USER=scott
MYSQL_PASSWORD=tiger
  • docker-compose.yml 설정에서 environment 설정은 아래와 같이 변수로 치환됩니다
# grep 'environment' -a5 docker-compose.yml
environment:
  MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
  MYSQL_DATABASE: $MYSQL_DATABASE
  MYSQL_USER: $MYSQL_USER
  MYSQL_PASSWORD: $MYSQL_PASSWORD
  • 현재 설정된 값을 출력하고 싶다면 config 명령으로 확인할 수 있습니다
docker-compose config | head
[실습] cat 명령어로 testenv 파일내용을 확인하고 --env-file 옵션으로 config 를 통해 제대로 수정 되었는지 확인해 보세요

testenv 파일 확인

cat testenv

--env-file 옵션과 함께 config 실행

docker-compose --env-file testenv config | head -8

실행 결과가 아래와 같으면 정상입니다.

services:
  mysql:
    container_name: mysql
    environment:
      MYSQL_DATABASE: testdb
      MYSQL_PASSWORD: pass
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: user

아래와 같이 변경된 환경 정보로 접속 테스트를 할 수 있습니다

docker-compose down
docker-compose --env-file testenv up -d
sleep 10
docker-compose exec mysql mysql -uuser -ppass testdb

데이터 조회 후 종료합니다

select * from seoul_popular_trip limit 3;
exit;


2-3. 기타 명령어

2-3-1. logs : 컨테이너의 로그를 출력합니다

  • -f, --follow : 출력로그를 이어서 tailing 합니다
# terminal
docker-compose up -d mysql
docker-compose logs mysql | head -30

2-3-2. pull : 컨테이너의 모든 이미지를 다운로드 받습니다

  • -q, --quiet : 다운로드 메시지를 출력하지 않습니다
# terminal
docker-compose pull

2-3-3. ps : 컨테이너 들의 상태를 확인합니다

  • -a, --all : 모든 서비스의 프로세스를 확인합니다
# terminal
docker-compose ps -a

2-3-4. cp : 컴포즈 컨테이너와 파일을 복사합니다

# docker compose cp [OPTIONS] SERVICE:SRC_PATH DEST_PATH|-
# docker-compose cp ./local/path/filename ubuntu:/container/path/filename

2-3-5. top : 컨테이너 내부에 실행되고 있는 프로세스를 출력합니다

# docker-compose top <services>
docker-compose top

Bash 스크립트 생성 예제

  • 환경변수에 따라 다르게 동작하는 스크립트를 생성합니다
    • cat > run.sh enter 후에 아래 내용을 붙여넣고 Ctrl+C 하면 파일이 생성됩니다
#!/bin/bash
if [[ $DEBUG -eq 1 ]]; then
    echo "this is debug mode"
else
    echo "this is release mode"
fi
echo
  • 아래의 도커 cp 명령어로 컨테이너 내부로 스크립트를 복사합니다
docker cp ./run.sh ubuntu:/run.sh
[실습] 환경변수 값(DEBUG=1)에 따라 결과가 달라지는 bash 스크립트를 생성 및 실행해 보세요

아래와 같은 방법으로 실행할 수 있습니다 (-e 옵션의 위치가 중요합니다)

docker-compose exec -e DEBUG=0 ubuntu bash /run.sh

아래와 같이 DEBUG 를 변경하고 출력합니다

docker-compose exec -e DEBUG=1 ubuntu bash /run.sh

출력 결과가 오류가 발생하지 않고, 아래와 같다면 성공입니다

# DEBUUG=0 인 경우
$ this is release mode

# DEBUG=1 인 경우
$ this is debug mode

목차로 돌아가기


3. 참고 자료

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 100.0%