diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/database/CreateDatabaseContainerDto.java b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/database/CreateDatabaseContainerDto.java
index c7377b747416ffdcb1b3bcd6b8784ab941196497..7a1e7b4aa83e167c4bda09384eed4766b5b52cec 100644
--- a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/database/CreateDatabaseContainerDto.java
+++ b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/database/CreateDatabaseContainerDto.java
@@ -11,4 +11,6 @@ public class CreateDatabaseContainerDto {
 
     private String databaseName;
 
+    private String image;
+
 }
diff --git a/fda-container-managing-service/pom.xml b/fda-container-managing-service/pom.xml
index cbdccd7bab81ab5c2992125821de618f8765b8d1..b219a6553cacd7988660cbb3c12d103f2c0f2d98 100644
--- a/fda-container-managing-service/pom.xml
+++ b/fda-container-managing-service/pom.xml
@@ -25,6 +25,7 @@
         <java.version>11</java.version>
         <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
         <mapstruct.version>1.4.2.Final</mapstruct.version>
+        <docker.version>3.2.7</docker.version>
     </properties>
 
     <dependencies>
@@ -58,6 +59,24 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>postgresql</artifactId>
+            <version>1.15.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>mysql</artifactId>
+            <version>1.15.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>mongodb</artifactId>
+            <version>1.15.2</version>
+            <scope>test</scope>
+        </dependency>
         <!-- DTO -->
         <dependency>
             <groupId>io.springfox</groupId>
@@ -73,12 +92,12 @@
         <dependency>
             <groupId>com.github.docker-java</groupId>
             <artifactId>docker-java-api</artifactId>
-            <version>3.2.1</version>
+            <version>${docker.version}</version>
         </dependency>
         <dependency>
             <groupId>com.github.docker-java</groupId>
             <artifactId>docker-java</artifactId>
-            <version>3.2.1</version>
+            <version>${docker.version}</version>
         </dependency>
         <!-- Mapping -->
         <dependency>
diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java
index cb205fe01aab9d46ac9ed6ba4b83277e508deb1c..ee3720f419be849d035744ba4ad20f0268bbe9e7 100644
--- a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java
+++ b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java
@@ -3,14 +3,13 @@ package at.tuwien;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
-import org.springframework.context.annotation.ComponentScan;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
 @SpringBootApplication
 @EnableJpaAuditing
-@EnableJpaRepositories(basePackages = {"at.tuwien.repositories"})
+@EnableJpaRepositories(basePackages = {"at.tuwien.repository"})
 @EntityScan(basePackages = {"at.tuwien.entities"})
 @EnableSwagger2
 public class FdaContainerManagingApplication {
diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java
index dde2c15dab1f3489591a62552763146179bd5c00..51bc3e673a3fdf0cb7c1937cffa603c0c447704d 100644
--- a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java
+++ b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java
@@ -5,7 +5,8 @@ import at.tuwien.api.dto.container.DatabaseContainerBriefDto;
 import at.tuwien.api.dto.container.DatabaseContainerDto;
 import at.tuwien.api.dto.database.CreateDatabaseContainerDto;
 import at.tuwien.api.dto.database.CreateDatabaseResponseDto;
-import at.tuwien.entities.DatabaseContainer;
+import at.tuwien.entity.DatabaseContainer;
+import at.tuwien.exception.ImageNotFoundException;
 import at.tuwien.mapper.DatabaseContainerMapper;
 import at.tuwien.service.ContainerService;
 import io.swagger.annotations.ApiOperation;
@@ -44,19 +45,20 @@ public class DatabaseContainerController {
 
     @PostMapping("/database")
     @ApiOperation("Create a new database container")
-    public ResponseEntity<CreateDatabaseResponseDto> create(@RequestBody CreateDatabaseContainerDto data) {
-        final String containerId = containerService.createDatabaseContainer(data);
-        log.debug("Create new database {} in container {} with id {}", data.getDatabaseName(), data.getContainerName(), containerId);
+    public ResponseEntity<CreateDatabaseResponseDto> create(@RequestBody CreateDatabaseContainerDto data)
+            throws ImageNotFoundException {
+        final DatabaseContainer container = containerService.create(data);
+        log.debug("Create new database {} in container {} with id {}", data.getDatabaseName(), data.getContainerName(), container.getContainerId());
         return ResponseEntity.status(HttpStatus.CREATED)
                 .body(CreateDatabaseResponseDto.builder()
-                        .containerId(containerId)
+                        .containerId(container.getContainerId())
                         .build());
     }
 
     @GetMapping("/database/{id}")
     @ApiOperation("Get info of database container")
     public DatabaseContainerDto findById(@RequestParam String id) {
-        return databaseContaineMapper.databaseContainerToDataBaseContainerDto(containerService.getDatabaseById(id));
+        return databaseContaineMapper.databaseContainerToDataBaseContainerDto(containerService.getById(id));
 
     }
 
diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/BaseIntegrationTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/BaseIntegrationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b9aa41e8e20294280068bb674cd7d32537fe32b
--- /dev/null
+++ b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/BaseIntegrationTest.java
@@ -0,0 +1,78 @@
+package at.tuwien;
+
+import at.tuwien.entity.Architecture;
+import at.tuwien.entity.ContainerImage;
+import at.tuwien.entity.DatabaseContainer;
+import org.springframework.test.context.TestPropertySource;
+
+import java.math.BigInteger;
+import java.time.Instant;
+
+import static java.time.temporal.ChronoUnit.DAYS;
+import static java.time.temporal.ChronoUnit.HOURS;
+
+@TestPropertySource(locations = "classpath:application.properties")
+public abstract class BaseIntegrationTest {
+
+    public final String IMAGE_1_REPOSITORY = "postgres";
+    public final String IMAGE_1_TAG = "13-alpine";
+    public final String IMAGE_1_HASH = "83b40f2726e5";
+    public final BigInteger IMAGE_1_SIZE = new BigInteger("160000000");
+    public final Instant IMAGE_1_BUILT = Instant.now().minus(40, HOURS);
+
+    public final String IMAGE_2_REPOSITORY = "redis";
+    public final String IMAGE_2_TAG = "latest";
+    public final String IMAGE_2_HASH = "f877e80bb9ef";
+    public final BigInteger IMAGE_2_SIZE = new BigInteger("105000000");
+    public final Instant IMAGE_2_BUILT = Instant.now().minus(9, DAYS);
+
+    public final ContainerImage IMAGE_1 = ContainerImage.builder()
+            .repository(IMAGE_1_REPOSITORY)
+            .tag(IMAGE_1_TAG)
+            .hash(IMAGE_1_HASH)
+            .size(IMAGE_1_SIZE)
+            .built(IMAGE_1_BUILT)
+            .architecture(Architecture.LINUX_AMD64)
+            .build();
+
+    public final ContainerImage IMAGE_2 = ContainerImage.builder()
+            .repository(IMAGE_2_REPOSITORY)
+            .tag(IMAGE_2_TAG)
+            .hash(IMAGE_2_HASH)
+            .size(IMAGE_2_SIZE)
+            .built(IMAGE_2_BUILT)
+            .architecture(Architecture.LINUX_AMD64)
+            .build();
+
+    public final String CONTAINER_1_ID = "deadbeef";
+    public final ContainerImage CONTAINER_1_IMAGE = IMAGE_1;
+    public final String CONTAINER_1_DATABASE = "univie";
+    public final String CONTAINER_1_IP = "231.145.98.83";
+    public final Instant CONTAINER_1_CREATED = Instant.now().minus(1, HOURS);
+
+    public final String CONTAINER_2_ID = "0ff1ce";
+    public final ContainerImage CONTAINER_2_IMAGE = IMAGE_2;
+    public final String CONTAINER_2_DATABASE = "tuw";
+    public final String CONTAINER_2_IP = "233.145.99.83";
+    public final Instant CONTAINER_2_CREATED = Instant.now().minus(1, HOURS);
+
+    public final DatabaseContainer CONTAINER_1 = DatabaseContainer.builder()
+            .containerId(CONTAINER_1_ID)
+            .databaseName(CONTAINER_1_DATABASE)
+            .ipAddress(CONTAINER_1_IP)
+            .image(CONTAINER_1_IMAGE)
+            .containerId(CONTAINER_1_ID)
+            .containerCreated(CONTAINER_1_CREATED)
+            .build();
+
+    public final DatabaseContainer CONTAINER_2 = DatabaseContainer.builder()
+            .containerId(CONTAINER_2_ID)
+            .databaseName(CONTAINER_2_DATABASE)
+            .ipAddress(CONTAINER_2_IP)
+            .image(CONTAINER_2_IMAGE)
+            .containerId(CONTAINER_2_ID)
+            .containerCreated(CONTAINER_2_CREATED)
+            .build();
+
+
+}
diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/docker/DockerTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/docker/DockerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..91e7fb80f538efebb06adfaa1cb46e77dc8e1ee1
--- /dev/null
+++ b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/docker/DockerTest.java
@@ -0,0 +1,24 @@
+package at.tuwien.docker;
+
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.testcontainers.containers.PostgreSQLContainer;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest
+public class DockerTest {
+
+    @ClassRule
+    public static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:13")
+            .withDatabaseName("integration-tests-db")
+            .withUsername("sa")
+            .withPassword("sa");
+
+    @Test
+    public void contextLoads() {
+        //
+    }
+}
diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/integration/EndpointTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/endpoint/EndpointTest.java
similarity index 56%
rename from fda-container-managing-service/rest-service/src/test/java/at/tuwien/integration/EndpointTest.java
rename to fda-container-managing-service/rest-service/src/test/java/at/tuwien/endpoint/EndpointTest.java
index 98a0e5313d2d065d19200c136fe1353833ebd624..3828f9080b90fdd28551a69c7043cc01e46265b8 100644
--- a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/integration/EndpointTest.java
+++ b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/endpoint/EndpointTest.java
@@ -1,18 +1,23 @@
-package at.tuwien.integration;
+package at.tuwien.endpoint;
 
+import at.tuwien.BaseIntegrationTest;
+import at.tuwien.service.ContainerService;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
+
 @ExtendWith(SpringExtension.class)
 @SpringBootTest
-@AutoConfigureMockMvc
 public class EndpointTest extends BaseIntegrationTest {
 
+    @MockBean
+    private ContainerService containerService;
+
     @Test
-    public void contextLoads() {
+    public void listAllDatabases_success() {
         //
     }
 }
diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/integration/BaseIntegrationTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/integration/BaseIntegrationTest.java
deleted file mode 100644
index 14e0f9ffa035abb1b62e7933b42f83e68615997a..0000000000000000000000000000000000000000
--- a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/integration/BaseIntegrationTest.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package at.tuwien.integration;
-
-import org.springframework.test.context.TestPropertySource;
-
-@TestPropertySource(locations = "classpath:application.properties")
-public abstract class BaseIntegrationTest {
-
-}
diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseContainerMappingTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseContainerMappingTest.java
index 99fec744b93ee7671c052f8e383b0d74563c5998..178b61a2497e3740b3467a1465a8c167d4589867 100644
--- a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseContainerMappingTest.java
+++ b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseContainerMappingTest.java
@@ -1,18 +1,14 @@
 package at.tuwien.mapper;
 
-import com.github.dockerjava.api.DockerClient;
 import com.github.dockerjava.api.command.InspectContainerResponse;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.mockito.Mockito.when;
 
 @ExtendWith(SpringExtension.class)
 @SpringBootTest
diff --git a/fda-container-managing-service/rest-service/src/test/java/at/tuwien/service/ServiceTest.java b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/service/ServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..82b1104213aab40b4102f6080fe04f26603561c2
--- /dev/null
+++ b/fda-container-managing-service/rest-service/src/test/java/at/tuwien/service/ServiceTest.java
@@ -0,0 +1,79 @@
+package at.tuwien.service;
+
+import at.tuwien.BaseIntegrationTest;
+import at.tuwien.api.dto.database.CreateDatabaseContainerDto;
+import at.tuwien.entity.DatabaseContainer;
+import at.tuwien.exception.ImageNotFoundException;
+import at.tuwien.repository.ContainerRepository;
+import at.tuwien.repository.ImageRepository;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+import java.util.List;
+
+import static org.mockito.Mockito.when;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest
+public class ServiceTest extends BaseIntegrationTest {
+
+    @MockBean
+    private ContainerRepository containerRepository;
+
+    @MockBean
+    private ImageRepository imageRepository;
+
+    @Autowired
+    private ContainerService containerService;
+
+    @Test
+    public void getAllTest_succeeds() {
+        when(containerRepository.findAll())
+                .thenReturn(List.of(CONTAINER_1, CONTAINER_2));
+
+        final List<DatabaseContainer> response = containerService.getAll();
+        Assertions.assertEquals(2, response.size());
+        Assertions.assertEquals(CONTAINER_1, response.get(0));
+        Assertions.assertEquals(CONTAINER_2, response.get(1));
+    }
+
+    @Test
+    public void getById_succeeds() {
+        when(containerRepository.findByContainerId(CONTAINER_1_ID))
+                .thenReturn(CONTAINER_1);
+
+        final DatabaseContainer response = containerService.getById(CONTAINER_1_ID);
+        Assertions.assertEquals(CONTAINER_1, response);
+    }
+
+    @Test
+    public void getById_fails() {
+        when(containerRepository.findByContainerId(CONTAINER_1_ID))
+                .thenReturn(null);
+
+        final DatabaseContainer response = containerService.getById(CONTAINER_1_ID);
+        Assertions.assertNull(response);
+    }
+
+    @Test
+    public void create_succeeds() {
+        when(imageRepository.findByImage(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
+                .thenReturn(IMAGE_1);
+
+        final DatabaseContainer response = containerService.getById(CONTAINER_1_ID);
+        Assertions.assertNull(response);
+    }
+
+    @Test
+    public void create_noImage_fails() {
+        final CreateDatabaseContainerDto containerDto = new CreateDatabaseContainerDto();
+        containerDto.setImage("postgres:latest");
+
+        Assertions.assertThrows(ImageNotFoundException.class, () -> containerService.create(containerDto));
+    }
+}
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Architecture.java b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Architecture.java
new file mode 100644
index 0000000000000000000000000000000000000000..234008b07484f09549998ca1e3838f3ad478063f
--- /dev/null
+++ b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Architecture.java
@@ -0,0 +1,5 @@
+package at.tuwien.entity;
+
+public enum Architecture {
+    LINUX_AMD64, LINUX_ARM64, LINUX_RISCV64, LINUX_PPC64LE, LINUX_S390X, LINUX_386, LINUX_ARM_V7, LINUX_ARM_V8
+}
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/entities/Auditable.java b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java
similarity index 90%
rename from fda-container-managing-service/services/src/main/java/at/tuwien/entities/Auditable.java
rename to fda-container-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java
index eef245f8f6a183f6b868bd1d05550260b196ce7e..db1840b0f3d6ab45f941907f6c0610ce506757f4 100644
--- a/fda-container-managing-service/services/src/main/java/at/tuwien/entities/Auditable.java
+++ b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/Auditable.java
@@ -1,8 +1,6 @@
-package at.tuwien.entities;
+package at.tuwien.entity;
 
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
+import lombok.*;
 import org.hibernate.annotations.GenericGenerator;
 import org.hibernate.annotations.Parameter;
 import org.springframework.data.annotation.CreatedDate;
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/entity/ContainerImage.java b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/ContainerImage.java
new file mode 100644
index 0000000000000000000000000000000000000000..6d1bccd05c81eef19cba695b330f53d7414a3c7b
--- /dev/null
+++ b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/ContainerImage.java
@@ -0,0 +1,37 @@
+package at.tuwien.entity;
+
+import lombok.*;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import java.math.BigInteger;
+import java.time.Instant;
+
+@Entity
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
+@ToString(callSuper = true, onlyExplicitlyIncluded = true)
+public class ContainerImage extends Auditable {
+
+    @Column(nullable = false)
+    private String repository;
+
+    @Column(nullable = false)
+    private String tag;
+
+    @Column(nullable = false)
+    private String hash;
+
+    @Column(nullable = false)
+    private Instant built;
+
+    @Column(nullable = false)
+    private BigInteger size;
+
+    @Column(nullable = false)
+    private Architecture architecture;
+
+}
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/entities/DatabaseContainer.java b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/DatabaseContainer.java
similarity index 67%
rename from fda-container-managing-service/services/src/main/java/at/tuwien/entities/DatabaseContainer.java
rename to fda-container-managing-service/services/src/main/java/at/tuwien/entity/DatabaseContainer.java
index 8c8947ab180bfa9d7055e357c6eff89c8ee79940..971061cdcff2aa2c569767a9c3a028f01e816fb9 100644
--- a/fda-container-managing-service/services/src/main/java/at/tuwien/entities/DatabaseContainer.java
+++ b/fda-container-managing-service/services/src/main/java/at/tuwien/entity/DatabaseContainer.java
@@ -1,17 +1,22 @@
-package at.tuwien.entities;
+package at.tuwien.entity;
 
 import lombok.*;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.OneToOne;
+import javax.persistence.Transient;
 import java.time.Instant;
 
 
 @Entity
 @Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
 @EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
 @ToString(callSuper = true, onlyExplicitlyIncluded = true)
-public class DatabaseContainer extends Auditable{
+public class DatabaseContainer extends Auditable {
 
     @Column(nullable = false)
     private String containerId;
@@ -25,7 +30,10 @@ public class DatabaseContainer extends Auditable{
     @Column(nullable = false)
     private String databaseName;
 
-    @Column
+    @OneToOne(optional = false)
+    private ContainerImage image;
+
+    @Transient
     private String status;
 
     @Column
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/exception/ImageNotFoundException.java b/fda-container-managing-service/services/src/main/java/at/tuwien/exception/ImageNotFoundException.java
new file mode 100644
index 0000000000000000000000000000000000000000..56d20915ec5dc03a69578e711bf2c69bcc17a362
--- /dev/null
+++ b/fda-container-managing-service/services/src/main/java/at/tuwien/exception/ImageNotFoundException.java
@@ -0,0 +1,17 @@
+package at.tuwien.exception;
+
+public class ImageNotFoundException extends Exception {
+
+    public ImageNotFoundException(String message) {
+        super(message);
+    }
+
+    public ImageNotFoundException(String message, Throwable thr) {
+        super(message, thr);
+    }
+
+    public ImageNotFoundException(Throwable thr) {
+        super(thr);
+    }
+
+}
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/mapper/DatabaseContainerMapper.java b/fda-container-managing-service/services/src/main/java/at/tuwien/mapper/DatabaseContainerMapper.java
index d23a617cbf2df9fc53f07e9984273c7dbdde989e..9556ed83fcb9b8cd23f97af2bb6b4926b85aaf61 100644
--- a/fda-container-managing-service/services/src/main/java/at/tuwien/mapper/DatabaseContainerMapper.java
+++ b/fda-container-managing-service/services/src/main/java/at/tuwien/mapper/DatabaseContainerMapper.java
@@ -2,9 +2,10 @@ package at.tuwien.mapper;
 
 import at.tuwien.api.dto.container.DatabaseContainerBriefDto;
 import at.tuwien.api.dto.container.DatabaseContainerDto;
+import at.tuwien.entity.ContainerImage;
 import com.github.dockerjava.api.command.InspectContainerResponse;
 import com.github.dockerjava.api.model.Container;
-import at.tuwien.entities.DatabaseContainer;
+import at.tuwien.entity.DatabaseContainer;
 import com.github.dockerjava.api.model.NetworkSettings;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
@@ -30,6 +31,14 @@ public interface DatabaseContainerMapper {
         return data.getNetworks().get("bridge").getIpAddress();
     }
 
+    default ContainerImage imageToContainerImage(String image) {
+        int index = image.indexOf(":");
+        return new ContainerImage().builder()
+                .repository(image.substring(0,index))
+                .tag(image.substring(index+1))
+                .build();
+    }
+
     DatabaseContainer containerToDatabaseContainer(Container data);
 
     DatabaseContainerBriefDto databaseContainerToDataBaseContainerBriefDto(DatabaseContainer data);
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/repositories/MetadataRepository.java b/fda-container-managing-service/services/src/main/java/at/tuwien/repositories/MetadataRepository.java
deleted file mode 100644
index 5c7fc6ba05db3d9562f9e4a60750333006c53a94..0000000000000000000000000000000000000000
--- a/fda-container-managing-service/services/src/main/java/at/tuwien/repositories/MetadataRepository.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package at.tuwien.repositories;
-
-import at.tuwien.entities.DatabaseContainer;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface MetadataRepository extends JpaRepository<DatabaseContainer, String> {
-}
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ContainerRepository.java b/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ContainerRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..db8398e973eedbfb458a9f645632ccf9ac2651a6
--- /dev/null
+++ b/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ContainerRepository.java
@@ -0,0 +1,12 @@
+package at.tuwien.repository;
+
+import at.tuwien.entity.DatabaseContainer;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ContainerRepository extends JpaRepository<DatabaseContainer, Long> {
+
+    DatabaseContainer findByContainerId(String id);
+
+}
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ImageRepository.java b/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ImageRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..1a8991617df6a93da4bcdb5fc59d5c89014663ca
--- /dev/null
+++ b/fda-container-managing-service/services/src/main/java/at/tuwien/repository/ImageRepository.java
@@ -0,0 +1,15 @@
+package at.tuwien.repository;
+
+import at.tuwien.entity.ContainerImage;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ImageRepository extends JpaRepository<ContainerImage, Long> {
+
+    @Query(value = "select distinct tag from ContainerImage where repository = :repo and tag = :tag")
+    ContainerImage findByImage(@Param("repo") String repository, @Param("tag") String tag);
+
+}
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java b/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java
index 63b3cf9a68fd0faacba20ce889e449d69e81304c..9debf346489c2551f8a0c5dbe6fa2417130dda3f 100644
--- a/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java
+++ b/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java
@@ -1,68 +1,63 @@
 package at.tuwien.service;
 
 import at.tuwien.api.dto.database.CreateDatabaseContainerDto;
-import com.github.dockerjava.api.DockerClient;
-import com.github.dockerjava.api.command.InspectContainerResponse;
-import com.github.dockerjava.api.model.Container;
-import com.github.dockerjava.api.model.HostConfig;
-import com.github.dockerjava.api.model.PortBinding;
-import com.github.dockerjava.api.model.RestartPolicy;
-import at.tuwien.entities.DatabaseContainer;
+import at.tuwien.entity.ContainerImage;
+import at.tuwien.entity.DatabaseContainer;
+import at.tuwien.exception.ImageNotFoundException;
 import at.tuwien.mapper.DatabaseContainerMapper;
+import at.tuwien.repository.ContainerRepository;
+import at.tuwien.repository.ImageRepository;
+import com.github.dockerjava.api.DockerClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.SocketUtils;
 
 import java.util.List;
-import java.util.stream.Collectors;
 
 @Service
 public class ContainerService {
 
     private final DockerClient dockerClient;
+    private final ContainerRepository containerRepository;
+    private final ImageRepository imageRepository;
     private final DatabaseContainerMapper databaseContainerMapper;
 
     @Autowired
-    public ContainerService(DockerClient dockerClient, DatabaseContainerMapper databaseContainerMapper) {
+    public ContainerService(DockerClient dockerClient, ContainerRepository containerRepository,
+                            ImageRepository imageRepository, DatabaseContainerMapper databaseContainerMapper) {
         this.dockerClient = dockerClient;
+        this.containerRepository = containerRepository;
+        this.imageRepository = imageRepository;
         this.databaseContainerMapper = databaseContainerMapper;
     }
 
-    public String createDatabaseContainer(CreateDatabaseContainerDto dto) {
-        int availableTcpPort = SocketUtils.findAvailableTcpPort(8180, 8500);
-        HostConfig hostConfig = HostConfig.newHostConfig()
-                .withPortBindings(PortBinding.parse(availableTcpPort + ":5432"))
-                .withRestartPolicy(RestartPolicy.alwaysRestart());
-
-//        CreateContainerResponse container = dockerClient.createContainerCmd("rdr-postgres:1.0")
-//                .withName(dto.getContainerName())
-//                .withEnv("POSTGRES_DB=" + dto.getDatabaseName(), "POSTGRES_PASSWORD=postgres")
-//                .withHostConfig(hostConfig).exec();
-//        dockerClient.startContainerCmd(container.getId()).exec();
-//        return container.getId();
-        return "deadbeef";
+    public DatabaseContainer create(CreateDatabaseContainerDto containerDto) throws ImageNotFoundException {
+        final int index = containerDto.getImage().indexOf(":");
+        final String repositoryName = containerDto.getImage().substring(0,index);
+        final String tagName = containerDto.getImage().substring(index+1);
+        final ContainerImage image = imageRepository.findByImage(repositoryName, tagName);
+        if (image == null) {
+            throw new ImageNotFoundException("image was not found in metadata database.");
+        }
+//        int availableTcpPort = SocketUtils.findAvailableTcpPort(8180, 8500);
+//        HostConfig hostConfig = HostConfig.newHostConfig()
+//                .withPortBindings(PortBinding.parse(availableTcpPort + ":5432"))
+//                .withRestartPolicy(RestartPolicy.alwaysRestart());
+//
+////        CreateContainerResponse container = dockerClient.createContainerCmd("rdr-postgres:1.0")
+////                .withName(dto.getContainerName())
+////                .withEnv("POSTGRES_DB=" + dto.getDatabaseName(), "POSTGRES_PASSWORD=postgres")
+////                .withHostConfig(hostConfig).exec();
+////        dockerClient.startContainerCmd(container.getId()).exec();
+////        return container.getId();
+        return new DatabaseContainer();
     }
 
-    /**
-     * Get specific information for container by id
-     *
-     * @param containerID The id
-     * @return The specific information
-     */
-    public DatabaseContainer getDatabaseById(String containerID) {
-        final InspectContainerResponse container = dockerClient.inspectContainerCmd(containerID).exec();
-        return databaseContainerMapper.inspectContainerResponseToDatabaseContainer(container);
+    public DatabaseContainer getById(String containerId) {
+        return containerRepository.findByContainerId(containerId);
     }
 
     public List<DatabaseContainer> getAll() {
-        final List<Container> containers = dockerClient.listContainersCmd()
-                .withShowAll(true)
-//                .withAncestorFilter(databaseProperties.getDatabaseImages())
-                .exec();
-        return containers.stream()
-                .map(databaseContainerMapper::containerToDatabaseContainer)
-                .collect(Collectors.toList());
+        return containerRepository.findAll();
     }
 
-
 }
diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/service/ImageService.java b/fda-container-managing-service/services/src/main/java/at/tuwien/service/ImageService.java
new file mode 100644
index 0000000000000000000000000000000000000000..659f46fa912e3af792fae3a595eaba98cc47e6ee
--- /dev/null
+++ b/fda-container-managing-service/services/src/main/java/at/tuwien/service/ImageService.java
@@ -0,0 +1,24 @@
+package at.tuwien.service;
+
+import at.tuwien.entity.ContainerImage;
+import at.tuwien.repository.ImageRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ImageService {
+
+    private final ImageRepository imageRepository;
+
+    @Autowired
+    public ImageService(ImageRepository imageRepository) {
+        this.imageRepository = imageRepository;
+    }
+
+    public List<ContainerImage> getAll() {
+        return imageRepository.findAll();
+    }
+
+}