개발환경
ubuntu 18.04
Docker version 20.10.22
redmine 5.0.4
mariaDB 10.5
1. docker 설치
docker 설치 공식 문서 참고 (linux - ubuntu)
2. redmine docker image 가져오기 (Installation에서 택 1)
redmine docker image github 참고 (sameersbn의 redmine image를 사용했다.)
3. docker-compose.yml 파일 수정
mariaDB를 사용할 예정이기 때문에 docker-compose.yml 파일을 아래 내용으로 변경한다.
version: '2'
services:
database: # 컨테이너 이름
#마리아 db 버전
image: mariadb:10.5
environment:
- MARIADB_USER=redmine
- MARIADB_PASSWORD=password
- MARIADB_DATABASE=redmine_production
- MARIADB_RANDOM_ROOT_PASSWORD=1
volumes:
- /srv/docker/redmine/mariadb:/var/lib/mysql
#/srv/docker/redmine/mariadb와 var/lib/mysql을 연결한다.
redmine: # 컨테이너 이름
build: ./
image: sameersbn/redmine:5.0.4
# database contatiner가 먼저 생성되고 redmine 컨테이너가 생성됨을 명시함
depends_on:
- database
environment:
- TZ=Asia/Kolkata
- DB_ADAPTER=mysql2
- DB_HOST=database
- DB_PORT=3306
- DB_USER=redmine
- DB_PASS=password
- DB_NAME=redmine_production
- DB_SSL_MODE=preferred
#host 포트와 일치시켜야함
- REDMINE_PORT=80
- REDMINE_HTTPS=false
- REDMINE_RELATIVE_URL_ROOT=
- REDMINE_SECRET_TOKEN=
- REDMINE_SUDO_MODE_ENABLED=false
- REDMINE_SUDO_MODE_TIMEOUT=15
- REDMINE_CONCURRENT_UPLOADS=2
- REDMINE_BACKUP_SCHEDULE=
- REDMINE_BACKUP_EXPIRY=
- REDMINE_BACKUP_TIME=
- SMTP_ENABLED=false
- SMTP_METHOD=smtp
- SMTP_DOMAIN=www.example.com
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USER=mailer@example.com
- SMTP_PASS=password
- SMTP_STARTTLS=true
- SMTP_AUTHENTICATION=:login
- IMAP_ENABLED=false
- IMAP_HOST=imap.gmail.com
- IMAP_PORT=993
- IMAP_USER=mailer@example.com
- IMAP_PASS=password
- IMAP_SSL=true
- IMAP_INTERVAL=30
# 클라이언트가 레드마인에 접속할 수 있도록 host의 80포트와 remine의 80를 연결한다. (=포트포워딩)
ports:
- "80:80" // host port : contatiner port
volumes:
- /srv/docker/redmine/redmine_mariadb:/home/redmine/data
- /srv/docker/redmine/redmine-logs:/var/log/redmine
삽질 1 ) docker-compose.yml database 변경하기
해당 이미지의 docker-compose.yml 파일에서는 database가 postgresql 설정되어있어서인지 docker-compose up 시 에러가 발생하였다. mariadb로 구성해야 해서 아래 명령어로 docker-compose-mariadb.yml 파일을 받아와서 docker-compose.yml로 이름을 변경했다.
https://raw.githubusercontent.com/sameersbn/docker-redmine/master/docker-compose-mariadb.yml
다른 database 세팅이 필요하다면 아래 파일명을 참고하여 명령어를 변경하면 된다.
삽질 2) 레드마인 host 포트 변경
컨테이너는 정상적으로 실행된 거 같은데, docker-compose.yml파일에서도 알겠지만 해당 도커 이미지에서는 host 포트를 10080로 설정하고 있다. 나의 경우 레드마인 서버는 내부망에 생성했고 (192.xxx.xx.xxx:80), 해당 서버를 외부에서 접속할 수 있도록 HAProxy 설정이 되어있는데 (xxx80) 레드마인 포트를 xxx80로 세팅하니 당연히 접속이 되지 않았던 것이다 🥲 그래서 레드마인 포트를 80으로 변경하고 (= docker-compose.yml 파일 주석참고) 다시 접속하였더니 정상적으로 접근이 가능하였다.
4. 백그라운드에서 실행될 수 있도록 아래 명령어 실행
docker-compose up -d
* -d : 백그라운드 실행
* 최초로 해당 명령어 실행시 1~2분 정도 소요된다.
* docker-compose up 명령어는 docker-compose.yml 파일을 찾아서 읽기 때문에 반드시 해당 파일이 있는 디렉토리에서 실행해야 한다.
* 다른 경로에서 해당 명령어 실행 시 다음과 같은 에러 발생
5. 실행 중인 컨테이너 확인
docker ps
* 반드시 redmine과 mariadb 컨테이너 둘 다 실행되어야 한다.
* 만약, 하나라도 정상적으로 실행되지 않았다면, 에러로 인해 해당 컨테이너가 종료된 걸 수 있으니 -d 옵션을 빼고 docker-compose up명령어로 메시지 확인해 볼 것
6. 접속 확인
초기 계정은 다음과 같다.
ID : admin
PWD : admin
컨테이너 중지
실행 중인 컨테이너 중지 명령어 (방법 2개)
방법 1 ) docker-compose up으로 실행된 컨테이너가 중지됨
docker-compose down
방법 2) 개별적으로 컨테이너 중지 가능
e.g. docker stop root_redmine1
docker stop [names]
데이터 검증
이미지 삭제 후 컨테이너를 재시작해도 DB 데이터가 남아있을까?라는 궁금증이 생겨서 검증해 봤다.
결론부터 말하자면, 별도 경로에 데이터가 담기기 때문에 1)컨테이너를 재실행해도 2)이미지와 컨테이너 모두 삭제 후 실행해도 DB 데이터가 남아있었다.
모든 컨테이너 삭제 명령어
docker container prune
이미지 삭제 명령어
docker rmi [names]
만약 중복된 이미지 ID로 인하여 삭제가 안된다면 docker rmi --force [names]으로 삭제
컨테이너 삭제, 이미지 삭제 후 다시 도커 이미지를 받아와서 컨테이너를 실행했는데, 정상적으로 실행되었다.
docker-compose.yml 파일을 다시 보니까 database와 redmine 컨테이너에 다음과 같이 기술되어 있었다.
database
volumes:
- /srv/docker/redmine/mariadb:/var/lib/mysql
redmine
volumes:
- /srv/docker/redmine/redmine_mariadb:/home/redmine/data
- /srv/docker/redmine/redmine-logs:/var/log/redmine
즉, /srv/docker/redmine/mariadb등과 같은 별도 경로에 db에 관련된 정보가 있기 때문에 이미지를 삭제해도 데이터는 정상적으로 유지되는 것이다. 검증을 위해 해당 경로를 삭제 후 다시 레드마인에 접속하니, 기존 데이터는 모두 삭제되어 있었다.
처음으로 도커 설치부터 레드마인 구축까지 해봤는데, 나처럼 처음으로 docker를 사용해본다면 다음 강의를 통해 docker의 개념을 먼저 이해하고 설치하는 것을 추천한다. 이고잉님 최고..!
'🏰 Back-end > Server' 카테고리의 다른 글
[ElasticSearch] org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root (0) | 2023.03.26 |
---|---|
[Server] 배포 후 서버에서 websocket connection to failed (1) | 2023.03.12 |
[Linux]기초 명령어 정리 (1) | 2022.12.24 |
[Linux] NPM(Nginx Proxy Manager)설치 (0) | 2022.12.02 |
[Tomcat] xml 변경 시 톰캣을 재기동하는 이유 + 재기동 없이 적용하는 방법 (0) | 2022.12.02 |
댓글