맨날 까먹어가지고 찾아보고 찾아보느라 시간을 너무 많이 써서 한번에 정리해버리려고 한다..!
Amazon Linux 2 AMI를 선택한다.
프리티어 적용 가능한 t.micro를 선택한다.
기존에 사용하던 키가 있으면 선택하면 되고 없으면 하나 만들면 된다.
방금 만든 인스턴스에 java를 설치한다.
설치 가능한 java 버전을 확인한다.> sudo yum list java*jdk-devel Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Available Packages java-1.7.0-openjdk-devel.x86_64 1:1.7.0.261-2.6.22.2.amzn2.0.1 amzn2-core java-1.8.0-openjdk-devel.x86_64 1:1.8.0.272.b10-1.amzn2.0.1
java-1.8.0-openjdk-devel.x86_64를 설치하기로 하고 아래와 같이 입력한다.
> sudo yum install java-1.8.0-openjdk-devel.x86_64
설치가 완료되었으면 아래와 같이 입력해서 제대로 출력이 나오면 설치가 완료된 것이다.
> java -version openjdk version "1.8.0_272" OpenJDK Runtime Environment (build 1.8.0_272-b10) OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)
전에 보안봇을 만들면서 도커를 설치했었는데, 그 때는 우분투였고 지금은 아마존 리눅스다.
도커를 설치한다.
> sudo yum install docker
잘 설치되었는지 확인한다.
> sudo docker --version Docker version 19.03.13-ce, build 4484c46
도커 컴포즈를 설치한다.
> sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose > sudo chmod +x /usr/local/bin/docker-compose > sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
도커 컴포즈가 잘 설치되었는지 확인한다.
> docker-compose version docker-compose version 1.28.2, build 67630359 docker-py version: 4.4.1 CPython version: 3.7.9 OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
Dockerfile은 아래와 같이 작성했다.
FROM openjdk:8-jdk-alpine ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
build/libs 디렉토리에 있는 jar 파일을 컨테이너에 복사해서 실행하는 것이다.
docker-compose.yml은 아래와 같이 작성했다. nginx와 spring-boot만 있다.
version: "3" services: web: image: nginx ports: - 80:80 volumes: - ./nginx/conf.d:/etc/nginx/conf.d depends_on: - spring spring: build: . ports: - 8080:8080
docker-compose.yml 파일을 보면 다음과 같은 부분이 있다.
volumes: - ./nginx/conf.d:/etc/nginx/conf.d
nginx/conf.d 디렉토리를 복사해서 컨테이너의 /etc/nginx/conf.d에 붙여넣기하는 것이다.
따라서 nginx/conf.d 디렉토리를 만들어줘야하고 nginx 설정 파일도 작성해야한다.> mkdir nginx > mkdir nginx/conf.d > sudo vim app.conf # app.conf server { listen 80; access_log off; location / { proxy_pass http://spring:8080; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
위의 설정 파일은 80 포트로 들어온 요청을 8080으로 보내겠다는 것인데, proxy_pass http://spring:8080 에서 spring은 docker-compose.yml에서 만든 spring container입니다.
build를 하면 Permission denied가 뜬다.
> ./gradlew build -bash: ./gradlew: Permission denied
gradlew의 권한을 풀어주고 다시 build하면 잘된다.
> sudo chmod +x gradlew > ./gradlew build
먼저 도커를 실행한다.
> sudo systemctl start docker
앞에 루트 권한을 준 이유는 다음과 같은 에러가 나와서였다.
Failed to start docker.service: The name org.freedesktop.PolicyKit1 was not provided by any .service files See system logs and 'systemctl status docker.service' for details.
안 나오면 안 붙여줘도 된다.
도커가 잘 실행되었는지 확인한다.
> systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2021-03-03 11:40:46 UTC; 6s ago Docs: https://docs.docker.com Process: 3886 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS) Process: 3874 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS) Main PID: 3893 (dockerd) Tasks: 8 Memory: 89.8M CGroup: /system.slice/docker.service └─3893 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=1024:4096
> sudo docker-compose up --build