반응형

Docker Desktop for Mac 설치

 

1. 다운로드 페이지 접속:

Docker 공식 웹사이트에서 Docker Desktop for Mac 다운로드 페이지로 이동합니다.

https://www.docker.com/products/docker-desktop/

 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

 

도커란 

Docker는 컨테이너화를 통해 애플리케이션을 개발, 배포 및 실행할 수 있도록 지원하는 오픈 소스 플랫폼입니다. 이는 개발자가 애플리케이션을 빠르게 배포하고 관리할 수 있도록 도와주며, 여러 환경에서 일관된 동작을 보장합니다. Docker의 주요 특징과 구성 요소를 정리해 드리겠습니다.

 

주요 특징

 

1. 컨테이너화: Docker는 애플리케이션과 그 종속성을 컨테이너 내에 패키징합니다. 이 컨테이너는 어떤 Linux 시스템에서도 실행될 수 있으며, VM(가상 머신)보다 가볍고 빠르게 작동합니다.

2. 이식성: 컨테이너는 모든 종속성과 구성을 포함하므로, 개발 환경에서 테스트, 스테이징, 생산 환경으로 이동하는 과정에서 발생할 수 있는 “It works on my machine” 문제를 해결합니다.

3. 버전 관리 및 재현성: Docker 이미지는 버전이 관리되며, 이미지를 통해 동일한 애플리케이션을 쉽게 재생성하고 롤백할 수 있습니다.

4. 자동화: Dockerfile을 통한 이미지 생성과 Docker Compose를 사용한 여러 컨테이너의 관리는 개발 및 배포 과정을 자동화하고 간소화합니다.

 

주요 구성 요소

1. Docker 이미지: Docker 컨테이너 실행을 위한 템플릿으로, 읽기 전용으로 존재합니다. 이미지는 애플리케이션 실행에 필요한 모든 것을 포함하고 있습니다.

2. Docker 컨테이너: 이미지를 기반으로 생성된 실행 인스턴스입니다. 독립적으로 실행되며, 이미지에서 정의된 소프트웨어, 라이브러리, 코드 등을 포함합니다.

3. Docker Daemon: 호스트에서 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨 등을 관리하는 백그라운드 서비스입니다.

4. Docker 클라이언트: 사용자가 Docker Daemon과 통신할 수 있게 해주는 CLI(Command Line Interface) 도구입니다. docker build, docker push, docker run과 같은 명령을 사용할 수 있습니다.

5. Docker Hub: Docker 이미지를 공유하고 다운로드할 수 있는 Docker의 공식 레지스트리입니다. 공개 또는 사설 이미지 저장소를 제공합니다.

 

 

Docker 사용의 이점

환경 일관성: 모든 의존성과 구성을 포함한 컨테이너는 어느 환경에서나 동일하게 작동하므로, 환경 간 차이에 따른 문제를 크게 줄일 수 있습니다.

보안: 컨테이너는 격리된 환경에서 실행되므로, 한 컨테이너의 변경이나 실패가 다른 컨테이너에 영향을 미치지 않습니다. 이는 애플리케이션 간의 충돌을 방지하고 보안을 강화합니다.

리소스 효율성: 컨테이너는 가상 머신보다 훨씬 적은 오버헤드로 실행됩니다. 각 컨테이너는 공유된 OS 커널을 사용하며, 필요한 리소스만 추가로 소비합니다.

배포 속도: 이미지를 사용한 컨테이너의 배포는 몇 초 내에 완료될 수 있습니다. 이는 특히 대규모 애플리케이션과 서비스를 빠르게 확장하고 업데이트할 때 큰 이점을 제공합니다.

사용

다운 받으면 아래 명령어로 터미널에서 실행되는지 확인 해보자

docker -v

 

Mysql 도커 실행

1. MySQL Docker 이미지 다운로드

 

먼저 Docker가 설치되어 있고, 동작 중인지 확인하세요. 그 후, 터미널 또는 명령 프롬프트에서 다음 명령어를 사용하여 공식 MySQL 이미지를 다운로드합니다.

docker pull mysql

 

2. MySQL 컨테이너 실행하기

 

MySQL 이미지를 다운로드한 후, 다음 명령어를 사용하여 MySQL 컨테이너를 실행할 수 있습니다. 이때 데이터 보존, 환경 변수 설정 등을 위해 몇 가지 중요한 옵션을 추가합니다.

 

docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

 

3. MySQL 컨테이너에 접속하기

 

컨테이너가 실행되면 다음 명령어를 사용하여 MySQL 콘솔에 접속할 수 있습니다.

docker exec -it some-mysql mysql -uroot -p


4. docker compose 

docker 단순 명령어로 매번 올리기 어려운 경우 파일로 만들어 올리는 방법입니다.

docker-compose.yml 이라는 파일을 만듭니다.

version: '3.8'  # 사용할 Compose 파일 버전

services:
  mysql:
    image: mysql:latest  # 사용할 MySQL 이미지와 태그
    container_name: my-mysql  # 컨테이너 이름
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw  # MySQL root 사용자의 비밀번호
      MYSQL_DATABASE: mydb  # 자동으로 생성할 데이터베이스 이름
      MYSQL_USER: user  # 데이터베이스 사용자 이름
      MYSQL_PASSWORD: userpw  # 데이터베이스 사용자 비밀번호
    ports:
      - "3306:3306"  # 호스트와 컨테이너 간 포트 매핑
    volumes:
      - /Users/경로:/var/lib/mysql  # 데이터 지속성을 위한 볼륨
    restart: always  # 컨테이너 자동 재시작 옵션


윈도우 경로 예시 : C:\Users\hello


파일 실행

docker-compose up -d

파일 중지 

docker-compose down
 
반응형
반응형

docker compose 란

 

도커 컴포즈는 컨테이너 여럿을 띄우는 도커 애플리케이션을 정의하고 실행하는 도구(Tool for defining and running multi-container Docker applications) 이다.

컨테이너 실행에 필요한 옵션을 docker-compose.yml이라는 파일에 적어둘 수 있고, 컨테이너 간 의존성도 관리할 수 있어서 좋다.

 

도커와 도커 컴포즈를 비교하면 다음과 같다.

  • Dockerfile vs. Dockerfile-dev: 서버 구성을 문서화한 것(=클래스 선언이 들어 있는 파일)
  • docker build vs. docker-compose build: 도커 이미지 만들기(=클래스 선언을 애플리케이션에 로드)
  • docker run의 옵션들 vs. docker-compose.yml: 이미지에 붙이는 장식들(=인스턴스의 변수들)
  • docker run vs. docker-compose up: 장식 붙은 이미지를 실제로 실행(=인스턴스 생성)

간단히 말해 docker run 으로 실행하면 매번 복잡한 옵션 및 명령어들을 여러개 적어두고 실행해야 하는데, 

docker-compose 는 docker-compose.yml 에 사용하고자 하는 도커이미지 및 옵션 값들을 작성해 놓고 docker-compse up 이라는 명령어로 일관적으로 실행할 수 있다.

하나씩 실행해야 하는 수고로움이 덜어진다.

 

설치

docker-compose version 을 치고 조회가 되면 설치할 필요가 없다.

 

없다면 설치하면 된다.

docker-compose 설치는 매우매우 쉽다. 아래를 따라하면 된다.

출처는 https://docs.docker.com/compose/install/

윈도우는

curl -L https://github.com/docker/compose/releases/download/1.6.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version

 

docker-compose 속성

version

version: '2.1'

docker run에서는 없었던 부분입니다. docker-compose.yml 파일의 제일 윗부분에는 파일 규격 버전을 적는다. 파일의 규격에 따라 지원하는 옵션이 달라지며, 최근에 "3.1"이 등장하긴 했지만 보통은 "2"나 "2.1"을 사용해도 충분.

services

services:

이 항목 밑에 실행하려는 서비스들을 정의한다. 서비스란, 앱 컨테이너나 postgres 컨테이너 각각의 묶음이다.

services 하위

서비스의 이름

image

image: postgres:9.6.1

db 서비스에서 사용할 도커 이미지를 적는다.

volumes

volumes: - ./docker/data:/var/lib/postgresql/data

docker run으로 앱 컨테이너를 실행할 때 --volume 옵션을 사용하여 데이터베이스의 데이터를 로컬 컴퓨터에 저장했던 부분과 같다.

다만 docker-compose.yml의 volumes에는 상대 경로를 지정할 수 있다는 점이 다르다.

environment

environment: - POSTGRES_DB=sampledb - POSTGRES_USER=sampleuser - POSTGRES_PASSWORD=samplesecret - POSTGRES_INITDB_ARGS=--encoding=UTF-8

docker run에서 -e 옵션에 적는 내용이다. 마지막의 POSTGRES_INITDB_ARGS 부분이 추가되었는데, 데이터베이스 서버의 인코딩을 설정하기 위함이다.

healthcheck

healthcheck: test: "pg_isready -h localhost -p 5432 -q -U postgres" interval: 3s timeout: 1s retries: 10

postgres 서비스가 제대로 실행될 뿐만 아니라 데이터베이스에 접근할 수 있는지도 파악을 해야 합니다.

healthcheck는 바로 이것을 제어할 수 있습니다. 검사에 사용할 명령(test)을 3초 간격(interval)으로 열 번 시도(retries)하며, 각 시도에서 타임아웃은 1초(timeout)로 지정하였다.

여기서 사용한 pg_isready 명령은 데이터베이스 서버에 접근할 수 있는지를 파악. 

 

service 하위

앱 서비스의 이름으로 지정자 마음대로 지으면 된다.

 

build

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

db 서비스와 달리 앱 서비스는 도커 이미지를 빌드할 일이 잦기 때문에, 특정 이미지 대신 build 옵션을 추가한다.

context는 docker build 명령을 실행할 디렉터리 경로라고 보면 된다.

dockerfile은 도커 이미지를 빌드하는 데 사용할 Dockerfile을 지정하면 된다. 

environment

environment: - DJANGO_DEBUG=True - DJANGO_DB_HOST=db - DJANGO_DB_PORT=5432 - DJANGO_DB_NAME=sampledb - DJANGO_DB_USERNAME=sampleuser - DJANGO_DB_PASSWORD=samplesecret

환경 변수는 그냥 docker run을 할 때보다 좀더 자세하게 적었습니다. 각 값은 Django 설정 파일(djangosample/settings.py)에서 사용합니다.

ports

ports: - "8000:8000"

도커 컴포즈로 서비스를 실행하면 기본적으로 가상의 네트워크가 하나 만들어지고, 네트워크 외부의 접근이 막힙니다. (도커 컨테이너가 그렇듯이요.) 따라서 외부에서 접근할 수 있는 포트를 지정해주어야 한다. 여기서는 Django 개발 서버의 기본 포트는 8000을 지정하였습니다.

depends_on

depends_on: db: condition: service_healthy

서비스가 하나 이상일 때, 실행 의존성을 지정할 수 있다. 여기서 지정한 내용은, db 서비스가 실행된 후에 django 서비스를 실행하겠다는 의미. contidion 뒤에는 서비스 시작(service_started)이나 서비스 헬스체크 성공(service_healthy)을 지정할 수 있다.

db 서비스의 healthcheck 부분과 여기서의 service_healthy 부분이 서로 맞물리면, db 서비스에서 데이터베이스 서버 접속이 가능해진 순간 이후에야, django 서비스가 시작한다.

depend_on에서 condition을 지정하는 방식이 도커 컴포즈 파일 규격 3.0과 3.1에서는 제대로 작동하지 않는다고 합니다.

links

links: - db

docker run에서 --link 옵션에서 지정했던 내용입니다. 앱 컨테이너 안에서 db 서비스를 db라는 이름으로 참조할 수 있다.

command

command: /start-dev.sh

docker run으로 앱 컨테이너를 실행할 때 가장 마지막에 적었던 ./manage.py runserver 0:8000을 대신할 셀 스크립트 파일을 하나 만들었습니다. 다음은 start-dev.sh의 내용이다.

#!/bin/sh python manage.py migrate python manage.py runserver 0:8000

volumes

volumes: - ./:/app/

docker run으로 앱 컨테이너를 실행할 때 프로젝트 루트 디렉터리를 컨테이너 안에 연결했던 부분과 같습니다.

 

예시

version: "3.3" # 파일 규격 버전
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의
  db: # 서비스 명
    image: mysql:5.7 # 사용할 이미지\
    # restart: always
    container_name: jun-mysql # 컨테이너 이름 설정
    ports:
      - "3306:3306" # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
    environment: # -e 옵션
      MYSQL_ROOT_PASSWORD: '비번'  # MYSQL 패스워드 설정 옵션
      MYSQL_USER: '계정'
      MYSQL_PASSWORD: '비번'
    volumes:
      - /Users/유저명/폴더명:/var/lib/mysql  
    # command: # 명령어 실행
      # - mysqld --default-authentication-plugin=mysql_native_password
      # - --character-set-server=utf8mb4
      # - --collation-server=utf8mb4_unicode_ci
  mongo:
    image: mongo
    # restart: always
    ports:
      - 9017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: 유저계정
      MONGO_INITDB_ROOT_PASSWORD: 비번  

예시2

version: '2.1'

# 변경 부분!
volumes:
  django_sample_db_dev: {}

services:
  db:
    image: postgres:9.6.1
    volumes:
      # 여기도 변경 부분!
      - django_sample_db_dev:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=sampledb
      - POSTGRES_USER=sampleuser
      - POSTGRES_PASSWORD=samplesecret
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8
    healthcheck:
      test: "pg_isready -h localhost -p 5432 -U postgres"
      interval: 3s
      timeout: 1s
      retries: 10

  django:
    build:
      context: .
      dockerfile: ./compose/django/Dockerfile-dev
    environment:
      - DJANGO_DEBUG=True
      - DJANGO_DB_HOST=db
      - DJANGO_DB_PORT=5432
      - DJANGO_DB_NAME=sampledb
      - DJANGO_DB_USERNAME=sampleuser
      - DJANGO_DB_PASSWORD=samplesecret
      - DJANGO_SECRET_KEY=dev_secret_key
    ports:
      - "8000:8000"
    depends_on:
      db:
        condition: service_healthy
    links:
      - db
    command: /start-dev.sh
    volumes:
      # 마지막으로 여기도!
      - ./manage.py:/app/manage.py
      - ./requirements.txt:/app/requirements.txt
      - ./requirements-dev.txt:/app/requirements-dev.txt
      - ./djangosample:/app/djangosample

docker-compose 실행하기

https://docs.docker.com/compose/wordpress/

에 워드프레스 docker-compose.yml 파일이랑 실행방법 있음

 

yml 파일 설치된 dir 에서 실행

docker-compose up -d ##시작
docker-compose down -d ##내리기

 

 

참고문헌

> http://raccoonyy.github.io/docker-usages-for-dev-environment-setup/ --도커 docs

> docs.microsoft.com/ko-kr/visualstudio/docker/tutorials/use-docker-compose - ms에서 만든 문서 - build 도 나옴

반응형
반응형

싱글 노드 클러스터 

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.10.1

 

멀티 노드 클러스터

version: '3.3'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge

메모리가 안되면 자바 옵션을 Xms Xmx를 128 정도로 다 내려주자.

 

Node es01 이 localhost:9200 으로 리슨 하고 있고 es02 와 es03 이 도커 네트워크로 통신하고 있다.

포트 9200 이 모든 네트워크의 인터페이스여서 포트를 열어줘야 한다. 리눅스에서 조정하는 방법은 IPTAVLES로 직접 조정해야 한다. 엘라스틱 클러스터는 공개적으로 접속이 가능하고 잠재적으로는 FIREWall 세팅을 무시한다. 만약 9200 포트를 오픈하기를 원하지 않는다면 reverse proxy 를 사용하면 된다. docker-compose.yml 파일에서 9200:9200 이 부분을 127.0.0.1:9200:9200로 변경해주면, 오직 호스트 머신만 엘라스틱에 접근할 수 있다.

도커 재시작 시에도 데이터를 유지하기 위해 volumes: 를 본인 pc 의 폴더로 설정해준다.

 

실행

docker-compose up

잘 실행한지 확인

curl -X GET "localhost:9200/_cat/nodes?v=true&pretty"

실행 정지

docker-compose down

로컬 데이터 볼륨 까지 삭제

docker-compose down -v

 

실행 후 Docker 대시보드에서 본 모습입니다.

 

엘라스틱 인덱스 추가 및 데이터 추가

curl -X POST "localhost:9200/index_test/_doc/?pretty" -H 'Content-Type: application/json' -d'
{
    "user" : "testuser",
    "post_date" : "2020-06-17T14:12:12",
    "message" : "trying out Elasticsearch"
}
'

추가 한 데이터를 키바나에서 확인해 보자

 

 

키바나 접속

http://localhost:5601

 

위에서 만든 index_test 가 있다.

 

 

참고문헌

https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html [공식 문서]

 

반응형
반응형

1. Redis 이미지 가져오기

docker pull redis

 

2. 신규 Container 생성, 실행

docker run --name redis-container -p 6379:6379 redis

 

도커 컨테이너를 자동으로 재시작하고 싶다면 아래와 같은 옵션을 추가하면 된다.

docker run --name redis-container -p 6379:6379 -dit --restart unless-stopped redis

 

3. 컨테이너에 터미널 접속

docker exec -it redis-container /bin/bash

 

4. 시작/중지/재시작

docker start redis-container

docker stop redis-container

docker restart redis-container

5. 컨테이너 삭제

docker rm redis-container

 

도커 컴포즈 docker compose redis 올리기

version: "3.3" # 파일 규격 버전
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의
  redis: 
    container_name: redis 
    hostname: redis 
    image: redis 
    ports: 
      - "6379:6379"

  redis-commander: 
    container_name: redis-commander 
    hostname: redis-commander 
    image: rediscommander/redis-commander:latest 
    restart: always 
    environment: 
      - REDIS_HOSTS=local:redis:6379 
    ports: 
      - "8081:8081"

docker compose 로 작업하면 위의 과정은 생략되고 바로 reids 를 올리고 redis-commander 로 localhost:8081 을 통해 redis 가 정상적으로 뜨는지 클라이언트까지 확인 가능하다.

반응형
반응형

도커 젠킨스 이미지 찾기

docker search jenkins

제일 위에 검색되는 jenkins 를 pull 받아보니 설치가 안되어 그 아래 jenkins/jenkins 를 받아본다.

 

docker pull jenkins/jenkins:lts

위와 같이 이미지를 받아도 되고, 

나 같은 경우는 docker compose 로 그냥 실행했다.

 

version: "3.3" # 파일 규격 버전
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의
  jenkins:
    image: jenkins/jenkins
    container_name: jenkins
    ports: 
      - "8080:8080"
      - "50000:50000"
    volumes:
      - /Users/유저명/폴더명:/var/jenkins_home

8080 포트는 바꾸면 설정을 따로 변경해 주지 않는 이상 디폴트로 처음에는 8080 으로 bind 시켜줘야 한다.

 

docker 로 jenkins 를 설치해주고 나면

Administrator password 를 입력해주라고 한다.

 

이 비번을 알려면 

docker exec -it jenkins /bin/bash 접속

cd /var/jenkins_home/secrets

cat initialAdminPassword

위 처럼 docker jenkins 에 접속해서 initalAdminPassword 를 조회 하면 된다.

 

 

 

 

비밀번호만 입력해주고 나오는 화면 그냥 클릭만 했더니 jenkins 앱은 올라갔다.

 

 

반응형
반응형

local 에서 docker 를 이용햇 kafka 서버를 구축하자

 

docker search kafka 를 통해 검색해 보면 

wurstmeister/kafka  가 스타가 제일 많다.

https://hub.docker.com/r/wurstmeister/kafka -- 여기에서 kafka docker 관련 옵션 설명 확인가능하다.

 

kafka in docker 구조

도커 카프카 네트워킹에 대한 설명 레퍼런스이다.

github.com/wurstmeister/kafka-docker/wiki/Connectivity 

docker 로 kafka 를 올리면 다음과 같은 구조가 된다.

multiple 카프카 브로커로 설정도 가능하다.

이런식으로 구성해주면 

다음과 같이 9092 단일포트로 브로커가 구성된다.

 

 

단일 카프카 브로커일때는 

# KAFKA_ADVERTISED_HOST_NAME 옵션을 127.0.0.1 로 하겠지만 multiple 로 할때는 외부에서 접근 가능한 ip 를 넣어야 한다.

 

docker-compose-yml 작성

version: '3.3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka:2.12-2.5.0
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

KAFKA_ADVERTISED_HOST_NAME는 본인의 docker host ip로 수정

multi broker를 사용하지 않고 로컬용이므로, 127.0.0.1로 사용

 

kafka 확인

카프카 툴로 접속 확인

또는 docker 로 접속 후 kafka-topics.sh 를 실행하여 확인가능하다.

# docker container exec -it kafka bash
# kafka-topics.sh --list --bootstrap-server localhost:9092 

kafka 도커에 접속 후 kafka 토픽 리스트를 조회할 수 있다.

 

카프카 공식 문서

kafka.apache.org/quickstart

반응형
반응형

도커의 경우 여러가지 도커를 한번해 실행하기때문에 하나의 도커 컴포즈 파일로 관리를 한다.

 

도커 및 도커 컴포즈를 설치한다.

docker-compose.yml

version: "3.3" # 파일 규격 버전
  mongo:
    image: mongo
    restart: always
    ports:
      - 9017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: user
      MONGO_INITDB_ROOT_PASSWORD: password  

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 9018:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: user
      ME_CONFIG_MONGODB_ADMINPASSWORD: password

다음과 같이 compose 파일 작성 뒤 docker-compose.yml 파일 작성한 경로에서

docker-compose up -d

로 docker 실행해주면 끝이난다.

 

MongoDB

 

몽고디비를 툴로 접속해서 보기 위해 robo 3T 툴로 접속해본다.

다음과 같이 9017 포트로 도커포트 27017 을 연결해줬다.

     

다음과 같이 비번 계정을 적어주면 접속이 된다.

 

Mongo Express

mongo db 만 띄워도 되지만 몽고 익스프로세도 올려서 모니터링도 해준다.

localhost:9018 로 외부에서 도커포트 8081 로 연결해준다.

 

굳이 mongo express 를 설치할 필요는 없다. 몽고 db 툴 로도 충분히 관리가 가능하고, 기능도 더 많다.

 

반응형

'인프라 > docker' 카테고리의 다른 글

[docker] 도커 jenkins 시작하기  (0) 2020.12.18
[docker] kafka docker 시작하기  (0) 2020.11.15
[docker] mysql 을 docker 로 시작하기  (0) 2020.07.05
[docker] 도커 기본 명령어  (0) 2020.07.04
[docker] mac 도커 설치하기  (0) 2020.07.04
반응형

성능을 떠나서 로컬 개발시 도커로 인프라를 구성하면 조금 관리하기 편한 면이 있을 것 같아 docker 로 mysql 을 올려봤다.

간단히 docker 명령어 만으로 mysql을 올려보자.

1. mysql docker 이미지 다운로드

태그에는 MySQL 버전을 명시하며. 만약 태그에 버전을 명시하지 않으면, 최신 버전인 latest를 가져온다.

docker pull mysql:lastest

2. docker 이미지 확인

docker images

3. 저장소 설정

  • 호스트의 /Users/{내계정}/{마운트시킬폴더명} 디렉토리를 컨테이너의 /var/lib/mysql 디렉토리로 마운트
  • docker에 mysql과 같은 DB를 설치하는 경우 컨테이너 삭제와 함께 데이터도 날라가므로, 저장소는 반드시 외부 저장소를 사용한다.

4. docker 실행 명령어

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password --name jun-mysql -v /Users/사용자명/마운트시킬폴더명:/var/lib/mysql mysql:버젼

위를 보면 docker 실행명령어가 너무 길다.
그래서 docker-compose 라는 docker 기능을 이용하여 docker 를 실행시키자

5. docker-compose 로 실행

아무 폴더경로에, 실행시키고자 하는 파일경로
docker-compose.yml 파일 생성.

version: "3.3" # 파일 규격 버전
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의
  db: # 서비스 명
    image: mysql:5.7 # 사용할 이미지\
    container_name: jun-mysql # 컨테이너 이름 설정
    ports:
      - "3306:3306" # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
    environment: # -e 옵션
      MYSQL_ROOT_PASSWORD: '루트 비밀번호'  # MYSQL 패스워드 설정 옵션
      MYSQL_USER: '계정'
      MYSQL_PASSWORD: '비밀번호'
    volumes:
      - /Users/{계정명}/{마운트할 폴더명}:/var/lib/mysql  

 

위와 같이 docker-compose.yml 이라는 명으로 파일 만든뒤
해당 파일 있는 경로에서 명령어로 파일 실행

  • 백그라운드로 실행시 -d 옵션으로 실행

    docker-compose up -d

6. docker 프로세스 확인

docker ps -a

7. mysql 컨테이너 접속

docker exec -it jun-mysql bash
여기서 jun-mysql 은 도커 컨테이너 명이다.

8. 주의사항

mysql 이 8 버젼 부터는 password 인증방식이 mysql_native_password 에서 caching_sha2_password 로 변경 되어 config 파일 변경 및 docker 실행 후 유저에 대한 인증 방식을 각각 native 로 바꿔줘야 한다.

방법1

config 파일 생성.
$ sudo nano /usr/local/opt/mysql/config/my.cnf
`

파일추가 내용
[mysqld] default-authentication-plugin=mysql_native_password

방법 2

mysql bash shell 접속 후
docker exec -it CONTAINER_ID bash

루트계정으로 로그인.
mysql --user=root --password

각 계정의 패스워드 디폴트 인증방식 변경.
ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';

두가지 방법으로도 나는 해보지는 않았다.
그냥 매번 새로운 환경마다 docker-compose 로 올리면 수정을 해줘야 해서, 5.7 로 버젼을 명시하고 사용했다.

반응형

+ Recent posts