카테고리 없음

Spring boot와 Docker Postgresql

머룽 2023. 4. 18. 12:31

Spring boot와 Docker Postgresql

이번엔 docker와 posrgresql에 대해 알아보겠다. 1. centos 6에 docker를 설치해보자 2. Spring boot와 Docker 3. Spring boot와 Docker Mysql mysql과 소스는 동일하다.
@SpringBootApplication
public class SpringBootDockerPostgresqlApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootDockerPostgresqlApplication.class, args);
    }

    @Autowired
    private AccountRepository repository;

    @Bean
    CommandLineRunner runner() {
        return args -> Arrays.asList(
                new Account(1L,"wonwoo","wonwoo@test.com"),
                new Account(2L,"kevin","kevin@test.com"),
                new Account(3L,"mink","mink@test.com")
        ).forEach(repository::save);
    }
}
Account class
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Account {

    @Id
    @GeneratedValue
    private Long id;

    private String username;

    private String email;

}
AccountController class
@Slf4j
@RestController
public class AccountController {

    @Autowired
    private AccountRepository repository;

    @RequestMapping(value = "/accounts", method = RequestMethod.GET)
    public ResponseEntity<?> getAccount() {
        List<Account> accounts = repository.findAll();
        log.debug("accounts : {} ", accounts);
        return new ResponseEntity<>(accounts, HttpStatus.OK);
    }
}
AccountRepository class
@Repository
public interface AccountRepository extends JpaRepository<Account, Long> {
}
따로 설명은 하지 않겠다. mysql과 다른점은 yml 파일과 maven이다. application.yml
spring:
  jpa:
    hibernate:
      ddl-auto: create
    database-platform: org.hibernate.dialect.PostgreSQLDialect
  datasource:
    url: jdbc:postgresql://${POSTGRES_PORT_5432_TCP_ADDR}:${POSTGRES_PORT_5432_TCP_PORT}/docker
    username: dbuser
    password: dbpassword
    driver-class-name: org.postgresql.Driver

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.4-1200-jdbc4</version>
</dependency>
일단 postgresq pull 하자
docker run --name spring-boot-postgres -e POSTGRES_PASSWORD=dbpassword -e POSTGRES_DB=docker -d postgres

latest: Pulling from postgres
00b8e8227087: Pull complete 
1ad190f65f04: Pull complete 
60f2f5fb5bf9: Pull complete 
2d0c73368a74: Pull complete 
a786535117f1: Pull complete 
dd182ad340e4: Pull complete 
c05a4dbabb61: Pull complete 
d147dcf8581e: Pull complete 
358e57fb3884: Pull complete 
9c4b8b3535ba: Pull complete 
adf658a6b808: Extracting [==================================================>] 41.23 MB/41.23 MB
0fc677feeba3: Download complete 
0dceace87c23: Download complete 
23b5786d3dce: Download complete 
9b00a7295803: Download complete 
f88f356d246d: Download complete 
d6fb5e6e70f6: Download complete 
07e6c1333fa3: Download complete 
6f960967c8bf: Download complete 
d8bd0657b25f: Already exists 
a582cd499e0f: Already exists 
위와 같이 이미지를 생성한다.
docker images
이미지가 잘 있나 보자
postgres                    latest              6f960967c8bf        5 days ago          264.5 MB
잘있다. 다음으로 메이븐 빌드를 하자!
mvn clean package docker:build
빌드가 잘 되었다면 docker를 실행시키자
docker run --name spring-boot-docker-postgresql --link spring-boot-postgres:postgres -p 9000:8080 -d wonwoo/spring-boot-docker-postgresql
로그를 확인하기 위해 아래와 같이 입력하자
docker logs $CONTAINER_ID 
잘되었다면 브라우저를 열어 확인해보자 http://localhost:8080/accounts 그리고 postgres 클라이언트 연결도 가능하다.
docker run -it --link spring-boot-postgres:postgres --rm postgres sh -c exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres
위와 같이하면 접속도 가능하다.
postgres=# \\l

                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 docker    | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(4 rows)
디비 목록이다.
postgres=# \\connect docker
선택을 해보자
docker=# \\d
테이블을 보자. account 테이블이 잘 있다.
                 List of relations
 Schema |        Name        |   Type   |  Owner   
--------+--------------------+----------+----------
 public | account            | table    | postgres
 public | hibernate_sequence | sequence | postgres
(2 rows)
한번씩 해보자!