상세 컨텐츠

본문 제목

도커(Docker-Compose)를 이용한 Git 환경설정 세팅하기!

CI&CD/Git&GitLab

by JORDON 2023. 1. 25. 13:50

본문

반응형

Docker-compose

Gitlab, nexus3, mattermost 관련 docker-compose.yml

version: "1"
services:
  gitlab:
    image: "gitlab/gitlab-ee:15.8.0-ee.0"
    container_name: gitlab
    restart: always
    hostname: "gitlab"
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url '<http://192.168.0.10>'   
        registry_external_url '<http://192.168.0.10:5005>'
        # gitlab_rails['gitlab_shell_ssh_port'] = 8022
        gitlab_rails['gitlab_default_projects_features_container_registry'] = true
        # nginx['redirect_http_to_https'] = true
        # nginx['redirect_http_to_https_port'] = 80
        mattermost['enable'] = false
        mattermost_external_url '<http://192.168.0.10:8065>'
        # mattermost['service_address'] = "192.168.0.10"
        # Add any other gitlab.rb configuration here, each on its own line        
      TZ: 'Asia/Seoul'
      GITLAB_ROOT_PASSWORD : "test123!"
    network_mode: bridge
    expose:
      - "80"
      - "443"
      - "5005"
      #- "8022"      
      #- "8065"
    ports:
      - "80:80"
      - "443:443"
      - "5005:5005"
      #- "8022:8022"
      #- "8065:8065"
    volumes:
      - "E:\\\\docker\\\\cicd\\\\gitlab\\\\config:/etc/gitlab"
      - "E:\\\\docker\\\\cicd\\\\gitlab\\\\logs:/var/log/gitlab"
      - "E:\\\\docker\\\\cicd\\\\gitlab\\\\data:/var/opt/gitlab"
    #extra_hosts:
      #- "luclipse.me:192.168.0.10"
  nexus3:
    image: 'sonatype/nexus3:3.45.0'
    container_name: 'nexus3'
    restart: always
    expose:
      - '8081'
    ports:
      - '8081:8081'
    volumes:
      - 'E:\\\\docker\\\\cicd\\\\nexus-data:/nexus-data'
    environment:
      TZ: "Asia/Seoul"
  mattermost:
    image: 'mattermost/mattermost-preview:7.2.0'
    container_name : mattermost
    restart: always
    hostname: "mattermost"
    expose:
      - '8065'
    ports:
      - '8065:8065'
    volumes:
      - 'E:\\\\docker\\\\cicd\\\\mattermost-data:/mm/mattermost-data'
      - 'E:\\\\docker\\\\cicd\\\\mattermost-data\\\\mysql:/var/lib/mysql'     
  gitlab-runner:
    image: 'gitlab/gitlab-runner:alpine3.15-v15.7.1'
    container_name: 'gitlab-runner'
    restart: always    
    volumes:
      - 'E:\\\\docker\\\\cicd\\\\gitlab-runner\\\\config:/etc/gitlab-runner'
      - '/var/run/docker.sock:/var/run/docker.sock'

위 코드는 만들어진 이미지만 처리. 이미지를 빌드 하는것도 있음.

명령어

docker-compose up -d #도커 백그라운드 실행
docker-compose up --force-recreate #도커 컨테이너 새로 만들기
docker-compose up --build #도커 이미지 빌드 후 compose up
docker-compose start # 정지한 컨테이너를 재개
docker-compose start mysql # mysql 컨테이너만 재개

docker-compose restart # 이미 실행 중인 컨테이너 다시 시작
docker-compose restart redis # 이미 실행중인 redis 재시작

docker-compose stop # gracefully stop함.
docker-compose stop wordpress

docker-compose down # stop 뿐만 아니라 컨테이너 삭제까지

docker-compose logs
docker-compose logs -f # 로그 watching

docker-compose ps # 컨테이너 목록

docker-compose exec [컨테이너] [명령어]
docker-compose exec wordpress bash # wordpress에서 bash 명령어 실행

docker-compose build # build 부분에 정의된 대로 빌드
docker-compose build wordpress # wordpess 컨테이너만 빌드

docker-compose run [service] [command] # 이미 docker-compose 가동 중인 것과 별개로 하나 더 올릴 때
docker-compose run nginx bash

version

docker-compose.yml 파일의 명세 버전. 버전에 따라 도커 엔진 버전도 다름

docs.docker.com/compose/compose-file/ 참고.

version: '2'

services

컨테이너에 사용할 이미지 이름과 태그(버전) 태그를 생략하면 최신 버전을 설치

이미지가 없으면 자동으로 pull하기 때문에 굳이 수작업으로 로컬에 설치할 필요 없음.

ports에 있어서 일반 dockerfile을 구성할 때와 마찬가지로 호스트 포트로 접근해야 내용을 볼 수있음

services:
  django:
    image: ...
    ports:
      - "8000:80" # 호스트 포트:컨테이너 포트
  postgres:
  	image: ....

build

이미지를 자체 빌드 후 사용할 경우 build를 이용할 경우에 사용합니다. 이미지 빌드를 위한 dockerfile이 필요하니까 지정해주면 됨. 자체 빌드니까 image 속성 대신 사용함.

docker-compose build를 통해서 빌드한 후 docker-compose up해주면 됨.

services:
  django:
    build:
      context: .
      dockerfile: ./compose/django/Dockerfile-dev
  postgres:
  	image: ....

environment

사용하고자 하는 이미지의 환경 변수.

여기서, dockerfile의 환경변수와 docker-compose.yml의 환경변수가 중복되어서 올라가면

우선순위는 다음과 같음. 즉, docker.compose.yml이 덮어쓰게 됨.

  1. docker-compose [run / exec] -e key:value
  2. docker-compose.yml의 environment
  3. Dockerfile의 ENV
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

volumes

services:
  nginx:
    image: nginx
    ports:
      - 8080:80
    volumes:
      - ./:/usr/share/nginx/html
    link:
      - mysql:db

link (legacy)

docker cli 사용할 때 --link와 동일함. {연결할 컨테이너 이름}:{해당 컨테이너에서 참고할 이름}

그러나 기본적으로 docker-compose 내부에선 모든 컨터네이너가 소통할 수 있기 때문에 사용되지 않음.

services:
  nginx:
    image: nginx
    ports:
      - 8080:80
    link:
      - mysql:db

depends_on

의존성 명시 예를 들어 아래와 같이 써 있다면, nginx는 mysql에 의존하고 있으므로 mysql 이미지가 먼저 실행된 후에 그 다음에 nginx 이미지가 실행됨

services:
  mysql:
    image: mysql
    ...
  nginx:
    image: nginx
    ports:
      - 8080:80
    depends_on:
      - mysql

다양한 docker-compose.yml 작성 예시들

1. 간단히 Nginx 올리기

docker run -it -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx로 실행하던 것을 docker-compose.yml로 만들면 다음과 같이 작성될 수 있음. $(pwd)꼴로 사용못하고, 직접 경로를 준 것만 다름.

version: '3'

services:
  nginx:
    image: nginx
    ports:
      - 8080:80
    volumes:
      - ./:/usr/share/nginx/html

2. 워드프레스

mysql 실행하면서 읽어들이는 환경 변수들이 있으니 아래처럼 설정해주고,

db를 먼저 켜도록 depends_on을 wordpress에 세팅해주면 된다.

version: '3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpwd
      MYSQL_DATABASE: databasename
      MYSQL_USER: user
      MYSQL_PASSWORD: userpwd

  wordpress:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wp
      WORDPRESS_DB_PASSWORD: wp
      WORDPRESS_DB_NAME: wp
    depends_on:
      - db

volumes:
  db_data: {}

3. flask + redis 조합

dockerfile로 빌드한 후에 compose로 올렸음.

docker-compose up -d --build

반응형

'CI&CD > Git&GitLab' 카테고리의 다른 글

Git(깃)으로 형상관리 하는 이유와 개념!  (0) 2023.01.25

관련글 더보기

댓글 영역