develop/toy project

[인스타그램 클론] 1. 개발 환경 구축

아르르르를를르 2022. 6. 11. 02:14

docker로 개발환경을 구축한다.

필요한 스펙: ubuntu 18.04openjdk-17, mariadb, mongodb

 

1. docker 및 docker-compose 설치

(참고: ubuntu18.04에 docker 설치방법)

docker-compose 설치 명령어

$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version           
Docker Compose version v2.2.3

도커 실행 화면

 

2. spring app 이미지를 생성할 Dockerfile

dockerHub에서 openjdk17 설치되어있는거 가져오려 했으나, oracle Linux, centOS 만 있고 ubuntu를 베이스로 한 이미지가 없었다.

그래서 Dockerfile로 후딱 만들어보려 한다.

스펙사항: ubuntu 18.04openjdk-17

 

작성한 dockerfile (참고: ubuntu에 openjdk17 설치방법 )

FROM ubuntu:18.04
RUN apt-get update -y
RUN apt-get install -y ca-certificates-java
RUN apt-get install -y openjdk-17-jdk openjdk-17-jre
RUN apt-get update -y && apt-get upgrade -y
CMD ["echo hello"]

 

docker build 하려니 docker image 받을 때 권한 문제가 발생했다. /var/run/docker.sock 접근에 권한이 필요하다고 한다.

 

root 권한은 권장사항이 아니니, 다음 명령어로 user를 docker group에 포함시키고 재부팅한다.

~$ sudo usermod -a -G docker $USER

 

내 경우, window에서 wsl2 환경으로 ubuntu를 사용하고 있기에 window powershell 관리자 권한으로 실행한 후 다음 명령어를 실행한다.

# wsl 종료
~$ wsl --shutdown

# wsl 재시작
~$ Get-Service LxssManager | Restart-Service

docker group에 포함된 것 확인

 

다시 docker build 를 진행하면 다음과 같이 잘 된다.

 

완성된 docker image 확인

 

docker run 해서 java 버전 확인

 

3. db 연동을 위한 docker-compose 도입

spring app, mariadb, mongo 이미지로부터 컨테이너를 생성하고 같은 network를 사용하도록 지정해준다.

- docker-compose.yml 예시

더보기
services:
  springapp:
    image: jdk17:latest
    container_name: spring
    ports:
      - 8080:8080
  #   build: "./app-server"
  #   container_name: "nodeapp"
  #   working_dir: "/usr/src/app"
    volumes:
      - "$PWD/app-server/src:/usr/src/app"
    depends_on:
      - mariadb
      - mongodb

  mariadb:
    image: mariadb:latest
    container_name: mariadb
    volumes:
      - ./db/mariadb/conf.d:/etc/mysql/conf.d
      - ./db/mariadb/data:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Seoul
    environment:
      - MYSQL_ROOT_PASSWORD=1234
    networks:
      - docker
    restart: always

  mongodb:
    image: mongo:latest
    container_name: mongodb
    volumes:
      - ./db/mongodb:/data/db
    ports:
      - 27017:27017
    networks:
      - docker
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=1234
      - MONGO_INITDB_DATABASE=mydb
    restart: always

networks:
  docker:
    driver: bridge
$ docker-compose up -d