본 문서는 Java 개발 환경 구축에 필요한 다양한 소프트웨어를 Docker 컨테이너를 사용하여 설치하는 방법을 안내합니다.
1. JDK 설치
AdoptOpenJDK 8 버전을 Docker 이미지로 설치합니다.
docker pull adoptopenjdk/openjdk8
docker run -di --name=jdk1.8 adoptopenjdk/openjdk8
docker exec -it jdk1.8 /bin/bash
2. MySQL 설치
MySQL 8.0 버전을 설치하고, 호스트의 /data/soft/mysql_home 디렉토리를 컨테이너의 /var/lib/mysql로 마운트합니다. 루트 비밀번호는 aaa123456으로 설정합니다.
docker pull mysql:8.0
mkdir -p /data/soft/mysql_home
chmod 777 /data/soft/mysql_home
docker run -itd --name=mysql-8 -p 7306:3306 -v /data/soft/mysql_home:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=aaa123456 mysql:8.0
3. Redis 설치
Redis를 설치하고, 데이터 영속성을 위해 호스트의 /data/soft/redis_home 디렉토리를 마운트합니다. sysctl.conf 파일에 vm.overcommit_memory = 1 설정을 추가하여 Redis의 메모리 오버커밋을 허용합니다.
docker pull redis
sudo mkdir -p /data/soft/redis_home/conf
sudo mkdir -p /data/soft/redis_home/data
docker run -d --name=redis -p 5379:6379 --restart always -v /data/soft/redis_home/data:/data redis
# Redis 재시작 시 데이터 유지를 위해 설정
echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
4. Tomcat 설치
Tomcat 8.5.73 버전을 설치합니다. 필요에 따라 특정 버전이나 Java 환경을 지정할 수 있습니다.
docker pull tomcat:8.5.73-jre17-temurin-focal
docker run -di --name=tomcat -p 8080:8080 tomcat:8.5.73-jre17-temurin-focal
# Tomcat 컨테이너 내부 접속
docker exec -it tomcat /bin/bash
5. Nginx 설치
Nginx를 설치하고, 호스트의 /data/soft/nginx_home 디렉토리를 사용하여 설정 파일, HTML, 로그 파일을 관리합니다.
docker pull nginx
mkdir -p /data/soft/nginx_home/{conf,html,logs}
chmod 777 /data/soft/nginx_home/{conf,html,logs}
# 컨테이너에서 기본 설정 파일 복사 (필요시)
# docker cp [컨테이너_ID]:/etc/nginx /data/soft/nginx_home/conf
# docker cp [컨테이너_ID]:/usr/share/nginx/html /data/soft/nginx_home/html
# Nginx 실행 (설정 파일 마운트)
sudo docker run --name=nginx -p 80:80 --restart=always \
-v /data/soft/nginx_home/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/soft/nginx_home/conf/default.conf:/etc/nginx/conf.d/default.conf \
-v /data/soft/nginx_home/html:/usr/share/nginx/html \
-v /data/soft/nginx_home/logs:/var/log/nginx \
-d nginx
6. Rancher 설치
Rancher Server를 설치하고 8080 포트로 노출합니다.
docker pull rancher/server
docker run -di --name=rancher -p 8080:8080 rancher/server
# Rancher 재시작
docker restart rancher
7. ZooKeeper 설치
Wurstmeister의 ZooKeeper 이미지를 사용하여 컨테이너를 실행합니다.
docker pull wurstmeister/zookeeper
docker run -di --name=zookeeper -p 2181:2181 wurstmeister/zookeeper
8. Kafka 설치
Kafka를 설치합니다. ZooKeeper 서버 주소와 Kafka 브로커 ID, 리스너 설정을 지정해야 합니다. 방화벽 설정을 확인하세요.
docker pull wurstmeister/kafka
# 방화벽 비활성화 (필요시)
# systemctl stop firewalld
# Kafka 실행 (IP 주소는 실제 환경에 맞게 수정)
docker run -di --name=kafka -p 4327:4327 \
-e KAFKA_HEAP_OPTS="-Xmx4G" \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=[ZooKeeper_IP]:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT:[Kafka_IP]:4327 \
-e KAFKA_LISTENERS=PLAINTEXT:0.0.0.0:4327 \
wurstmeister/kafka
# 방화벽 활성화 (필요시)
# systemctl start firewalld
9. MongoDB 설치
MongoDB 6.0.2 버전을 설치하고, 루트 사용자(admin/aaa123456)를 설정하며, 데이터 디렉토리를 마운트합니다.
docker pull mongo:6.0.2
mkdir -p /data/soft/mongo_home/db
docker run -di --name mongodb --restart always -v /data/soft/mongo_home/db:/data/db -p 7303:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=aaa123456 --privileged=true mongo:6.0.2 --auth
# 특정 데이터베이스에 대한 사용자 권한 설정 예시
# docker exec -it mongodb mongo admin --username admin --password aaa123456
# db.createUser({ user: "app_user", pwd: "app_password", roles: [ { role: "readWrite", db: "your_database" } ] })
10. Jenkins 설치
Jenkins 2.222.3-centos 이미지를 설치하고, /data/soft/jenkins_home 디렉토리를 볼륨으로 마운트합니다.
docker pull jenkins/jenkins:2.222.3-centos
mkdir -p /data/soft/jenkins_home
chmod 777 /data/soft/jenkins_home
chown -R 1000:1000 /data/soft/jenkins_home/
docker run -d --name=jenkins -p 18080:8080 -p 50000:50000 -v /data/soft/jenkins_home:/var/jenkins_home jenkins/jenkins:2.222.3-centos
# 초기 관리자 비밀번호 확인
cat /data/soft/jenkins_home/secrets/initialAdminPassword
11. ZENTAO 설치
Zentao 오픈소스 버전 16.3을 설치합니다. MySQL 데이터 디렉토리도 함께 마운트합니다.
docker pull easysoft/zentao:16.3
mkdir -p /data/soft/zentao_home
chmod 777 /data/soft/zentao_home
mkdir -p /data/soft/zentao_home/zentao_mysql
chmod 777 /data/soft/zentao_home/zentao_mysql
sudo docker run --name=zentao -p 28080:80 \
-v /data/soft/zentao_home:/www/zentaopms \
-v /data/soft/zentao_home/zentao_mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=aaa123456 \
-d easysoft/zentao:16.3
# Zentao DB 접속 정보: IP: 172.17.0.1, User: root, Password: aaa123456
12. GitLab 설치
GitLab CE 14.7.3 버전을 설치합니다. 설정, 데이터, 로그 디렉토리를 마운트하며, 최소 2GB 이상의 메모리가 필요합니다.
docker pull gitlab/gitlab-ce:14.7.3-ce.0
mkdir -p /data/soft/gitlab_home/{etc,data,log}
chmod -R 777 /data/soft/gitlab_home
sudo docker run --name=gitlab -p 38080:80 --privileged=true \
-v /data/soft/gitlab_home/etc:/etc/gitlab \
-v /data/soft/gitlab_home/data:/var/opt/gitlab \
-v /data/soft/gitlab_home/log:/var/log/gitlab \
-d gitlab/gitlab-ce:14.7.3-ce.0
# GitLab 설정 파일 수정 (외부 URL 등)
# vi /data/soft/gitlab_home/etc/gitlab.rb
# 초기 관리자 비밀번호 확인 (관리자 계정: root)
cat /data/soft/gitlab_home/etc/initial_root_password
13. Gitblit 설치
Gitblit 설치 방법은 별도의 설정이 필요할 수 있습니다. Docker Hub에서 이미지를 검색하거나 공식 문서를 참조하세요.
14. Nexus (Maven Repository) 설치
Nexus 3.37.1 버전을 설치하고, 데이터 디렉토리를 마운트합니다. 최소 2GB 이상의 메모리가 필요합니다.
docker pull sonatype/nexus3:3.37.1
mkdir -p /data/soft/nexus_home
chmod 777 /data/soft/nexus_home
docker run -d --name nexus3 -p 8081:8081 -v /data/soft/nexus_home:/nexus-data sonatype/nexus3:3.37.1
# Nexus 초기 비밀번호 확인 (계정: admin)
# 비밀번호는 /data/soft/nexus_home/admin.password 파일에서 확인 가능
15. Dameng Database 설치
Dameng DM8 데이터베이스를 Docker로 설치합니다. 초기에는 컨테이너를 실행하고, 추후 설정을 마운트하는 방식으로 진행할 수 있습니다.
# Docker 이미지 다운로드 및 임포트
wget -O dm8_docker.tar -c https://download.dameng.com/eco/dm8/dm8_docker.tar
docker import dm8_docker.tar dm8:1.0
# 초기 컨테이너 실행
docker run -itd -p 5236:5236 --name dm8 dm8:1.0 /bin/bash /startDm.sh
# 기본 계정/비밀번호: SYSDBA/SYSDBA
# 데이터 디렉토리 마운트 설정 (추후 컨테이너 삭제 후 재실행 필요)
# mkdir -p /data/soft/dm8_home
# docker cp [컨테이너_ID]:/dm8/data /data/soft/dm8_home
# docker stop dm8
# docker rm dm8
# docker run -itd -p 5236:5236 --name dm8 -v /data/soft/dm8_home/data:/dm8/data -d dm8:1.0 /bin/bash /startDm.sh
16. Nacos 설치
Nacos 2.1.2 버전을 설치합니다. Standalone 모드로 실행하며, MySQL 8.0+와 호환성 문제가 있을 수 있으므로 주의가 필요합니다.
docker pull nacos/nacos-server:v2.1.2
mkdir -p /data/soft/nacos_home/resources
chmod 777 /data/soft/nacos_home/resources
# 설정 파일 마이그레이션을 위해 임시 컨테이너 실행
docker run -di -p 7307:8848 nacos/nacos-server:v2.1.2
# 설정 파일 복사
# docker cp [컨테이너_ID]:/home/nacos/conf/application.properties /data/soft/nacos_home/resources
# 임시 컨테이너 중지 및 삭제
# docker stop [컨테이너_ID]
# docker rm [컨테이너_ID]
# 설정 파일을 마운트하여 Nacos 실행
docker run \
--name nacos -d \
-p 7307:8848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /data/soft/nacos_home/resources/application.properties:/home/nacos/conf/application.properties \
nacos/nacos-server:v2.1.2
17. JAR 프로그램 실행
JDK 컨테이너를 기반으로 JAR 파일을 실행합니다. 호스트의 디렉토리를 컨테이너에 마운트하여 애플리케이션 파일 및 로그를 관리합니다.
# 예시: collector-service.jar 실행
docker run -d --network=bridge -p 6357:6357 --restart=no --name=collector-service \
-v /data/webapps/:/data/webapps/ \
-v /data/files:/data/files \
-v /data/logs:/data/logs \
adoptopenjdk/openjdk8 java -jar -Duser.timezone=GMT+08 /data/webapps/collector-service-0.0.1-SNAPSHOT.jar
# 로그 확인
docker logs --tail=1000 collector-service
주의사항:
- Docker 컨테이너 내에서
127.0.0.1또는localhost대신172.17.0.1(Docker 기본 브릿지 IP) 또는 해당 컨테이너의 IP를 사용해야 합니다. - 포트 매핑은
[호스트 포트]:[컨테이너 포트]형식입니다. (예:3307:3306) - 경로 매핑은
[호스트 경로]:[컨테이너 경로]형식입니다. (예:/data/soft/mysql_home:/var/lib/mysql)
Docker Hub (https://hub.docker.com/)에서 다양한 소프트웨어의 Docker 이미지를 검색할 수 있습니다.