👉 공부의 순서
// 공부의 순서 1. 파이썬 (언어) 2. 자료구조 (알고리즘) - 6개월 3. 운영체제, 네트워크 4. 자바 5. 네트워크 프로그래밍 (소켓/프로토콜) 5-1. 단방향/반이중/전이중 6. RDB 7. 서블릿 8. 스프링부트 (Rest) 9. HTML/CSS/Javascript 10. SSR 프로젝트 11. RESTAPI 전환 (보안 - 해시, JWT, RSA) 12. 리눅스 (Shell) 13. Docker 14. AWS(클라우드 - 공부 - VPC,LB,IAM.. 등등) 15. 노가다 배포 (EC2) - 고생 16. 도커 배포 (EC2) - 고생 17. 오케스트라 (쿠버네티스)
🔹 docker ps로 현재 docker이미지 상태를 알 수 있다.
docker ps

🔹 아래 명령어를 사용해서 tomcat이 없으면 자동으로 다운로드 한다.
docker run -d -p 9000:8080 tomcat:10

🔹 docker ps 해보면 아래처럼 뜨게 된다.

🔹 포트 포워딩 된걸 확인할 수 있다.

👉 커서를 켜서 도커 연습세팅해보자.

👉 도커 실행해보기

docker exec -it 0ae3 bash
위의 명령어로 실행할 수 있다.

🔹Tomcat 디렉토리 구조
// 리스트 명령어이고 내부 구조를 확인할 수 있다. ls

Tomact 디렉토리 구조 설명
Tomcat 디렉토리 구조에 대한 설명을 드리겠습니다. ls 명령어를 실행했을 때 나오는 각 디렉토리와 파일들의 역할은 다음과 같습니다: bin: Tomcat 서버의 시작, 중지 및 기타 관리 스크립트가 포함되어 있습니다. 예를 들어 startup.sh나 catalina.sh 같은 스크립트가 있습니다. conf: Tomcat의 주요 구성 파일들이 포함되어 있습니다. server.xml, web.xml, context.xml 등 중요한 설정 파일들이 위치합니다. lib: Tomcat이 실행될 때 필요한 라이브러리 파일들이 포함되어 있습니다. 여기에는 Tomcat의 기능을 확장하거나 설정을 도와주는 JAR 파일들이 포함됩니다. logs: Tomcat 서버가 실행되면서 생성되는 로그 파일들이 저장됩니다. catalina.out, localhost.log, manager.log 등 다양한 로그 파일이 생성됩니다. native-jni-lib: Java Native Interface(JNI)를 사용하는 네이티브 라이브러리 파일들이 포함되어 있습니다. 이 디렉토리는 플랫폼에 따라 다를 수 있습니다. temp: Tomcat이 실행되는 동안 임시 파일을 저장하는 디렉토리입니다. 서버가 재시작될 때마다 이 디렉토리의 내용은 삭제될 수 있습니다. webapps: 배포된 웹 애플리케이션이 위치하는 디렉토리입니다. 여기에는 WAR 파일이나 압축 해제된 애플리케이션 폴더가 포함됩니다. webapps.dist: 기본적으로 제공되는 웹 애플리케이션들이 위치하는 디렉토리입니다. 필요에 따라 이곳의 애플리케이션을 webapps 디렉토리로 복사하여 사용할 수 있습니다. work: Tomcat이 실행되는 동안 JSP 파일을 서블릿으로 변환하거나 캐시하는 등 작업 파일들을 저장하는 디렉토리입니다. BUILDING.txt: Tomcat 소스를 빌드하는 방법에 대한 정보가 포함된 텍스트 파일입니다. CONTRIBUTING.md: Tomcat 프로젝트에 기여하는 방법에 대한 가이드가 포함되어 있습니다. LICENSE: Tomcat의 라이선스 정보가 포함된 파일입니다. NOTICE: 라이선스와 관련된 추가 정보가 포함된 파일입니다. README.md: Tomcat에 대한 간단한 설명과 사용법이 포함된 파일입니다. RELEASE-NOTES: Tomcat의 각 릴리스 버전에 대한 정보와 변경 사항이 포함된 파일입니다. RUNNING.txt: Tomcat을 실행하는 방법에 대한 자세한 설명이 포함된 파일입니다.
🔹 webapp.dist 디렉토리 구조
// webapps.dist 디렉토리로 이동 // 설명 : 기본적으로 제공되는 웹 애플리케이션들이 위치하는 디렉토리이기 때문에, // 이 디렉토리로 이동하여 기본 웹 애플리케이션을 확인하거나 수정할 수 있다. cd webapps.dist // 이동후 ls명령어 실행 : 내부 구조를 확인한다. ls

webapp.dist 디렉토리 구조 설명
docs: Tomcat 문서가 포함된 디렉토리입니다. 여기에는 Tomcat의 사용법, 설정 방법, API 문서 등이 포함되어 있습니다. examples: Tomcat의 기능을 시연하는 예제 애플리케이션이 포함된 디렉토리입니다. 이 디렉토리는 Tomcat을 처음 사용하는 사용자나 특정 기능을 테스트하고자 하는 사용자에게 유용합니다. host-manager: Tomcat 호스트 매니저 웹 애플리케이션이 포함된 디렉토리입니다. 이 애플리케이션은 Tomcat 호스트를 관리하는 데 사용됩니다. 예를 들어, 가상 호스트를 추가하거나 삭제할 수 있습니다. manager: Tomcat 매니저 웹 애플리케이션이 포함된 디렉토리입니다. 이 애플리케이션은 Tomcat 서버에서 애플리케이션을 배포, 삭제, 다시 로드하는 등의 관리 작업을 수행하는 데 사용됩니다. 주로 웹 기반 관리 콘솔로 접근할 수 있습니다. ROOT: Tomcat 서버의 기본 애플리케이션이 포함된 디렉토리입니다. 이 디렉토리에 포함된 애플리케이션은 기본적으로 서버의 루트 URL(http://localhost:8080/)로 접근할 수 있는 애플리케이션입니다. 보통 Tomcat의 기본 환영 페이지가 포함되어 있습니다.
🔹 webapps폴더에 ROOT 디렉토리 만들기

//ROOT 폴더를 만들 때는 mkdir명령어를 사용한다. mkdir ROOT

//ROOT 폴더 내에서 vi 사용해서 실행해보자. vi index.html
ROOT폴더 내에서 vi명령어를 실행하였더니 아무것도 나오지 않았다. 😢
apt-get으로 메뉴판을 업데이트 해야된다.
🔹 메뉴판 업데이트

//메뉴판 업데이트 apt-get update
근데 이렇게 해도 이거 컨테이너가 꺼지면 다 사라진다. ⚠️조심!!!⚠️

// 나노설치 apt-get install nano
나노는 메모장 같은거
🔹 index.html 작성

nano index.html
실행해서 들어가보면, 위처럼 화면이 나온다.

ctrl + X → Y 엔터
하면 index.html이 저장이 되고,
ls 명령어로 확인해보면 ROOT폴더 옆에 파일이 생성 된게 보인다. 
근데 사실 이 index.html을 ROOT폴더 안에 만들었어야 했는데, 잘못했다 ㅠ
mv 명령어를 사용하여 index.html ROOT폴더로 옮기겠다.
mv /usr/local/tomcat/webapps/index.html /usr/local/tomcat/webapps/ROOT/

그리고 localhost:9000으로 접속하면 포트포워딩이 되어 index.html을 찾는다.
그래서 위 화면 처럼 출력이 된다.
⚠️⚠️주의 할 점⚠️⚠️
이미지는 컨테이너가 꺼지면 다 날라가니까 꼭 주의 하도록 하자.
저장하고 싶다면 커밋을 해야된다.
🔹 커밋하기 - 일단 bash에서 빠져나와야된다.

ctrl
+ P
/ ctrl
+ Q
하면 bash를 종료하는 것이 아니라 잠시 빠져나온다. 
docker ps 명령어로 해당 이미지의 containerID를 찾는다.
여기서는
0ae3

docker commit 0ae3 chugue85/tomcat:10
위의 커밋 명령어를 사용해서 이미지 컨테이너ID / 나의이름 / 태그 를 조합해서 명령어를 실행한다.

그럼 이렇게 도커에서 확인이 가능하다.

docker images로도 확인이 가능하다.
👉 이미지를 지워보자.

이렇게 지울수 있는데, 이걸 지우고 다시 들어가면 아무것도 실행할 수 없다.
다 날라갔기 때문에
🔹 다시 들어갔을 때 확인이 될까?? 다시 실행해보자.

다시 실행해보면??

위 처럼 아무것도 남아있지 않다.
그러므로 작업하다가 커밋하는 것이 매우 중요하다.
🔹 이미지 삭제 & 확인

docker ps -a 는 아까 날라간 이미지도 다 있는데,
이걸 다 지울려면 GUI로 다 삭제하면 된다.


이렇게 지우고 docker ps를 해보면 아무것도 나오지 않을 것이다.

👉 이미지들 확인

docker images
docker images로 최근 사용한 이미지들을 볼 수 있다.
🔹이미지를 커밋 하는 방법

docker commit 0ae3 stephen85-tomcat10

이미지를 구우면서 해시를 만들어 준다.

도커 이미지스로 확인이 가능하다.
🔹 내가 구운 이미지 다시 실행

docker run -d -p 8000:8080 stephen85-tomcat10
내가 만든 이미지를 실행해보자.
명령어 설명
docker run: 도커 컨테이너를 실행하는 명령어입니다. -d: 데몬 모드로 컨테이너를 백그라운드에서 실행합니다. 터미널을 계속 사용하면서 컨테이너를 실행할 수 있습니다. -p 8000:8080: 포트 매핑을 설정합니다. 호스트의 포트 8000을 컨테이너의 포트 8080에 매핑합니다. 즉, 호스트의 http://localhost:8000로 접근하면 컨테이너 내부의 8080 포트로 요청이 전달됩니다. stephen85-tomcat10: 실행할 도커 이미지의 이름입니다. 이 경우 stephen85-tomcat10이라는 이름의 도커 이미지를 사용하여 컨테이너를 실행합니다.

실행하면 아래 해쉬도 같이 반환한다.

이렇게 구운 이미지가 실행이 가능하다.
- 근데 이게 다른 곳에서 실행이 될까??? 안된다.
- 하지만 도커허브에 업로드 해놓으면 어디서든지 이게 실행이 가능하다.
- 도커허브는 깃허브같은 곳이라서, 만약 다른 곳이 도커프로그램이 있으면 이미지를 다운받아서 실행할 수 있다.
쿠버네티스는 도커허브를 쓰고, AWS는 ECR을 사용한다.
👉 도커 허브에 push 하기
🔹 커밋먼저
docker commit 1560 <도커허브ID>/<앱이름>:태그
커밋을 할 때는 꼭 자기
도커허브ID
/앱이름
:태그
컨벤션을 지켜주자.
docker images로 push 하고 싶은 이미지 이름을 확인한다.

docker push stephen85/tomcat:10
도커를 허브로 푸시할 수 있다.
Denied 메시지를 받았을때

위와 같은 에러를 받았을 때, 권한이 없어서 에러난 경우일 확률이 크다.

도커 허브에서 자기 아이콘을 클릭해서 아이디를 확인해보자.
여기에 나온 아이디로 커밋하고 푸시해야지 정상적으로 푸시가 가능하다.

정상적으로 푸시가 되었다면 Repositories에서 확인이 가능하다.
⚠️그리고 커밋컨벤션을 잘 지켜줘야지 충돌이 나지 않으니 꼭 주의 하자!!⚠️
이제 이건 어디서든 내려 받을 수 있다.
이게 왜 좋냐????
이제 환경이 달라도 해당 프로그램을 실행할 수 있다.
🔹 요약 정리
1. docker commit 컨테이너ID 자기아이디/앱이름:태그 2. docker push 자기아이디/앱이름:태그