본문 바로가기
배포/Docker

11. 이미지파일 다운&업로드

by moca7 2024. 12. 6.

 

 



ㅁ 도커 설치

 

 

 

- 어제 wsl에 배포를 해봤기 때문에 이제 wsl은 닫는다.

버츄얼박스 이용해서 도커내용을 학습할거다. aws도 일단 닫는다.

192.168.10으로 시작하는 버츄얼박스에 설치되어있는 우분툼나 남겨놓는다.

 

 

 

 

- 구글에 docker install ubutnu

 

 

 

 

 

 


- https://docs.docker.com/engine/install/

- 도커 데스크탑이 아닌 도커 엔진을 다운받아야 한다.

 

 

 

 

 

 

- 각각 배포판마다 조금씩 다르다. 으ㅜ린 ubuntu에 설치한다. 

 

 

 

- apt라는 명령자체가 우분투에 저장하고있는 저장소에서 패키지를 다운받아서 설치하는ㄴ거다.

그런데 도커라고하는 거는 최신 패키지가 우분투에 저장되어 있찌 않다. 우분투에 저장되어있긴한데 최신버전이 아니다.

 

- 우분투에서 제공해주는 도커 엔진?

 

 

 

 

 

 

 

 

- 1번 과정은 저장소를 추가하는거다. 최신버전의 도커를 추가하기 위해서.

우분투에는 최신버전의 도커가 없어서 최신버전의 도커를 설치할 수 있게하려면 1번을 추가해줘야 한다.

 

 

 

 

 

 

 

 

 

- sudo apt install curl wget

비번 1234, y누른다.

 

- 그다음 1번의 내용을 카피해서 붙여넣기 한다.

- 이러면 이제 최신버전의 도커를 설치할수있는 상태가 된거고,

그 다음 2번을 카피해서 붙여넣기한다.

 

 

 

 

 

 

- sudo apt-get update를 한건가? <- 이게 1번 붙여넣기 한 내용임.

 

이걸 하면 저장소 setup이 되었다.

 

 

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

 

- 위가 1번 복붙한 내용이다.

 

 

 

 

 

 

 

 

 

-그리고 2번을 붙여넣는다. install the docker packages.

2번까지 붙여넣기까지 하면 도커 설치가 완료된다.

 

- sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

이게 2번 내용임.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

 

 

 

 

 

 

- 그럼 sudo docker version을 입력해본다.

 

 

 

 

 

 

 

 

○ sudo usermod -aG docker admin1

- 도커 사용자를 sudo 명령을 쓸 수 있는 sudo라는 그룹에 가입시키는 거다. 앞으로 명령을 할 때 sudo를 안쓰려고.

- admin1 사용자를 docker 그룹에 포함시키는 명령이다.

admin1 사용자는 docker 명령을 실행할 때 sudo 명령을 안써도 됨. 안그러면 앞에 항상 sudo 명령을 붙여야 됨.

root이거나 docker그룹에 가입되어있어야 한다. admin1이라느 ㄴ사용자는 docker그룹에 가입이 안되어 있었다.

앞에 sudo를 안붙이ㅏ기 위해서 가입을 시켜준거다.

- 해도 뭐가 다른게 뜨는건 없다.

 

 

 

 

 

 

 

○ exit

- exit을 하고, 위의 탭을 닫고, 다시 192.168.10.~를 클릭해서 접속한다.

- 로그아웃하고 다시 접속해야 그 sudo 안붙이는게 적용이 된다.

 

 

 

 

 

 

 

○ docker ps

- 실행 중인 컨테이너 목록을 출력한다.

 

 

○ docker image ls

- 로컬에 저장된 Docker 이미지 목록을 출력한다.

 

 

※ sudo usermod -aG docker admin1

- 필수는 아니다. 

- 그런데 안하면 docker ps, docker image ls할 때 앞에 sudo를 안쓰면 오류가 발생한다.

 

 

 

 

 

[2일차 끝]

 

 

 

 

 

==

 

 

 

 

여기에 복붙해야함

 

 

[2교시]

 

 

ㅁ 어제 우리가 돜 ㅓ설치했는데 안되어있으신분들고 ㅖ셔서 다시한번알려드림.

 

 

 

 

- 그다음 이제 3번에 설치가 제대로 됏는지 확인하는 명령이 있다.

복붙해본다.

 

 

- 어제 근데 usermode해서 sudo안쓰게끔했짢아요. 그럼 sudo 안붙여도 돼요.

안했으면 붙여야 하고.

 

- 3번을 붙여넣기 하면 헬로월드 이미지가 다운받아진다.

 

 

 

 

 

 

 

- 이렇게 출력되면 도커가 정상적으로 작동하고 있는거다.

 

 

 

 

 

- 저 명령엉르 한다.

- 좀전어ㅔ 우리가 다운받은 헬로월드가 보인다.

 

 

 

 

 

 

- docker 이미지 관련 명령이다.

odcker image를 하고 그 다음 내가 필요한 명령들을 쓸 수 있다.

- 이미지가 있어야지 이미지 가지고 컨테이너를 만들어 내느 ㄴ것이다.

 

 

 

 

 

- docker image ls

 

- 레퍼지터리 이름이 hello-world고 태그가 latest다.

이건 도커 공식 저장소에 잇는거라 아이디가 없다. 사용자 아이디가.

낵 ㅏ업로드한걸 다운받으면 gvenzl/oracle-xe 이렇게 뜬다 레포팆토리 이름에.

 

 

 

 

- docker pull gvenzl/oracle-xe:11

 

태그가 11번이란거다. 이걸 빼버리면 latest로 최신버전이 다운된다. 오라클이. 최신버전은 용량이 됙 ㅔ크다.

pull이 저장소에서 이미지를 다운받으라는 명령이다. 이미 있으면 다운안된다.

 

 

 

 

 

- docker pull nginx

다음 콜ㄹ론 안붙이면 자동으로 tag가 최신버전이 붙어서 다운된다. default tagr ㅏㄱlatest다.

 

 

 

- 그리고 다시 docker images

이러면 총 3개의 이미지가 보여진다.

 

-이렇게 이미지가 잇으면 이미지를 가지고 컨테이너를ㄻ 만들수있다.

내가 컨테이너를 만드려고 했는데 이미지가 없으면 다운을 받아야 한다.

 

 

 

 

 

 

]

- 삭제고 해볼게요. docker image rm nginx:14

도커가 리눅스에서 만든거라 명령이 다 리눅스명령이다 rm이 리무브다. ls는 리스트.

 이런 이미지가 없다고 나온다. 태그가 틀렸기 땜ㄴ에.

그냥 nginx만 하든지 nginx:lates를 붙여주세요. 글머 삭제가 됩니다.

 

- 그리고 docker images

 

 

 

 

 

 

 

- docker image rm hello-world

얘도 그냥 엔터쳤더니 삭제가 안됐다.

 

컨테이넉 ㅏㅇ미지ㅣ를 쓰고있기 때문이다. 아까 컨테이너를 만들었기 때문에 얘를 강제로 지ㅜㅇㄹ수도 있는데.

컨테이너를 지우고 이미지르 ㄹ지우면 된다.

 

 

 

 

 

- docker ps -a

컨테이너한번 볼게요 그럼.

ps도 리눅스명령인데 프로세스를 보느 ㄴ명령이다.

 

- docker container rm 3536 앞에 3~4개만 하고 엔터친다. 

- 그리고 docker ps-a로 다시한번 삭제한다.

컨테이너 아이디 이용해서 삭제할수도있고 이름을 ㅗ삭제할 수도 있다.

컨테이너 아이디는 앞에 일부만 쓰고 삭제할 수 있다.

- docker container rm bdia

 

 

엔터여러번

-docker ps -a하면 아무것도 없다.

- docker images 해서 다시 hello-world르 ㄹ삭제해보죠.

- docker image rm hello-world

삭제되었따.

 

 

 

 

 

 

docker images

삭제되었음을 볼수있따.

 

 

docker run nginx

-근데 이건 뭑 ㅏ안된다.

프롬포트로 나올수닥 없다. ctrl c로나온다.

백그라운드가 아니어서.

 

 

 

 

 

 

 

 

 

 

docker ps -a

남아있다.

 

docker container rm b78d

docker run -d nginx

이게 백그라운드에서 실행하게 하는 옵션이다.

이러면 컨테이너가 만들어지고 프롬포트로 나와진다.

 

 

docker ps

- ㄴㅅstatus가 up이다. 백그라운드인듯 이게.

 

 

 

 

- docker inspect 컨테이너아이디4개

지금 컨테이너가 동작하고 있다. ip?를 확인하기 위한 명령어다.

그럼 됙 ㅔㅁ낳은 내용이 출력이되는데. 맨 밑에 ipaddress가 있다. 172

이게 컨테이너으 ㅣㅇip다. 모든 시스템은 ip가 있다.

저 ip로 접속을 시도해본다.

 

 

 

 

 

 

 

 

 

- curl 172.17.0.2

 

welcome to nginx라고 뜬다.

이게 출력이 되어야 한다.

 

- 근데 여기서는 접속이 되는데 컨테이너 안에 접속을 외부에서 해야 한다.

현재는 이 버츄얼박스 이 시스템에서만 접속이 된다. 의미가 없다. 외부에 노출해서 서비스를 할 수 있어ㅑㅇ 하니가.

 

 

 

 

 

 

 

 

 

- docker ps

로 보고 삭제한다.

 

- docker container rm 컨테이너id4개

\왜 안지워지냐면 동작중이어서 컨테이너가 러닝중이어서 안지워짐.

강제로 지ㅜㅇ려면 -f

 

- docker container rm -f 컨테이너id 개

 

 

 

 

 

 

- docker run -d는 단순 실수다.

 

 

- docker run -d --name websvr1 -p 80:80 nginx

-d로 백그라운드동작시키고, 이름도 붙여준다.

-p로 안쪽의 포트하고 호스트 포트하고 연결해주는 옵션이다. 

이말은 우분투의 80번에 접속하면 컨테이너에있는 80을 ㅗ연결시켜준다느거다. 포트포워딩이다.

그리고 nginx로 컨테이너를 생성하겠다.

nginx라는 이미지를 이용해서 websvr1dl이름으 ㅣ컨테이너를 만들건데 외부에서 접속할수있또록 포트포워딩을 했다.

 

- docker ps

하면 포트가 바뀌어있다.

 

 

- netstat -ntlp

 

그럼 80번 포트가 동작중이다. 

이 포트를 멈춰볼게요.

 

 

 

 

 

 

- docker ps

이거먼저해보고

 

- docker stop 컨테이너아이디4개

컨테이넉 ㅏ멈추면 컨테이너 포트가 안보일거에요.

 

다시 netstat -ntlp하면요.

 

 

- docker start 컨테이너 4개

그럼다시 스타트해볼게요

remove는 아예삭제고 stop은 start로 다ㅣ시작할수있ㅇ다.

 

- 다시   netstat -ntlp하면 80이 떠있다.

 

 

 

 

 

 

 

 

- 브라우저에서 우리 우분투의 아이피를 작성한다.

이런식으로 nginx 페이지가 출력이된다ㅣ.

 

- 지금이게 웹서버 하나 만든거다. 금방 만들었다.

- vm으로하면 리눅스 설치해야하고 웹서버 다운받아서 동작시켜야 한다. 

 

 

 

 

==========================

 

 

 

 

- docker pull httpd

좀전엔 nginx를 바당ㅆ고 이번에 ㄴ 아파치를 받는다.

nginx도 웹서버, 아파치도 웹서버다.

얘도 동작을 시켜본다.

 

 

- docker run -d --name websvr2 -p 80:80 httpd

하면 에러가난다. 왜 에러가 나냐면 앞에 80

 

이미 80번 포트가 동작중인데 또 쓰려고하면 충돌이 난다.

그럼? 다른 포트를 쓰면된다. 뒤의 컨테이너에있는 포트는 "똑같이 80이어도 상관이없다. 컨테이너는 별개니까.

근데 앞의 포트는 접속할때사용하는 포트는 다른포트를 써야한다.

 

 

- docker run -d --name websvr2 -p 81:80 httpd

이러면 컨테이너가 동작한다.

 

- docker ps

두개의 컨테이너가 80, 81번에서 nginx, 아파치가 동작하고 잇음을 볼 수 있따.

 

 

 

 

 

 

- 뒤에 :81을 붙이니 이런 페이지가 떴다.

 

- 컨테이너를 만들어서 바깥에 노출시켜야하니까 포트풔어딩을 해야한다.

왼쪽의 포트가 토울되는 포트다. 대신 내가 마음대로 바꿔쓸수있다.

물론 누구나 쓰게하려면 알려진 포트를 써야겠죠.

 

근데 우리만 쓸 서비스면 우리만 아는 포트를 써도 된다.

포트포워딩이다. 81번 포트가 오면 80으로. 80이 오면 80으로.

- 지금 서버가 2개가 있는거다.

 

- 만야 ㄱ컨테이너 안쓰고 두개의 웹서버를 쓰려면 vm이 두개가 필요한거다. 근데 직므은 되게 간단하다.

 

 

 

 

=========================

 

[3교시]

 

 

 

 

 

- https://hub.docker.com/

 

sign up 눌러서 구글 아이디로 가입한다.

 

 

- ip로 너무 많이 해서 안된다.

vpn을 쓴다.

 

 

- 크롬웹스토어에서 Free VPN for Chrome - Browsec VPN - Free VPN for Chrome를 추가한다.

 

- 오른쪽위 확장프로그램에서 그걸켜서 실행한다.

- 다시 들어가서 가입한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

===

 

 

 

 

 

- hub.docker.com 오른쪽 상단의 프로필 아이콘을 클릭한다.

- Accounet settings를 클릭한다.

 

 

 

 

 

 

 

- Password가 있다. Reset password로 비밀번호를 바꾼다.

클라이어트에서 도커 로그인을할때 이 페스워드가 필요하다.

 

- 비밀번호 변경 링크가 메일로 온다.

123456789로 바꿨다.

 

 

 

 

 

 

 

○ docker login -u gdlsw

- 패스워드를 바꾸고 클라이언트 프로그램으로 로그인이 되는지 해본다.

 

 

 

 

 

 

 

 

 

- 다시 hub.docker.com으로 돌아온다.

- 상단의 Repositories를 클릭한다.

 

 

 

 

 

 

 

- Create a repository를 눌러서 저장소를 하나 만든다.

 

 

 

 

 

 

 

 

- 저장소 이름을 webapp으로 했다.

- 무료면 private은 하나만 만들 수 있다.

올릴때도 내려받을때도 비밀번호 인증을 해야 한다.

- public은 누구나 내려받을 수 있다.

- public으로 create를 눌러서 생성한다.

 

 

 

 

 

 

 

- 오른쪽에 Docker commands가 있다.

여기에 push하기 위해서는 자기아이디/저장소이름:태그네임 하라고 써있다.

- 이 명령어를 실행하면 그 이미지가 여기 저장소로 업로드가 된다.

 

 

 

 

 

 

 

 

- docker images

이건 다 다운받은거다. 그것들이 보여진다.

 

- docker ps

두개가 동작하고있는게 보여진다. 웹서버 1, 2가 있다.

 

 

 

 

 

 

 

 

- docker commit websvr1 gdlsw/webapp:1.0 

컨테이너 안의 변경된 사항들을 반영시켜서 이미지로 만들겠단 얘기다. 

내가 푸쉬할 내 아이디/저장소이름:그리고 태그 이렇게 붙이면 된다.

websvr1 컨테이너를 가지고 gdlsw/webapp:1.0라는 이름의 이미지를 만들겠단 얘기다.

 

- docker images

그럼 새로 만든게 보여진다.

어떤걸 다운받아서 컨테이너에 우리가 설정을 원하느대로 하고, 다시 이미지로 만든거다.

 

- nano index.html

nano 편집기로 index.html을 편집한다.

 

 

 

 

 

<h1> Docker Study Server </h1>하고 ctrl x, y 엔터로 저장.

 

 

 

 

 

 

 

 

 

 

- docker container cp index.html websvr2:/usr/local/apache2/htdocs

 

index.html 파일을 카피해서 이 websvr2 컨테이너의 이 디렉터리에 카피하라는 명령이다.

바깥에서 컨테이너 안쪽에다가 명령을 한거다. 그 컨테이너에 안들어가고.

 

- websvr1은 루트디렉토리가 여기가 아니다.

암튼 이렇게 두번째 웹서버 컨테이너의 내용을 바꿔서 이미지로 만들어본다.

 

 

 

 

 

 

 

 

 

-브라우저에서 정상적으로 복사가 됐는지를 확인한다.

-자기 리눅스 ip:81번으로 들어가면 아까는 위와 같았었다.

 

- 아래와 같이 안뜨면 크롬브라우저에 캐시가 있어서 그런거다.

엣지 등 다른 브라우저로 열면 Docker Study Server가 나온다.

 

 

 

 

 

================================================================

 

 

 

 

 

ㅁ container websvr2를 이미지로 만들기

 

 

 

 

 

 

- docker commit websvr2 gdlsw/webapp:apache

 

태그는 결국 분류학 ㅣ위한 것이다. 2.0하려다 이거함. 첫번째거는 1.0으로 했는데 이번엔 apache를 붙였다. apache 웹서버다.

 

 

- docker image ls

하나는 1.0, 한는 pache다 태ㅡㄱ가.

 

 

- 로그인된 상태여야한다. 아까 로그인했었다 구문으로(docker login -u 사용자이름)

 

- docker push gdlsw/webapp:1.0

 

- docker push gdlsw/webapp:apache

 

 

 

 

 

 

 

 

- 이러면 이미지가 올라갔다. 다른데서 다운받아서 컨테이너를 생성하면 똑같은 컨테이너가 생성되는 것이다.

 

 

 

 

 

================================================================

 

 

 

[4교시]

 

 

 

- (사진) 우분투가 있다. 도커를 설치해놨따. 여기에 컨테이너가 있다. websvr1, websvr2 두개의 컨테이너를 만들었다.

websvr1 (nginx)는 안건드렸고, websvr2(apache)의 index.html 복사해서 붙여넣기해서 내용이 바뀌었다. 

첨엔 it works에서 dockert study로 바귀었다.

 

- 현재 동작중인 컨테이너를 그상태 그대로 이미지로 만든거다.

그 이미지 이름을 gdlsw/webapp:apache로 만든거다.

- 첫번째도 컨테이널를 이미지로 만들었었다. gdlsw/webapp:1.0이라는 이름의 이미지로.

- 이게 컨테이너 가지고 만든 이미지다.

근데왜 이름을 이렇게 붙였냐면 내 저장소에 push하기 위해서 내저장소의 아이디와 내 저장소 이름이 같아야먄 업로드가 된다.

두 개 업로드 했다. push해놨다.

 

- 왜 push하냐. 올라가있는 이미지는 이제 어디에서든지 pull로 다운받을 수 있다.

이 이미지들을 다른 시스템에서 다운받았다. 도커가 설치되어 있는 시스템에서. 

그리고 컨테이너를 생성하게 되면 그 컨테이너는 아파치 웹서버가 동작하고 있는 상태에서 우리가 바꾸어놓은 docker study server가 들어가있느 ㄴ상태로 동작하게 된다. 

- 더확장해서 얘기해보면 이 컨테이너에다가 윌가 만든 웹어플리케이션을 설치해서 동작시킨다. 

그상태로 이미지를 뜨면 그 이미지를 가지고 어디에서든지 컨테이너를 만들면 어디에서든지 똑같으 ㄴ상태로 만들어진다. 접속해서 사용할 수 있다.

- 만약 컨테이너를 안쓰면 이 환경을 그대로 만들어줘야 한다. 매번. 

근데 컨테이너를 쓰면 그 환경이 저장되어있는 상태로 이미지가 만들어진거다.

 

 

- docker ps

둘 다 컨테이너를 삭제해보겠습니다.

 

- docker container rm websvr1

이름을줬기때문에 이름을주는게 더 편하다 컨테이너 아이디보다.

동작중이라 삭제가 안된다. 강제로 삭제하렴녀 

-docker container rm -f websvr1

-docker container rm -f websvr2

 

 

- docker ps

이건잘못쓴듯? 필없는데

- docker images

이미지도 삭제한다.

 

-docker image rm a

이미지 아이디를 어디까지 써야하느냐. 유일한 그거까지. 지금은 a만 입력해도 된다.

- docker image rm 7

다른것도 지웠다. 

 

- docker images

이러면 다지워졌다. 다른시스템에 docker만 설치되어있는 상태다.

 

 

- docker run -d --name webapp1 -p 88:80 gdlsw/webapp:apache

내 저장소에있는 이 아파치 태그명으로된 이미지를 webapp1이라는 일므으로 컨테이너를 만들어라.

근데 만들때 포트포워딩을 할건데 외부에서 접속할때 포트번호는 88, 내부 컨테이너 포트번호는 80이다.

그리고 -d로 백ㄹ그라운드에서 동작시켜라. 

근데 이미지가 없죠. 글머 docker hub에서 다운받으면서 동작시킨다.

 

 

 

 

 

 

 

- 그럼이제 88으로 접속해서 docekr sudy serer가 나오는지 본다.

 

 

 

 

 

 

=====================

 

이제 점시먹기전까지 오라클을 설치해본다.

 

 

 

- docker images

하면 아까 다운받은 이미지가 gvenzl/oracle0-xe 태그 111이 있다.

 

- docker search oracle-xe-11

여기에 많이있는데 여기서 다운받아서 써도된다.

 

 

 

- docker image ls

아까 다운받ㄴ은걸 쓰겠다.

 

- docker run -d --name oracle11g -e ORACLE_PASSWORD=1234 -p 1521:1521 gvenzl/oracle-xe:11

-p는 포트포워딩이다. 다른걸써도 되는데 굳이 바꿀필욘없다.

저건 시스템패스워드다. 

 

이럼 오랔르 설치가 된거다.

컨테이너를 안씀녀 오라클을 이렇게 간단히 설치할수가 없겠쬬.

 

 

 

 

= docker ps

보면 오라클이 정상적을 ㅗ동작하고 있다.

- docker logs -f oracle11g

오랔르이 잘 되고있느지 확인한다.

f는 출력된걸 다보겠딴 ㅇ"ㅒ기다.

에러난다. ctrl c로나온다.

 

 

 

- sudo service oracle-xe stop

어제 오라클 11한게 있어서 에러난다. 스톱한다.

- docker ps -a

이거하면 아까 만들었는데 포트때ㅑ매 시작이 안된게 보인다. oracle11gㄱ ㅏ보인다.

- docker start oracle11g

그러고 나서 확인해보세요

- docker ps

 

 

 

 

 

 

 

그럼 접속을 해보죠. sql developer에서 

 

system은 아무거나쓰면 안된다. 비번도 아까 1234로 설정했다. 

- 일므은 그냥 docker라고 썼다. 

 

 

 

 

- 이제 여기다가 테이블을 만들면 되죠.

 

 

 

 

- create user admin identified by 1234;

grant connect, resource to admin;

 

- 그리고 새접속으로 왼쪽에서 docker 아까 만든걸 클릭한다.

사용자 이름 admin, 비번 1234만 입력하고 테스트눌러본다. 그럼 성공이 뜬다.

- 접속누름녀 이미 사용된이름이라고쓰는데 그냥 yese했따.

 

- 오라클 11g 컨테이너를 만들어서 시스템접속으로 들어간다음에 사용자 하나만들고 그 사용자엑 ㅔ권한을 부여한거다.

 

- 우리가 저번에 할때는 마리아 디비에했다. 이거는 오라클에다가. 디비만 다른거지 똑같은데 약간 수정이 필요한거다.

 

 

 

 

 

- guestbook을 저기에 올렸다. 소스코드를 올린거다

 

 

 

 

 

 

그리고 ls하면 보여진다.

그리고 unzip guestbook.zip했다

그리고 ls. 보여진다.

그리고 cd guestbook

그리고 ls

 

 

 

 

 

 

 

 

- ftp에서 appicationp.proereti랑 pom.xml을 가져왔다.

 

 

 

 

 

 

 

- pom.xml은 수정안했다.

- application.proeprier는 수정한다.

- localhost를 내 주소로. 

유저네임을 scott에서 admin으로.

 

 

- 점심먹고나서 수정하고 빌드하고 애플리케이션이 정상적으로 동작하는지 확인하고 ㅣ지금 디비가 컨테이너에 올라가있는데 웹어플리케이션도 컨테이너로 만들거다.

 

 

 

 

=====================================================================

 

 

 

 

[5교시]

 

 

- application.properties를 저장하고, pom.xml을 수정안한상태다.

그냥 먼저 넣고 nano로 편집해도 되긴한ㄷ다.

 

- 리프레시하면 guestbook폴더가 생겼다.

 

 

 

 

 

 

- 기존의 pom.xml은 지우고 새 pom.xml을 넣었다.

 

 

 

 

 

 

 

- 그리고 source/main/resoucreces에서 applicaito 기존걸 지우고 넣었다.

 

 

 

 

 

 

 

- 이제 빌드한다.

빌드하기전에 jdk를 설치해야한다.

- sudo apt install openjdk-17-jdk

VirtualBox 우분투에 jdk17 설치

 

 

 

 

 

 

 

- chmod u+x mvnw 

mvnw 파일에 실행권한 부여

 

- ./mvnw clean package

메이븐 빌드

이거는 전에 wsl에 한거랑 똑같다. 어 오류났다.

 

- pom.xml을 다시 ftp로 받았음.

 

 

 

 

 

 

 

- 그리고 ./mvnw clean package

근데 또 오류

dependency가 중복으로 추가되서 그렇다.

 

 

 

 

 

 

 

- cd 

홈으로 이동

- cd guestbook

여기로 이동

- ls

파일 확인

- nano pom.xml

pom.xml을  수정한다.

 

 

 

더보기
 
<?xml version="1.0" encoding="UTF-8"?>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.6</version>
    <relativePath /> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.jadecross</groupId>
  <artifactId>guestbook</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>guestbook</name>
  <description>for education</description>
  <properties>
    <java.version>1.8</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
   
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
   
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.2.2</version>
    </dependency>
   
    <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc11</artifactId>
            <scope>runtime</scope>
    </dependency>

   
    <!--Multipart File Up&Download START -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.0</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.5</version>
    </dependency>
    <!--Multipart File Up&Download END -->

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

 

- pom.xml에 ojdbc11 부분 dependency를 추가한 듯.

 

 

 

 

 

 

 

- pom.xml2라는 이름으로 ftp에 올리신걸 받아서 pom.xml로 이름을 바꾸고 넣었다.

 

- ./mvnw clean package

 

빌드했다. jar 파일을 만들었다.

 

 

 

 

 

 

 

○ ls target

- 현재 디렉터리에서 target/ 디렉터리의 내용을 나열한다.

- 그럼 jar파일이 보인다.

 

 

 

○ java -jar target/guestbook-0.0.1-SNAPSHOT.jar

- 아까 application에서 따로 서버포트를 지정하지 않았다. 8080포트다.

그러니까 그냥 이렇게 쓰면 된다. 

 

- 이러면 설치가 되었다. 아까 컨테이너에 설치한 오라클에 연결된거다.

따로 디비설치안했다. 컨테이너 안에 있는 오라클ㅇ ㅔㅇ녀결된거다.

 

- 근데 된게아니라 에러난다. 

 

 

 

 

 

 

 

 

 

- 아까 guestbook이라는 소스가 마리아디비로 소스가 만들어져있다.

마리아디비는 동작할때 테이블이 만들어진다.

근데 우리는 오라클한다. 오랔르은 먼저 테이블을 만들어놓고 해야한다.

- 어제 마리아디비로 연결했었는데 오라클ㄹ ㅗ바꿨다.

디비를 바꾸면 연결하는 설정들을 바꿔줄게있다. 오라클에 테이블 만들었따.

그리고 애프릴케이션프로퍼티스에 설정 바꿨다.

- 그리고 pom.xml에 ojdbc를 추가했다. 이러면 마리아디비나 오라클이나 똑같다는 거다.

디비가 달라지면 연결하는 방식이 설정들이 좀씩 다른걷.

 

더보기

CREATE TABLE post (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(40) ,
    writeDate VARCHAR2(100) ,
    content VARCHAR2(400) ,
    attachedFile varchar2(250)
);

CREATE SEQUENCE user_seq
    START WITH 1
    INCREMENT BY 1
    NOMAXVALUE
    NOCYCLE
    NOCACHE;

CREATE OR REPLACE TRIGGER user_trg 
    BEFORE INSERT ON post
    FOR EACH ROW 
BEGIN
    SELECT user_seq.nextval INTO :NEW.id FROM dual;
END;

 

 

 

- 이렇게 오라클에 생성시켜놨따.

 

 

 

 

 

 

 

○ cd src/main/resources

 

○ ls

 

○ rm data.sql schema.sql

- 이 두 파일을 지운다.

- 테이블만들어주는 마리아디비용 스크립트를 삭제했다.

- 샘플예제니까 스크립트를 이렇게 한거지 실제로는 테이블을 미림나들어놓은ㄴ걸 올릴거라 이럴 일은 없을거다.

 

○ ls

- 지워져있다.

 

 

 

 

 

 

 

○ java -jar target/guestbook-0.0.1-SNAPSHOT.jar

- 실행한다

 

 

 

 

- http://192.168.10.143:8080/를 입력하면 접속된다.

 

 

 

'배포 > Docker' 카테고리의 다른 글

4. Dockerfile  (2) 2024.12.09
3.  (1) 2024.12.09
2. 이미지파일 다운&업로드  (1) 2024.12.09
1. Docker 설명  (0) 2024.12.08
10. Docker 설명  (3) 2024.12.06