• Local에서의 빌드 순서 (+ 과연… docker-compose up vs docker-compose —build의 차이는..?)

  • EC2 서버 접속 방법

    # capstone.pem을 ~/keys로 옮기고
    # chmod 400을 통해, 권한설정을 해준다.
    
    ssh -i ~/keys/capstone.pem ec2-user@{public ip address}
    ex) ssh -i ~/keys/capstone.pem [email protected]
    
  • EC2에 Docker 및 Docker-compose 설정

    # 그 후, 아래 명령어를 통해 git과 htop을 설치한다.
    sudo yum install git htop -y
    
    # 클라우드 서버에 docker 설치
    sudo yum -y install docker
    
    # 도커 시작
    sudo systemctl start docker
    
    # root가 아닌 user에게도 권한을 주기 위해, docker group에 추가
    sudo usermod -aG docker ec2-user
    
    # Docker-compose Release버전 다운로드
    sudo curl -L "<https://github.com/docker/compose/releases/download/2.2.3/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    # docker-compose에 실행 권한 부여
    sudo chmod +x /usr/local/bin/docker-compose
    
    # docker-compose 버전 확인
    docker-compose --version
    
  • Docker 관련 명령어

    • 컨테이너 관련 명령어

      # 이미지 생성
      docker build -t {이미지명} .
      
      # 이미지를 통해 컨테이너 실행
      docker run -it -name {컨테이너명} -p 8080:8080 {이미지명}
      
      # 컨테이너 실행
      docker start {컨테이너명 or 컨테이너id}
      
      # 컨테이너 재실행
      docker restart {컨테이너명 or 컨테이너id}
      
      # 컨테이너 중지
      docker stop {컨테이너명 or 컨테이너id}
      
      # 용량 부족시
      # Docker System Cache 삭제
      docker system prune -a
      
    • 도커 실행 명령어(run) 옵션

    • 도커 삭제 관련 명령어

      # 모든 컨테이너 확인
      docker ps -a
      
      # 도커 컨테이너 삭제
      docker rm [컨테이너 id]
      
      # 도커 컨테이너 모두 중지 & 삭제
      docker stop $(docker ps -aq)
      docker rm $(docker ps -aq)
      
      # 도커 이미지 확인
      docker images
      
      # 도커 이미지 삭제
      docker rmi [이미지 id]
      
      # -f 옵션을 붙이면 (연관된) 컨테이너도 강제삭제
      docker rmi -f [이미지 id]
      
      # docker <none> image 삭제
      docker rmi $(docker images -f "dangling=true" -q)
      
    • 도커에 DB관련 명령어

      # mariadb라는 이미지를 통해 mariadb-container라는 컨테이너 실행
      
      docker run --name mariadb-container \\
      -e MARIADB_DATABASE=dev \\
      -e MARIADB_USER=developer \\
      -e MARIADB_PASSWORD=1234 \\
      -e MARIADB_ROOT_PASSWORD=1234 -d -p 13306:3306 mariadb:latest
      
      # Mariadb Docker 컨테이너 접속
      docker exec -it mariadb-container bash
      
      # Local에서 Docker Container 접속
      docker exec -it mariadb bash
      
      mysql -u root -p
      //password: 1234
      
      use dev;
      
    • Docker Hub을 이용하는 명령어

      # docker image 내려받기
      docker pull {이미지명}
      ex) docker pull mariadb
      
      # docker image build (이미지 이름을 sunghun1998/{Repository명}:{Tag명})
      docker build -t {이미지명}
      ex) docker build -t sunghun1998/test_test:1
      
      # docker image를 dockerHub에 등록하기
      docker push sunghun1998/test_test:1
      
      # ec2에서 Docker 실행
      sudo systemctl start docker
      
      # 도커 허브에서 이미지 파일 pull
      docker pull sunghun1998/{repository명}
      
      # 도커 이미지를 통해 스프링 부트 애플리케이션 배포 (실행)
      docker run -p 8080:8080 sunghun1998/{repository명}
      
      • 혹시라도 Permission에 대한 말이 뜬다면,

        docker login
        
  • docker-compose Option

  • docker-compose 명령어

    docker-compose up
    
    # 백그라운드에서 실행
    docker-compose up -d
    
    docker-compose ps
    
    docker-compose logs
    
    docker-compose start
    
    # 여러 개의 서비스 또는 특정 서비스를 정지
    docker-compose stop
    
    docker-compose rm
    
    docker-compose kill
    
    # 네트워크 정보, 불륨, 컨테이너들을 일괄 정지 및 삭제처리한다.
    docker-compose down
    
    docker-compose config
    
    • 참고자료
  • Dockerfile 구성에 대해

    FROM openjdk:13-jdk-alpine
    ARG JAR_FILE=build/libs/*.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java", "-jar", "/app.jar"]
    
    • 참고자료
  • docker-compose 구성에 대해

    # docker-compose file
    
    version: '3'
    services:
    	database:
    		# Dockerfile이 있는 위치
    		build: ./database
    		# 내부에서 개방할 포트: 외부에서 접근할 포트
    		ports:
    			- "3306:3306"
    	backend:
    		build: ./backend
    		
    		# 연결할 외부 디렉토리: 컨테이너 내 디렉토리
    		volumes:
    			- ./backend:/usr/src/app
    		ports:
    			- "5000:5000"
    		# 환경변수 설정
    		environment:
    			- DBHOST=database
    	frontend:
    		build: ./front
    		# 연결할 외부 디렉토리
    		volumes:
    			- ./frontend:/home/node/app
    		ports:
    			- "8080:8080"
    
    • 참고자료
  • 내가 마주했던 문제

    • COPY failed: no source files were specified
    • error message:Invalid or corrupt jarfile /app.jar
  • Reference

    • Docker-compose

      https://dico.me/back-end/articles/289/ko

      https://da2uns2.tistory.com/entry/Docker-Docker-Compose-사용해-web-db-컨테이너-연결하기-springboot-mariadb

      https://slog.website/post/11

    • docker로 mariadb 다운받기

      https://7942yongdae.tistory.com/130

      https://wecandev.tistory.com/63

    • docker hub

      https://tttsss77.tistory.com/232

      https://leveloper.tistory.com/9

      Untitled

      Untitled