-
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
'수업 내용 정리' 카테고리의 다른 글
(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 (9주차 59일) STS4 설치, 톰캣 설정, 프로젝트 생성 (1) 2024.07.09 (8주차 52일) JSP 구성, 내장 객체 (1) 2024.07.02