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 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"
내가 마주했던 문제
Reference