//////
Search
🐋

Hospital API - 도커 설치, 컨테이너/이미지 실습, maven 설치, 서버 띄우고 모바일에서 확인, 도커 볼륨까지

생성일
2022/11/10 08:42
태그
Docker
생성일 1

도커설치

docker_minikube_kubectl_install
Kyeongrok
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.
리눅스에서 사용중인 프로세스 확인 및 제거