도커를 왜 쓸까?

 

  • 도커는 거의 모든 데서 사용하고 있다.
  • 도커는 빠르다.
  • 언제 어디서든 규격화, 표준화된 같은 환경을 사용할 수 있다.
  • 도커를 사용하면 최초 한번은 종속성 설치, 환경 설정, 배포테스트를 최초 한번은 수행하고 그 이후에는 이 과정이 생략된다.
  • 서버를 옮긴다거나, 서버에 대한 환경이 바뀐다거나 할 때 그럴 때마다 이미지를 통해 똑같은 환경을 구현해낼 수 있다는 것은 큰 장점이다.
  • 이미지와 컨테이너의 관계는 클래스와 인스턴스의 관계와 매우 유사하다.
  • 이미지를 상속 받아서 새로운 이미지를 만들 수 있다.

도커란?

Docker는 애플리케이션과 모든 종속성을 컨테이너 형태로 함께 패키징하여 애플리케이션이 모든 환경에서 원활하게 작동하도록하는 컨테이너화 플랫폼

가상 머신 VS 컨테이너

  • 가상화에 기반
  • 도커 시스템 위에 컨테이너 개념을 도입한 방식
  • 도커는 native os와 거의 비슷할 정도로 매우 빠르다.
  • VM은 기존 OS에 새로운 OS를 통째로 가상화하는 방식

도커를 활용한 배포 과정

각각의 애플리케이션을 컨테이너화하여 마이크로서비스로 제공할 수 있다.

장고 컨테이너를 만들어서 도커 시스템 안의 컨테이너로 구성한다.

도커 시스템을 vultr 가상 서버를 빌려 올림으로써 전세계 사람들이 볼 수 있도록 배포할 수 있다.

1. EC2 접속

2. 최신 mariadb docker image로 설치

  • docker pull mariadb

3. MariaDB 컨테이너 추가 및 구동

docker run --name mariadb -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mariadb mariadb

  • —name mariadb: 컨테이너 이름을 mariadb로 지정
  • -d: 컨테이너를 백그라운드로 실행
  • -p: 3306:3306: 호스트-컨테이너 간 포트 연결. 호스트에서 3306 포트 접속 시 컨테이너 3306 포트로 포워딩 됨
  • -e MYSQL_ROOT_PASSWORD=mariadb: 컨테이너 내 환경변수 설정. root 계정의 패스워드를 mariadb로 지정
  • mariadb: 다운로드 받은 이미지 이름

4. mariadb로 접속

  • docker exec -it mariadb /bin/bash
    • 정상적으로 접속되면 root 계정으로 컨테이너의 bash에 접속이 된다.
    • mariadb로 접속. 패스워드는 앞서 입력한 MYSQL_ROOT_PASSWORD 값mysql -u root -p

5. 한글을 사용하기 위해 characterset 변경

  1. status 명령어로 mariadb 상태 및 characterset 참조
  2. mariadb 컨테이너의 /etc/mysql/my.cnf 파일 수정
    • client → utf8mb4
    • mysql → utf8mb4
    • mysqld →
      • collation-server=utf8_unicode_ci
      • init-connect='SET NAMES utf8'
      • character-set-server = utf8
    • 변경된 내용 저장 후, 컨테이너 bash 접속 종료
    • 컨테이너 재가동
      • docker restart mariadb
    • 컨테이너 bash 접속, mariadb 접속 후 status 로 characterset utf8로 변경 확인한글을 사용하기 위해 characterset 변경
  3.  

 

cf. 컨테이너에서 vi 설치 (my.cnf 수정 중에 vi 가 없을 경우)

  1. 컨테이너의 os 확인: cat /etc/*-release
  2. vi 설치
apt-get update
apt-get install nano
apt-get install vim

 

다른 컨테이너에서 이미 이미지를 사용할 경우 발생하는 이슈

그 컨테이너가 실행 중이든 아니든 이미지를 사용한 컨테이너가 존재하고 있으면 이러한 충돌이 발생한다.

그 컨테이너를 다시 살려서 사용하든가 삭제한 후 다시 컨테이너를 생성해야 한다.

컨테이너 전체 목록 확인(stopped container 포함): docker ps -a

컨테이너 재실행: docker restart [containerId]

실행중인 컨테이너 확인: docker ps

+ Recent posts