-
2024-08-26~27
- docker -v : docker 버전 확인
- docker compose version : docker compose 버전 확인
- docker pull tomcat:9.0.93-jre11-temurin-noble : tomcat:9.0.93-jre11-temurin-noble 버전 설치
- docker pull mariadb : mariadb 설치
- docker images : docker에 현재 설치된 이미지 확인
- docker image inspect tomcat :
- docker pull tomcat : docker에 최신 버전의 톰캣 설치
- docker save -o ./tomcat_image tomcat:latest : 최신 버전의 톰캣에 latest 별칭 추가
- docker rmi 3b310909d72c : 3b310909d72c의 id를 가진 이미지 삭제
- docker load -i ./tomcat_image : -i 컨테이너 표준 입력 활성화
- docker tag tomcat:latest :
- docker run -d tomcat:latest :
- docker run -d --name tomcat -p 8080:8080 tomcat:latest :
-d(detach) 컨테이너를 백그라운드로 실행, --name 컨테이너 이름 지정, -p(port) [호스트 포트]:[컨테이너 포트] 포트 번호 지정(컨테이너를 외부에 노출시키기 위한 설정), -it: 컨테이너와 터미널로 상호 입출력을 하기 위한 설정 - docker ps-a : 실제 실행 중인 컨테이너 목록 확인
- docker stop tomcat : 실행 중인 톰캣 컨테이너를 중단함
- docker ps -a : -a(attach)
- docker exec tomcat :
- docker run -it --name ubuntu-linux ubuntu:latest :
- docker stop ubuntu-linux
- docker start -i ubuntu-linux
- docker commit ubuntu-test ubuntu-image:1.2.2
- docker run -d --name mariadb -p 3307:3306 -e MARIADB_ROOT_PASSWORD=000123 mariadb:latest :
Mariadb root계정 비밀번호를 root로 지정 - docker exec mariadb date
- docker inspect e38a37d9a185
컨테이너 배포 실습
- 프로젝트 빌드(.jar 파일 생성)
- 컨테이너 생성 후 .jar 파일 컨테이너 내부로 복사
- 컨테이너를 이미지로 생성
- 생성된 이미지로 .jar 파일을 실행하는 컨테이너 생성
- 동작 테스트
department 배포 -> mvn clean -> mvn package
docker run -it —name department-service -p 8080:8080 eclipse-temurin:21-jre-alpine /bin/sh
cd ~
pwd
java -v
java -version
172.17.0.2
docker cp .\05_Department-0.0.1-SNAPSHOT.jar department-service:/root
docker cp .\06_Subject-0.0.1-SNAPSHOT.jar department-service:/root
java -jar 05_Department-0.0.1-SNAPSHOT.jar
application.yml
spring:
application:
name: department-service
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://172.17.0.2:3306/web
username: 'root'
password: '000123'
mybatis:
type-aliases-package: com.beyond.department.vo
mapper-locations:
- classpath:mappers/**/*.xml
springdoc:
swagger-ui:
operations-sorter: method
paths-to-match:
- /v1/**
docker ps -a
docker rm department-service
docker run -it --name subject-service -p 8081:8081 eclipse-temurin:21-jre-alpine /bin/sh
/ # cd ~
~ # ls
~ # java -jar 06_Subject-0.0.1-SNAPSHOT.jar
docker commit subject-service subject-service:1.0
docker run --name subject-service -p 8081:8081 --link mariadb:db subject-service:1.0 java -jar /root/06_Subject-0.0.1-SNAPSHOT.jar
docker cp ./06_Subject-0.0.1-SNAPSHOT.jar department-service:/root
docker network create university
docker rm -f mariadb
docker run -d --name mariadb -p 3307:3306 -v mariadb:/var/lib/mysql/ -e TZ=Asia/Seoul -e MARIADB_ROOT_PASSWORD=root --network university mariadb:latest
docker ps -a
docker inspect id -> ip address: 172.18.0.2
docker run -it --name department-service -p 8080:8080 --network university eclipse-temurin:21-jre-alpine /bin/sh
docker run --name subject-service -p 8081:8081 --network university eclipse-temurin:21-jre-alpine /bin/sh
2024-08-28
<FE>
cd ./04_university
<프로젝트를 배포 가능한 상태로 빌드>
npm install
npm run build
<docker hub>
nginx 설치 (stable-alpine3.20)
docker run -d --name nginx -p 80:80 nginx:stable-alpine3.20
<nginx>
docker inspect 1f69038d997c(image id)
docker container inspect nginx -> 네트워크 설정
http://localhost:80 으로 nginx 컨테이너 확인
docker exec -it nginx /bin/sh
# ls
# cd /usr
# ls
# cd share -> ls: nginx 확인 가능
# cd html
1. dist 파일을 컨테이너 내부로 옮김
vscode) 04_university에서
docker cp ./dist/. nginx:/usr/share/nginx/html
* http://localhost/80으로 확인 가능 -> but 데이터 불러오지 못함, 엔드포인트에 department 사용 불가능
2.
devops 레포 클론 받아서 -> default.conf 파일 생성하고 코드 복붙
terminal) # cd /etc/nginx/conf.d
vscode) default.conf 경로로 이동 ->
docker cp ./default.conf nginx:/etc/nginx/conf.d/default.conf# cat default.conf 해서 설정 변경된 것 확인
docker restart nginx
3. 05_department - Webconfig 설정하고 다시 빌드
package com.beyond.department.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
// Spring 서버 전역으로 CORS 설정
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:5173", "http://localhost") // 여기 수정
.allowedMethods("GET", "POST", "PUT", "DELETE");
}
}05_department) mvn clean
05_department) mvn package
docker run -it --name department-service -p 8080:8080 --network university -e TZ=Asia/Seoul eclipse-temurin:21-jre-alpine /bin/sh
05_department -> target) docker cp 05_Department-0.0.1-SNAPSHOT.jar department-service:/root
4. 우분투 이미지를 통해 컨테이너 생성 -> 파일 생성
docker run -it --name ubuntu-linux ubuntu:latest
docker rm ubuntu-linux
docker run -it --name ubuntu-linux -v /Users/hyeonji/ubuntu_data:/root/data ubuntu:latest
-> 컨테이너의 ubuntu-linux에서 root/data와 로컬(호스트) 계정의 새 폴더 ubuntu_data를 마운트함
cd data -> ls -> echo "hello world" > hello.txt
-> 컨테이너를 삭제하고 다시 생성해도 내부의 파일이 삭제되지 않음을 확인
(호스트와 연결되어 있으므로 동일한 컨테이너 생성 시 그대로 파일과 내용이 남아 있음)5. 호스트와 연결 시 단점 확인
docker run -d --name mariadb-test -e MARIADB_ROOT_PASSWORD=root mariadb
docker exec -it mariadb-test /bin/bash
docker run -d --name mariadb-test -v /Users/hyeonji/ubuntu_data:/var/lib/mysql -e MARIADB_ROOT_PASSWORD=root mariadb
6. volume-container (호스트와 볼륨 공유)
docker run -it --name volume-container -v /Users/hyeonji/test:/root/test ubuntu:latest
ls /root -> 호스트의 test 폴더와 volume-container이 연결됨 확인
docker run -it --name ubuntu-linux1 --volumes-from volume-container ubuntu:latest
docker run -it --name ubuntu-linux2 --volumes-from volume-container ubuntu:latest
-> host와 volume을 직접 연결하는 것이 아니라 test와 연결되어 있는 volume-container를 통해서 다른 컨테이너와 공유함
echo "hello, hello" > /root/test/hello.txt
ls /root/test, cat /root/test/hello.txt -> file 생성 확인, linux1에서도 동일하게 내용이 확인되는지 확인
7. 도커 볼륨 활용
docker volume create --name ubuntu-volume
docker run -it --name ubuntu-linux -v ubuntu-volume:/root/data ubuntu:latest -> root에 data 폴더 생성
echo "hello" > ~/data/hello.txt
cat ~/data/hello.txt -> 내용 확인, 삭제했다가 다시 생성해도 파일 존재하는지 확인
8. 도커 파일 생성
01_Docker - 01_Dockerfile - Dockerfile 생성(확장 설치)
Dockerfile
# 베이스 이미지를 ubuntu:latest로 지정FROM ubuntu:latestLABEL maintainer="henhen7 <g1008702@gmail.com>"LABEL version="1.0"# 베이스 이미지로 만들어진 컨테이너에서 실행할 명령어RUN apt-get updateRUN apt-get install sudoRUN sudo apt-get install net-tools# 컨테이너 실행 시 먼저 실행될 명령을 지정CMD ifconfig2024-08-29
1. Dockerfile 생성하고 build한 jar 디렉터리 이동(v1)
FROM eclipse-temurin:21-jre-alpineLABEL maintainer="henhen7 <g1008702gmail.com>"LABEL version="1.0"COPY 05_Department-0.0.1-SNAPSHOT.jar /rootENV TZ=Asia/SeoulEXPOSE 8080WORKDIR /rootCMD [ "java", "-jar", "05_Department-0.0.1-SNAPSHOT.jar" ]docker build -t department-service:1.3 ./ -> 도커 이미지 생성
docker run --rm --name department-service -p 8080:8080 --network university department-service:1.3
-> 도커 빌드 명령어로 이미지를 빌드할 때 build-context에서 경로(Dockerfile이 존재하는 경로)를 읽어서 파일을 찾아 씀
이 때 해당하는 디렉터리 뿐만 아니라 하위 디렉터리도 포함하기 때문에 빌드 시 불필요한 파일이 포함되지 않도록 함
2. Dockerfile v2: 변수 지정 및 확장
FROM eclipse-temurin:21-jre-alpineLABEL maintainer="henhen7 <g1008702@gmail.com>"LABEL version="2.1"COPY 05_Department-0.0.1-SNAPSHOT.jar /rootARG PROFILE=devARG PORT=8088ENV TZ=Asia/SeoulEXPOSE ${PORT}WORKDIR /rootCMD [ "java", "-jar", "05_Department-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=${PROFILE}" ]docker build -f ./Dockerfile_v2 -t department-service:2.1 --build-arg PROFILE=live --build-arg PORT=30021 ./
-> 빌드 시 도커 파일에서 지정한 argument 값을 지정 가능
-> arg 선언하지 않고 빌드 시 파일 내에 기본값으로 설정된 값으로 빌드됨
docker run -d --rm --name department-service -p 30021:30021 --network university department-service:2.1
-> ARG로 선언한 변수는 도커파일 내에서만 작동함. 따라서 컨테이너 실행 시점에는 해당 변수를 찾을 수 없음(접근 불가능)
-> 환경변수로 선언하면 컨테이너 실행 시점에서도 적용 가능함 (ENV PROFILE=${PROFILE})
docker logs -f 컨테이너id -> 로그 확인
docker inspect 컨테이너id -> 컨테이너의 정보 확인
3. 실습
docker build -f ./Dockerfile -t subject-service:1.0 --build-arg PROFILE=live --build-arg PORT=30022 ./
docker run -d --rm --name subject-service -p 30022:30022 --network university subject-service:1.0
4. 뷰 빌드
FROM nginx:stable-alpine3.20LABEL maintainer="henhen7 <g1008702@gmail.com>"LABEL version="1.1"COPY dist /usr/share/nginx/html# SPA 라우팅 처리를 할 수 있도록 기본 설정을 변경한 파일로 변경COPY default.conf /etc/nginx/conf.d/default.confENV TZ=Asia/SeoulEXPOSE 80# nginx를 실행하는 명령어 작성CMD ["nginx", "-g", "daemon off;"]default.conf, dockerfile 수정 후 같은 경로에 dist 폴더 복사, 빌드
docker build -t vue-app:1.1 ./
docker run -d --rm --name vue-app -p 80:80 vue-app:1.1
'수업 내용 정리' 카테고리의 다른 글
Argo cd (3) 2024.10.17 [Udemy] Twitter4j & Kafka (0) 2024.09.23 (2024-07-24) bootstrap.yml 설정 (1) 2024.07.24 (9주차 61일) AOP, STS4 Spring MVC Project 구동 (0) 2024.07.12 (9주차 60일) STS4 설정, 스프링 DI (0) 2024.07.10