도커(docker)는 이미지를, 컨테이너에 띄우고 실행하는 기술. 컨테이너는, '애플리케이션'과 '애플리케이션'을 구동하는 환경을, Host OS로부터 격리한 공간.
우분투 내에 도커가 있음. 도커 내에 컨테이너가 있음.
컨테이너를 만들고 삭제하는건 다른 컨테이너(프로그램)에 영향을 주지 않음
쿠버네티스(kubernetes)는 다수의 컨테이너 실행을 관리 및 조율하는 시스템으로 컨테이너들을 모니터링하며, 컨테이너 중 하나라도 죽으면 그것을 빠르게 재시작. 서버에 가해지는 부하를 분산하는 로드 밸런싱(Load balancing) 기능.
docker 설치를 위한 프로그램 설치하기
sudo apt install -y apt-transport-https build-essential ca-certificates g++ curl git libtool make unzip
Docker 설치 이미지 리포지토리 키 가져오기
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK가 표시됨.
리포지토리 추가하는 부분
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
docker설치
sudo apt install docker-ce docker-ce-cli containerd.io -y
도커 버전 확인
docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:36 2020
OS/Arch: linux/amd64
Experimental: false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied
사용자 아이디를 docker그룹에 추가해야만 docker를 사용할 수 있음(재부팅 필요!!)
sudo usermod -aG docker user01
재시작
sudo reboot
도커 버전 확인
docker version
Docker Compose 설치(편리함을 위함)
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/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-compose version 1.26.2, build eefe0d31
nano oracle-12c.yaml
version: '3.2'
services:
oracle12c:
image: truevoly/oracle-12c
container_name: ora2
privileged: true
restart: always
ports:
- "1521:1521"
- "8088:8080"
컨테이너 구동
docker-compose -f ./oracle-12c.yaml up -d
오라클(SQL Developer) 실행
삭제
docker-compose -f ./oracle-12c.yaml down
만들어졌으면
설정 - 네트워크 - 고급 - 포트포워딩 - 추가 -
설정 - 저장소(추가)
시작 - 빼낼 수 있도록 시작
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- tomcat (개발용 웹 서버) -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
애플리케이션에 집어넣어야하고(캡처)
프로펄티에 톰캣 경로 확인(캡처)
우분투, moba 켬
127.0.0.1:18080
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:file:var/lib/tomcat9/webapps/db01;Mode=Oracle;AUTO_RECONNECT=TRUE;
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(BootDeployApplication.class);
}
하고나면 프로젝트/target 에 .war파일이 뜸
애플리케이션 배포
평가일 : 2022년 5월 2일 5~6교시
제출파일 : 애플리케이션배포_본인이름.hwp(doc)
=====================================
==========================================
-- 우분투 docker설치
$ clear
$ sudo apt update -y
-- docker 설치를 위한 프로그램 설치하기
$ sudo apt install -y apt-transport-https build-essential ca-certificates g++ curl git libtool make unzip
-- Docker 설치 이미지 리포지토리 키 가져오기
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
===> OK가 표시됨.
-- 리포지토리 추가하는 부분
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-- docker설치
$ sudo apt install docker-ce docker-ce-cli containerd.io -y
-- 도커 버전 확인
$ docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:36 2020
OS/Arch: linux/amd64
Experimental: false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied
-- 사용자 아이디를 docker그룹에 추가해야만 docker를 사용할 수 있음(재부팅 필요!!)
$ sudo usermod -aG docker user01
-- 재시작
$ sudo reboot
-- 화면 클리어
$ clear
-- ubuntu 터미널로 접속
$ docker version
Client: Docker Engine - Community
Version: 20.10.14
API version: 1.41
Go version: go1.16.15
Git commit: a224086
Built: Thu Mar 24 01:47:57 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.14
API version: 1.41 (minimum version 1.12)
Go version: go1.16.15
Git commit: 87a90dc
Built: Thu Mar 24 01:45:46 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.5.11
GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8
runc:
Version: 1.0.3
GitCommit: v1.0.3-0-gf46b6ba
docker-init:
Version: 0.19.0
GitCommit: de40ad0
-- Docker Compose 설치
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/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-compose version 1.26.2, build eefe0d31
-- 오라클용 yaml파일 생성
$ nano oracle-12c.yaml
-- 아래는 추가할 내용들...
version: '3.2'
services:
oracle12c:
image: truevoly/oracle-12c
container_name: ora2
privileged: true
restart: always
ports:
- "1521:1521"
- "8088:8080"
-- (최초 1회만) 이미지 다운, 컨테이너(ora2) 생성 및 구동
$ docker-compose -f ./oracle-12c.yaml up -d
-- 설치 중인지 확인용(종료는 ctrl + c)
$ docker logs -f ora2
-- 컨테이너 목록 보기
$ docker container ls -al
-- 컨테이너 시작
$ docker start ora2
-- 컨테이너 중지
$ docker stop ora2
-- (지울때 최초1회만) 컨테이너 중지 및 삭제(서비스 중에서 사용X)
$ docker-compose -f ./oracle-12c.yaml down
-- 자바설치
$ sudo apt install openjdk-11-jdk -y
-- 자바설치 확인
$ java -version
설치 위치는 => /usr/lib/jvm/java-11-openjdk-amd64
-- 편집기를 이용해서 환경변수등록
$ nano ~/.bashrc
마지막에 2줄 추가하기
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
2줄추가후에 ctrl+s 눌러서 저장하고 ctrl+x로 종료
-- 환경변수 적용
$ source ~/.bashrc
-- 톰캣 설치
$ sudo apt install tomcat9 -y
-- 톰캣 구동 (start | stop | restart)
$ sudo service tomcat9 start
-- 8080포트를 열기
$ sudo ufw allow 8080
-- 방화벽 확인
$ sudo ufw status
-- user01을 tomcat 그룹에 추가하여 tomcat의 모든 파일 접근 가능하게 하기
$ sudo usermod -aG tomcat user01
-- 그룹추가후 적용하기 위해 재부팅
$ sudo reboot
-- /var/lib/tomcat9/webapps 폴더에 프로젝트 배포
// 파일명 : pom.xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.6.7
com.example
boot_deploy
0.0.1-SNAPSHOT
boot_deploy
Demo project for Spring Boot
<java.version>11</java.version>
<packaging>war</packaging>
<dependencies>
<!-- tomcat 배포용 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- tomcat 개발용 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
// 파일명 : HomeController.java
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HomeController {
// @ResponseBody
// html이 표시되는 게 아니라 리턴값이 자체가 표시됨
@RequestMapping(value = {"/", "/home", "/main"})
public @ResponseBody String home() {
return "home화면";
}
}
// 파일명 : application.properties
server.port=9090
server.servlet.context-path=/ROOT
spring.devtools.livereload.enabled=true
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:file:/DB저장할 폴더의 위치/db01;Mode=Oracle;AUTO_RECONNECT=TRUE
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
// 파일명 : BootDeployApplication.java
package com.example.boot_deploy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.controller"})
public class BootDeployApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(BootDeployApplication.class, args);
}
@Override
protected SpringApplicationBuilder
configure(SpringApplicationBuilder builder) {
return builder.sources(BootDeployApplication.class);
}
}
// package후에 target폴더의 war 파일을 Exam.war 로 변경후에 배포하기