Docker-compose로 팀원들과 컨테이너 공유하기
2023. 3. 1. 21:11ㆍ카테고리 없음
728x90
먼저 루트 디렉토리에
docker-compose.yml 파일을 생성 후
원하는 컨테이너를 정의해준다.
#도커 컴포즈의 버전은 도커 엔진에 의존성이 존재함
#본인이 사용하는 도커 엔진의 버전에 맞춰 알맞은 컴포즈 엔진을 사용하는 것을 추천
#-> 최신 버전인 3.9 사용
#alpine 태그의 특징은 이미지를 경량화 시켜서 용량이 적은데
#이는 이후 배포를 가정한다면 배포환경에서 발생될 비용 문제를 절감하고자 alpine 태그를 사용하게 되었음.
#(컨테이너를 올리고 내리고 하는것도 사실상 돈이기 때문 https://nickjanetakis.com/blog/the-3-biggest-wins-when-using-alpine-as-a-base-docker-image)
version: '3.9'
#컨테이너의 네트워크를 지정할 수 있음.
networks:
mysql-net:
driver: bridge
#services? 컨테이너를 정의하는 곳
services:
rabbitmq:
#image? 도커 이미지를 의미함. 도커 이미지는 도커 레지스트리에 저장되어있음.
image: rabbitmq:3-management-alpine
#컨테이너의 이름
container_name: 5gnun-rabbitmq
#꺼졌을시 항상 자동 재시작 할건지?
restart: always
#포트는 어디를 사용할건지?
ports:
- 5672:5672
- 15672:15672
#volumes는 컨테이너의 데이터를 호스트의 폴더에 저장할 수 있도록 해줌.
volumes:
- ./.docker:/rabbitmq:/var/lib/rabbitmq
#환경변수를 설정할 수 있음.
environment:
RABBITMQ_ERLANG_COOKIE: ${RABBITMQ_ERLANG_COOKIE}
RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS}
redis:
#alpine 은 태그를 의미하며 redis의 버전 등의 값을 줄수 있습니다. (생략하면 latest 를 받게 되어있습니다.)
image: redis:alpine
#컨테이너의 이름
container_name: 5gnun-redis
#꺼졌을시 항상 자동 재시작 할건지?
restart: always
#포트는 어디를 사용할건지?
ports:
- 6379:6379
#volumes는 컨테이너의 데이터를 호스트의 폴더에 저장할 수 있도록 해줌.
volumes:
- ./.docker/data:/data
#appendonly?
#appendonly yes를 설정하면 redis는 모든 쓰기 명령을 appendonly.aof 파일에 기록
#redis 서버가 재시작되더라도 데이터를 유지할 수 있도록 해줌.
command: redis-server --appendonly yes
mysql:
#.env 파일의 위치 지정
env_file:
- "./.env"
#5.7과 8중 8을 선택한 이유
#8부터 내림차순 인덱스를 지원, 읽기 성능에서 많은 부분 개선되었음.
#image? 도커 이미지를 의미함. 도커 이미지는 도커 레지스트리에 저장되어있음.
image: mysql:8
#컨테이너의 이름
container_name: 5gnun-mysql
#꺼졌을시 항상 자동 재시작 할건지?
restart: always
ports:
- 3306:3306
environment:
TZ: ${TZ}
MYSQL_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD}
MYSQL_DATABASE: ${DATABASE_NAME}
MYSQL_USER: ${DATABASE_USERNAME}
MYSQL_PASSWORD: ${DATABASE_PASSWORD}
#volumes?
#컨테이너의 데이터를 호스트의 폴더에 저장할 수 있도록 해줌.
volumes:
- ./.docker/mysql/data:/var/lib/mysql
- ./.docker/mysql/conf.d:/etc/mysql/conf.d
- ./.docker/mysql/logs:/var/log/mysql
이 텍스트 문서는 docker-compose에 대한 명령어를 설명하는 문서입니다.
작성자 : 우태현 (2023.03.01 10:40PM 마지막 수정)
먼저, docker-compose와 버전별 특징이 궁금하시다면?
https://meetup.nhncloud.com/posts/277
위 링크를 참고해주세요.
Docker Desktop 설치하기 (docker-compose는 안에 포함 되어있습니다)
https://www.docker.com/products/docker-desktop/
각 OS에 맞는 버전 설치
사용하는 콘솔(터미널)에 들어가 설치가 잘 되었는지 확인해봅니다.
docker-compose --version
or
docker-compose -v
--
Docker Compose version v2.15.1
이렇게 나오면 설치가 잘 된것 입니다.
*MAC 사용자는 권한 Issues가 있을 수 있습니다.
sudo chmod +x /usr/local/bin/docker-compose 를 통해 권한을 부여해줄수 있도록 합시다.
*The command 'docker-compose' could not be found in this WSL 2 distro.
이런식의 오류가 나면 혹시 Docker가 서비스에서 실행됐는지 확인해봅니다.
docker-compose.yml 파일이 root directory에 있어야 하는데
한 줄마다 주석을 달아놓았으니 궁금한 점이 있으시다면
주석을 참고해주세요.
docker-compose를 사용하기 위해서 .env에 있어야할 환경 변수는 다음과 같습니다.
TZ=Asia/Seoul
DATABASE_HOST=127.0.0.1
DATABASE_PORT=3306
DATABASE_USERNAME=root
DATABASE_ROOT_PASSWORD=
DATABASE_PASSWORD=
DATABASE_NAME=test
RABBITMQ_ERLANG_COOKIE=
RABBITMQ_DEFAULT_USER=
RABBITMQ_DEFAULT_PASS=
만약에 없으면 이 부분을 추가해주세요.
그렇다면 docker-compose를 사용해봅시다.
docker-compose up -d
이 명령어는 docker-compose가 yml파일에 쓰여있는 내용을 토대로 환경에 컨테이너를 올려줍니다.
-d 옵션은 이 작업을 백그라운드로 실행시키는 옵션입니다.
다 되었다면 Docker Desktop
혹은
docker -p / docker-compose ps
컨테이너가 올려진것을 확인할 수 있습니다.
자주 쓰는 명령어
컨테이너 내리기
docker-compose down
작동중인 프로세스의 상태 확인
docker-compose ps
그외 명령어
이미지 가져오기
docker-compose pull
로그 확인
docker-compose logs [service_name]
컨테이너 추가 생성
docker-compose run -d [service_name]
필요한 이미지를 강제로 빌드
docker-compose up --build
컨테이너 강제 재시작
docker-compose up --force-recreate
컨테이너 자원 변경
docker update [resource_update] [container_name]
#resource_update 예시 : --cpuset-cpus=0-4(cpu 개수 지정)
도커에서 실행되는 명령어 결과를 로그로 출력
docker events
실행 중인 모든 컨테이너의 자원 사용량을 스트림으로 출력, --no-stream을 붙여 그 순간의 로그만 확인가능
docker stats
이미지, 컨테이너, 로컬 볼륨의 개수 크기 등의 정보 출력
docker system df
---docker mysql, redis, rabbitMQ와 관련된 파일이 어디있는지 궁금하신가요?
.docker 폴더에 위치해있습니다.
성공적으로 실행된 모습.
mysql이 계속 재실행되면...
sudo rm -rf /var/lib/mysql/ 로 날려버린 후 다시 compose up 하면된다.