구디아카데미/JAVA

컨테이너 배포, 도커

COCO_develop 2025. 2. 17. 12:47

컨테이너

  • 리눅스 기반의 기술.
  • 서비스 구동에 필요한 파일들만으로 이루어진 컨테이너 이미지를 이용하여 동작시킨 가상서버.
  • VM과 다르게 필요한 최소한의 파일들로 이루어져 용량이 작음.
  • 컨테이너 이미지 생성시 개발환경과 같은 환경으로 미리 구성하여 생성함으로써 해당 이미지를 이용해 생성하는 컨테이너는 항상 같은 환경으로 동작함. 즉 배포환경을 빠르게 구축할 수 있음.

 

도커: 컨테이너 이미지, 컨테이너의 생성, 제거 등을 위한 컨테이너 엔진

 

도커 설치

https://docs.docker.com/engine/install/ubuntu/

 

Ubuntu

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

docs.docker.com


# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

 

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

sudo docker run hello-world

-> 이게 뜨면 정상적으로 설치 완료

 

docker pull : 이미지 다운로드

docker pull nginx:latest : 최신 다운 이미지 다운로드

docker image ls : 이미지 출력

 

docker create -p 80:80 --name websvr nginx:latest : 컨테이너 생성 (80:80=접속 포트, wevsvr=이름)

docker container ls : 동작 중인 컨테이너 출력

docker container ls -a : 모든 컨테이너 출력

docker start {websvr} : 도커 실행

 

docker run -d -p 81:80 --name websvr2 httpd:latest : 도커 실행(create, pull 등 할 필요X)(-d=백그라운드 동작, httpd=apache)

-> 172.~~:81 접속

docker run -d -p 3306:3306 --name mydb -e MARIADB_ROOT_PASSWARD=1234 mariadb : db 설치

 

도커 이미지 이름 구성

Resistry = 도커 이미지 저장소: 도커이미지를 관리하기 위한 클라우드상의 공간

 

도커 컨테이너 라으프사이클

 

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

 

docker exec -it {컨테이너명} bash : 컨테이너 접속

 

docker commit {컨테이너명} {id}/{디렉토리명}:0.1 

docker login -u {id} : id = docker hub 아이디 -> pw

 

docker build -t {id}/{stswebjpa}:0.2 . : id/파일명:tag, . = 현재 디렉토리 

 

 

./mvnw clean package

docker image build -t {이미지명}: 이미지 만들기

docker container rm -f stswebjpa

docker run -d -p 8080:8080 --name stswebjpa {id}/stswebjpa:0.3 : 컨테이너에 배포

 

 

 


1. ubuntu에 docker 설치

2. mariadb 컨테이너 생성:

   1) classdb 생성

   2) scott/1234 사용자 생성

   3) scott 사용자에게 classdb 권한 부여

     docker run -d -p 3306:3306 --name mydb -e MARIADB_ROOT_PASSWARD=1234 mariadb

     docker exec -it mydb bash

     mydb> mariadb -u root -p

             1234

              create database classdb;

              create user scott@'%' identified by '1234';

              grant all privilages on classdb.* to scott@'%';

              flush privileges;

              exit

     docker container inspect mydb | grep IPA => 컨테이너 ip 주소 확인

 

3. WAS 컨테이너 생성

   1) 애플리케이셔 소스 이용하여 빌드

        cd stswebjpa

        nano src/main/resources/application.properties

         jdbc 주소를 localhost에서 db 컨테이너 주소로 변경

         ctrl+x, y, 엔터로 저장

   2) 빌드된 jar 파일을 Dockerfile로 컨테이너 이미지에 포함하여 생성

        docker build -t 도커허브아이디/저장소명:태그  .

4. WAS 컨테이너 생성

    docker run -d -p 8080:8080 --name stswebjpa 도커허브아이디/저장소명:태그

5. ubuntu ip주소:8080으로 접속