도커설치
sudo su -
mkdir git
cd git
git clone https://github.com/Kyeongrok/docker_minikube_kubectl_install
Java
복사
도커 설치과정을 스크립트로 정리한 내용이 올라간 깃 레포지토리다.
ll
sh docker_install.sh
Java
복사
도커에 Mysql 띄우기
명령어
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345678 -d mysql
Java
복사
도커에 maven 띄우기
1.
maven 설치(root에서)
apt update
apt install maven -> 중간에 y 입력해줍니다
Java
복사
2.
최상위 파일로 이동
cd ~
Java
복사
3.
원하는 github 레포지토리를 clone
git clone (깃 주소)
cd springboot-jdbc-template-userdao(clone된 깃헙파일 이름)
Java
복사
4.
도커에 빌드하기위한 작업 Dockerfile 작성 !
*참고 : Linux에서는 shift+insert를 사용하면 붙여넣기, ctrl+insert를 사용하면 복사된다.
FROM openjdk:11-jdk-slim
VOLUME /tmp
ADD /target/*.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Java
복사
Dockerfile
•
명령어 입력순서(윈도우 버전)
vim Dockerfile
i
Shift + insert (command + v)
Esc
Shift + zz
Java
복사
여기까지 Dockerfile을 생성한 프로젝트를 다시 깃허브에 푸시한다.
5.
깃허브를 다시 clone하고 빌드 한다.
cd ..
rm -rf springboot-jdbc-template-userdao
//그 다음 다시 git clone (git주소)
git clone (깃 주소)
cd springboot-jdbc-template-userdao(clone된 깃헙파일 이름)
Java
복사
6.
maven 처음 빌드할 때 시간이 좀 오래 걸린다. 빌드 후에 두번째 명령어에서 .jar을 만들어준다.
mvn package (mvn pacakge 빌드하고)
mvn -DskipTests=true package -> .jar 생성
docker build -t springboot-jdbc-template . (docker 빌드)
docker images
docker ps
Java
복사
jar파일 생성 및 docker이미지 생성
주의
docker build -t springboot-jdbc-template . // 점 찍고 한 칸 띄워서 엔터
Java
복사
AddFailed Error 발생하면
build 성공하면 명령어 입력해보기
mvn package 성공 시 보이는 화면
docker images
docker ps
Java
복사
docker images
docker ps
jar 파일 ec2에 올리는 명령어
리눅스에서 java로 실행
→ docker을 거치지 않고 우분투 리눅스에서 바로 띄웠다.
→ swagger에 접속하면 내 폰에서도 확인할 수 있다.
properties(혹은 yml) 파일에 DB 관련 환경 변수가 작성 되어 있어야만 정상 실행
Java
복사
// git의 디렉토리로 이동 후
mvn -DskipTests=true package // 아까 했으니 넘어가도 되고 target 파일이 보일거예여
cd target
java -jar crud-api-0.0.1-SNAPSHOT.jar // 강사님 github를 clone했을 경우
java -jar hello-api-0.0.1-SNAPSHOT.jar
Java
복사
결과 화면
docker 컨테이너로 .jar 실행
→ 마찬가지로 swagger에 접속하면 내 폰에서도 확인할 수 있다.
docker run -p 8080:8080 -d -e SPRING_DATASOURCE_URL=jdbc:mysql://\
ec2-3-38-111-117.ap-northeast-2.compute.amazonaws.com:3306/likelion-db \
-e SPRING_DATASOURCE_PASSWORD=1q2w3e4r springboot-jdbc-template
Java
복사
docker 로 생성한 도커이미지 실행
swagger 웹페이지 화면 띄우기
http://ec2-인스턴스 주소:8080/swagger-ui/#/
Kotlin
복사
http://docker 호스트의 IP:컨테이너의 포트번호/swagger-ui/#/
pc
LTE
도커 실습
도커 이미지를 내려받고 내컴퓨터에서 실행시키기
도커 엔진의 단점 : 리눅스에서밖에 안됨
그런데 대부분의 서버는 리눅스이다.
•
docker hub에서 이미지를 내려받아서 실행시킬 수 있다.
•
docker hub는 github와 비슷하다
docker run (복붙한 내용)
Java
복사
1.
docker에서 ubuntu 컨테이너 들어가기
docker run -i -t ubuntu:22.04
Java
복사
2.
실습 3 ubuntu:22.04 이 이미지로 -i -t옵션으로 들어와서 printenv해보기
printenv
Java
복사
결과화면
알 수 있는 것 - 도커 컨테이너 이미지 안으로 들어갈 수 있다 = 명령어를 사용할수있다
3.
실습 4 -e 옵션으로 SPRING_DATASOURCE_URL=jdbc:mysql://<host> 넘겨서 들어오는지 확인 해보기
docker run -i -t -e SPRING_DATASOURCE_URL=jdbc ubuntu:22.04
printenv
Java
복사
결과화면
참고 : 환경변수 우선순위
알 수 있는 것 -e 옵션으로 환경변수를 설정할 수 있다
4.
실습 5 실행중인 container의 environment variable알아보기
docker run -p 8080:8080 -d -e SPRING_DATASOURCE_URL
=jdbc:mysql://ec2-3-38-160-55.ap-northeast-2.compute.amazonaws.com:3306/like-lion-db
-e SPRING_DATASOURCE_PASSWORD=sanghee065@ springboot-template
Java
복사
결과 화면
알 수 있는 것 :-d 옵션을 이용해 daemon으로 띄움
도커를 데몬으로 명령어 실행시켰는데 컨테이너 아이디가 뜨지 않으면 바로 내려가버린 경우이다.
docker longs <container_id> 로 파악할 수 있다.
5.
이외의 명령어 실습
docker ps
docker images
docker exec
docker logs
docker run
docker build
Java
복사
docker ps —> container_id 확인하기 위함
docker exec <container_id> printenv —> 앞에서 -e옵션으로 정보가 잘 넘어갔는지 확인하기
참고 : java -jar 실행할 때 포트 바꾸는 법
export SERVER_PORT=8888
java -jar target/crud-api-0.1-SNAPSHOT.jar
Java
복사
결과
Started ServerConnector@6d07a63d{HTTP/1.1, (http/1.1)}{0.0.0.0:8888}
원래 mvn빌드 → Docker build
Cost가 매우 큰 작업 human error가 매우 많이 발생
디스크 공간을 위해 도커 이미지 삭제
•
전체 컨테이너와 이미지 확인(종료된 컨테이너까지)
docker ps -a
Java
복사
•
현재 떠있는 컨테이너만 확인
돌고 있는 컨테이너의 이미지는 내릴 수 없기 때문에 컨테이너를 내려야 한다.
도커 컨테이너 삭제
•
도커 container 내리기
docker kill <container_id>
docker ps
Java
복사
•
도커 container 지우기
docker ps -a //내려간 컨테이너 보기
docker rm <container_id>
Java
복사
도커 이미지 지우기
예시 docker rmi <image_name>:<version>
docker rmi ubuntu:22.04 —> 안지워 질 수 있습니다.
Java
복사
도커 -p 옵션
예시
-p 80:80
-p 8080:8080
-p 3306:3306
Java
복사
앞에꺼 | 뒤에꺼 |
외부에서 들어오는 것
ec2-3-38-111-117.ap-northeast-2.compute.amazonaws.com:80 | 들어온 다음에 docker로 가는 것
→ docker run nginx |
-p 8080:8081
ec2-3-38-111-117.ap-northeast-2.compute.amazonaws.com:8080 | server:
port: 8081
or
server.port=8081 |
-p 8888:8080
ec2-3-38-111-117.ap-northeast-2.compute.amazonaws.com:8888 | default 설정을 안하거나
server:
port: 8080
or
server.port=8080 |
-p 8080:8082
ec2-3-38-111-117.ap-northeast-2.compute.amazonaws.com:8080 | default 설정을 안하거나
server:
port: 8082
or
server.port=8082 |
-p 옵션
-p [호스트의 포트]:[컨테이너 포트]
→ 호스트의 포트를 컨테이너 포트에 연결한다는 의미
예시
호스트 머신 — EC2 : ec2-3-38-111-117.ap-northeast-2.compute.amazonaws.com:8080
도커 컨테이너 – spring-boot-template(8080)
실습 6 워드 프레스 띄우기
docker run -d --name wordpressdb -e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress mysql:5.7
Java
복사
docker run -d -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=password --name wordpress --link wordpressdb:mysql \
-p 80 wordpress
Java
복사
•
명령어 입력 후 확인
run 한 wordpress 컨테이너가, mysql:5.7 컨테이너와 연결되어서 db와 연동된 상태
•
tag
– name 옵션을 이용해 name을 지정할 수 있다는 것
– link 를 이용해 앞에서 –name을 지정해서 띄운 mysql과 연동 한 것.
•
인스턴스 의 인바운드 규칙 추가 (49153)
•
웹 페이지 들어가서 확인
aws DNS주소 : (wordpress포트번호)
도커 볼륨 실습
→ 리눅스 만 내려가지 않으면 docker 이 사라지지 않도록 만드는 과정
→ 리눅스와 Docker Container 간에 같은 디렉토리를 바라보도록 하는 것
•
리눅스 명령어
pwd → 현재 디렉토리
cd ~ → home으로
Java
복사
•
디렉토리 확인 실습 (먼저 우분투로 확인)
docker run -v /root:/app -it ubuntu:22.04
docker ps
docker exec <container_id> ls /app
Java
복사
ubuntu 도커 컨테이너의 디렉토리 확인
파일 생성하면 같이 생성 되는지 확인
echo hello > hello.log
docker exec <container_id> ls /app
cat hello.log
Java
복사
hello.log가 추가된 것을 확인할 수있다.
cd ~
mkdir mysql_data
Java
복사
워드프레스와 MYSQL 의 디렉토리를 마운트
•
볼륨 명령어는 리눅스의 Mysql이 살아있는 한 docker 이 사라지지 않도록 만드는 과정
•
-v 옵션을 써서 host의 /mysql_data를 /var/lib/mysql과 마운트
•
마운트
(mount)는 컴퓨터 과학에서 저장 장치에 접근할 수 있는 경로를 디렉터리
구조에 편입시키는 작업을 말한다.
docker run -d -p 3308:3306 --name wordpressdb2
-e MYSQL_ROOT_PASSWORD=password
-e MYSQL_DATABASE=wordpress
-v /root/mysql_data:/var/lib/mysql mysql:5.7
Java
복사
access denied
access denied에러는 포트 추가
성공하면 컨테이너 아이디가 출력됨
워드프레스와 mysql워크벤치 연결하기
에러 발생
에러 1
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project Swagger-exercise: There are test failures.
아무래도 Test코드에서 실패한것처럼 보이는데 testcode 모두 삭제해보자 → 성공
에러 2 driver 클래스가 잘못되었다?
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. //datasource 오류
Reason: Failed to determine a suitable driver class → 환경 설정을 해줘야 한다.
환경 설정 이 원인일 경우 고려사항
intellij 환경변수 설정 방법 → 변화 없었음
application.yml → 처음방식(이부분이 실행 안되서 오류가 발생한 듯)
application.properties 설정 방법 → 성공
에러 3 8080 포트 중복 오류
address already in use.Ports are not available: listen tcp 0.0.0.0:8080: bind: address already in use.
리눅스에서 사용중인 프로세스 확인 및 제거