728x90

1.도커 컴포즈란?

일반적인 시스템은 단일 애플리케이션으로 구동이 되지 않습니다. 여러 개의 애플리케이션이 서로 의존성 있게 구성되어 시스템이 이뤄져 있습니다. 그렇다면 흔히 하나의 컨테이너가 하나의 애플리케이션을 담당한다고 하면 여러 개의 컨테이너가 필요로 합니다. 이때 필요한 기술이 도커 컴포즈(Docker Compose)입니다. 도커 컴포즈는 yaml 포맷으로 작성되며 여러 개의 컨테이너의 실행을 한 번에 관리를 할 수 있게 해 줍니다.

2.도커 컴포즈 설치

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/
docker-compose-$(uname -s)

3.도커 컴포즈 실행과 종료

-up명령어: 컨테이너 실행

docker-compose up -d

-down명령어: 종료

docker-compose down

4.도커 컴포즈 문법

version: '2' 
services: 
 db: 
   image: mysql:5.7 
   volumes: 
     -./mysql:/var/lib/mysql 
   restart: always 
   environment: 
     MYSQL_ROOT_PASSWORD: wordpress 
     MYSQL_DATABASE: wordpress 
     MYSQL_USER: wordpress 
     MYSQL_PASSWORD: wordpress
 wordpress: 
   image: wordpress:latest 
   volumes: 
     -./wp:/var/www/html 
   ports: 
     -"8000:80" 
   restart: always 
   environment: 
     WORDPRESS_DB_HOST: db:3306 
     WORDPRESS_DB_PASSWORD: wordpress

-version: docker-compose.yml 파일의 명세 버전

version: '2'

-services: 실행할 컨테이너 정의, docker run --name wordpress과 같다고 생각할 수 있음

services:
 db:
 ...
 wordpress:
 ...

-image: 실행할 이미지 태그부분에 버전기입을안할시 자동으로 lastest버전으로 실행

services:
 wordpress:
 image: wordpress:sample

-ports: 컨테이너와 연결할 포트 {호스트 포트}:{컨테이너 포트}

services:
 db:
   ...
   ports:
     - "8000:8000"

-environment: 컨테이너에서 사용할 환경변수 - {환경변수 이름}:{값}

services:
 mysql:
 ...
   environment:
   - MYSQL_ROOT_PASSWORD=somewordpress: '3'

-volumes: 마운트하려는 디렉터리 - {호스트 디렉터리}:{컨테이너 디렉터리}

services:
 django:
 ...
   volumes:
     - ./app:/app

-build: 이미지를 자체 빌드 시 사용 - image속성 대신 사용

django:
 build:
   context: .
   dockerfile: ./compose/django/Dockerfile-dev

그외 logs, stop, start와 같은 기본 명령어는 도커 명령어와 동일!!

 

ref. 인프런 강의. 초보를 위한 도커 안내서를 보고 참고하여 정리하였습니다.

 

Docker - 도커란 무엇인가

도커, 도커를 사용하는 이유, 도커의 특징 이해

wooody92.github.io

 

 

초보를 위한 도커 안내서 - 인프런 | 강의

도커를 1도 모르는 입문자, 초보자분들을 위한 도커 안내서 입니다. 복잡한 내용을 제외하고 도커가 왜 인기가 많고 어떻게 사용하는지 빠르게 익힐 수 있도록 집중하였습니다., 데브옵스 입문

www.inflearn.com

 

728x90

'기술 > Devops' 카테고리의 다른 글

aws(2)VPC(Virtual Private Cloud)  (0) 2022.04.19
aws(1)S3(Simple Storage Services)  (0) 2022.04.19
도커(4)-이미지  (0) 2022.01.19
도커(2)-도커 설치와 실행  (0) 2022.01.17
도커(1)-도커란?  (1) 2022.01.13
728x90

1.도커 설치

도커는 기본적으로 리눅스 기반에 맞춰 개발환경이 갖춰져있으므로 만약 윈도우 사용자라면 VM으로 우분투를 설치하여 사용하길 권장합니다.

curl -s https://get.docker.com/ | sudo sh

설치 방법은 여러개가 있겠지만 아래의 명령어로 손쉽게 설치 가능합니다.

 

docker version

위의 명령어로 도커가 설치완료되었는지 확인합니다.

 

2.도커 실행

docker run [OPTIONS] IMAGE:[version] [COMMAND]

 

-option

-d detached mode (백그라운드 모드)
-p 호스트와 컨테이너의 포트를 연결
-v 호스트와 컨테이너의 디렉토리를 연결
-e 컨테이너 내에서 사용할 환경변수 설정
--name 컨테이너 이름 설정
--rm 프로세스 종료시 컨테이너 자동 제거
-it 터미널 입력을 위한 옵션(컨테이너 내부)
--network 네트워크 연결

위와 같은 형식으로 도커를 실행할수 있다.

 

-실행

docker run ubuntu:20.04

위와 같이 실행하면, 우분투 20.04 이미지를 다운받아 실행하게 됩니다. 도커의 실행은 하나의 프로세스 실행과 같아서 위의 명령어로는 실행은 되지만 이외의 동작은 없고 바로 프로세스가 종료되게 됩니다.

 

docker run -it ubuntu:20.04

실행한 우분투 컨테이너 내부에서 터미널 입력이 가능해집니다.

 

docker run -d -p 3306:3306 \ 
 -e MYSQL_ALLOW_EMPTY_PASSWORD=true \ 
 --name mysql \ 
 mysql

mysql최신 버전의 이미지를 mysql이름을 지정후 다운 받은후, 3306(로컬):3306(컨테이너) 포트를 연결시켜주어 백그라운드에서 동작시켰습니다.

 

docker exec -it mysql mysql 
create database wp CHARACTER SET utf8; 
grant all privileges on wp.* to wp@'%' identified by 'wp'; 
flush privileges;

-exec명령어

docker run과는 달리, docker exec는 이미 실행중인 컨테이너에 접속할때 사용되는 명령어입니다. exec로 백그라운드에서 실행중인 mysql에 접속하여 데이터베이스를 생성해주었습니다.

 

3.도커 기본명령어

-ps: 실행중인 도커 컨테이너를 확인하는 명령어

docker ps
docker ps -a # 실행중지된 컨테이너까지 모두 확인가능

-stop: 도커 컨테이너 중지 명령어

docker stop [OPTIONS] CONTAINER [CONTAINER...]

컨테이너 ID or NAME으로 중지명령

 

-rm: 도커 컨테이너 삭제 명령어

docker rm [OPTIONS] CONTAINER [CONTAINER...]

-logs: 실행중인 컨테이너의 로그를 확인하는 명령어

docker logs [OPTIONS] CONTAINER

-images: 다운받은 이미지를 확인하는 명령어

docker images [OPTIONS] [REPOSITORY[:TAG]]

-pull: 도커 이미지를 다운받는 명령어

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

-rmi: 도커 이미지 삭제 명령어

docker rmi [OPTIONS] IMAGE [IMAGE...]

4.도커 network

앞서 설명한 명령어중 --name을 통해 네이밍이 되어있는 컨테이너들끼리 통신을 위한 방식입니다.

웹서비스를 운영할때 80번 외부포트에서 request를 받아주면 내부의 로컬끼리는 포트번호를 통해 통신을 하는데 도커의 컨테이너 통신에서는 컨테이너를 생성할때 지어준 이름으로 통신을 하게 됩니다. 

-network create

docker network create [OPTIONS] NETWORK-NAME

 

-network connet

docker network connect [OPTIONS] NETWORK CONTAINER

네트워크 생성 -> 기존생성된 컨테이너 네트워크에 연결

위와 같은 과정을 거치면 네트워크에 연결한 컨테이너는 서로 통신을 할수 있는 준비가 됩니다.

 

ex)

docker run -d -p 8080:80 \ 
 --network=example \
 ...

ref. 인프런 강의. 초보를 위한 도커 안내서를 보고 참고하여 정리하였습니다.

 

Docker - 도커란 무엇인가

도커, 도커를 사용하는 이유, 도커의 특징 이해

wooody92.github.io

 

 

초보를 위한 도커 안내서 - 인프런 | 강의

도커를 1도 모르는 입문자, 초보자분들을 위한 도커 안내서 입니다. 복잡한 내용을 제외하고 도커가 왜 인기가 많고 어떻게 사용하는지 빠르게 익힐 수 있도록 집중하였습니다., 데브옵스 입문

www.inflearn.com

 

728x90

'기술 > Devops' 카테고리의 다른 글

aws(2)VPC(Virtual Private Cloud)  (0) 2022.04.19
aws(1)S3(Simple Storage Services)  (0) 2022.04.19
도커(4)-이미지  (0) 2022.01.19
도커(3)-도커 컴포즈  (0) 2022.01.17
도커(1)-도커란?  (1) 2022.01.13
728x90

1. 서버를 관리한다는것

  • 어떠한 프로그램이 동작할때 잘돌고 있지만 뒤 즉, 서버단은 매우복잡한 논리의 집합으로 돌아가고 있는것
  • 수많은 로직들중에 하나라도 잘못되어있을경우, 전체가 돌아가지 않는다
  • 서버를 관리한다는것은 이많은 논리의 집합을 오류없이 잘돌아가도록 관리하는것
    • 하지만 너무 잦은 개발환경의 변화로 인해 리소스의 낭비가 심해졌다
    • 이를 해결하기위해 도커가 등장했다.

2. 서버관리 방식의 변화

  • 전통적인 서버관리방식
    • user추가 -> system환경 -> 방화벽 -> ... -> proxy서버 -> 서버 실행
    • 매우 복잡한 여러 방식들을 하나하나 만들어 서버를 실행시켜야함
    • 이중 하나라도 문제가 생겼을때 전체적으로 오류가 발생함
  • 도커의 등장으로 인해..
    • user컨테이너, chat 컨테이너...와 같이 여러 기능들을 하나의 컨테이너처럼 독립적으로 실행시킬수 있음
    • 하나의 오류가 생기더라도 독립적으로 실행되고 있기때문에 문제가 없고 매우 효율적으로 서버 동작
  • 가상머신과 비교
    • 매우빠르다
    • 초기 환경 세팅을 일일이 할필요가 없다
    • 따라서 매우 효율적이다

3. 도커의 등장 배경

  • 서버 실행 방법 문서화
    • 서버를 실행할때 설치할 과정이나 주의점을 문서화를 통해 후임자나 다른사람에게 공유
    • 이문서가 정확할지? 누락된 부분이 있어 그대로 실행안됨...과 같은 문제점이 있음
  • 상태관리 도구 도입(chef, puppet, ansible...)
    • webserver, library등 문서로만 적혀있는것이 아닌 코드로 관리함으로써 환경을 공유하고 쉽게 설치 하게 개선
    • 각각의 서버, 여러 환경때문에 제대로 적용이 안되는 문제점이 있음
  • 가상머신
    • 여러 기능등을 각각의 가상머신에 설치한뒤 이 가상머신을 관리할수 있는 서버에 띄어둠
    • 한서버에 여러개 설치가 가능하고, 현재의 상태를 저장할수 있는 엄청난 이점
    • 처음부터 다시 셋팅할대 어려움이 있음, 매우느림, 공유하기 어려운 문제점이 있음
  • 도커의 등장!
    • 컨테이너: 격리된 환경에서 작동하는 프로세스
    • 하드웨어 가상화 기술보다 가벼움
    • 이미지 단위의 프로세스 실행 환경을 구성
    • 즉, 위의 여러 문제점을 모두 개선한 컨테이너 기술!

4. 도커의 장점

  • 확장성/이식성
    • 도커가 설치되어 있다면 어디서든 컨테이너 실행 가능
    • 쉽게 개발서버를 만들수 있고 테스트서버 생성또한 간편함
  • 표준성
    • 도커를 사용하지 않는 경우 여러 프레임워크로 만든 서비스들의 배포 방식이 매우 다양함
    • 컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포 과정이 동일해짐
  • 이미지
    • 컨테이너를 실행하기위한 하나의 압축 파일과 같음
    • 이미지에서 컨테이너를 생성하기 때문에 반드시 이미지를 만드는 과정 필요
    • Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능
  • 설정관리
    • 설정은 보통 환경변수로 제어
    • 하나의 컨테이너를 띄울때 환경변수를 같이 지정
  • 자원관리
    • 컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화됨
    • 업로드 파일을 외부 스토리지와 링크하여 사용하거나 s3같은 별도의 저장소가 필요함

 

ref. 인프런 강의. 초보를 위한 도커 안내서를 보고 참고하여 정리하였습니다.

 

Docker - 도커란 무엇인가

도커, 도커를 사용하는 이유, 도커의 특징 이해

wooody92.github.io

 

초보를 위한 도커 안내서 - 인프런 | 강의

도커를 1도 모르는 입문자, 초보자분들을 위한 도커 안내서 입니다. 복잡한 내용을 제외하고 도커가 왜 인기가 많고 어떻게 사용하는지 빠르게 익힐 수 있도록 집중하였습니다., 데브옵스 입문

www.inflearn.com

 

728x90

'기술 > Devops' 카테고리의 다른 글

aws(2)VPC(Virtual Private Cloud)  (0) 2022.04.19
aws(1)S3(Simple Storage Services)  (0) 2022.04.19
도커(4)-이미지  (0) 2022.01.19
도커(3)-도커 컴포즈  (0) 2022.01.17
도커(2)-도커 설치와 실행  (0) 2022.01.17

+ Recent posts