- Dockerfile을 이용해서 이미지를 생성한다.
- docker pull로 이미지를 다운받고, 시작을 시켜놓고 그 컨테이너에 설정들을 하는데, 그 설정들을 미리 Dockerfile에 작성해둔다.
- FROM, ARG 등의 지시자가 있다.
도커파일안에서 읽으면서 수행해야할 내용들을 지정해두는 명령이다.
- ubuntu 22.04를 base이미지로 해서 (22로바꿈 18에서)
- apt-get update로 전체이미지 하고
apt-get install -y apache2로 아파치 설치하고
apt-get clean -y로 기존의 어쩌구
- expose80 80번 포트가 노출된다.
- cmd는 아파치2ctrl이라는 명령어를 통해서 백그라운드로 실행한다.
- ubuntu 22.04를 다운로드해서 아파치 설치된 상태으 ㅣ이미지가 만들어진다.
- 우분투22.04로 다운바당서 컨테이너만들고, 컨테이너 접속해서 업데이트하고 아파치인스톨하고 실행까지 해줘야함. 근데 그작업을 다 여기다 기록해놓고 이미지 만들때 이 상태로 이미지를 만든다. 그럼 그 이미지 가지고 컨테이너만들었을 때는 컨테이너는 이 상태가 된다. 아파치가 실행된 상태.
ㅁ mkdir lab
ㅁ cd lab
ㅁ nano Dockerfile
- ctrl +x, y, 엔터를 눌러서 저장하고 나온다.
- &&가 의미하는게 앞의 것을 성공해야 뒤에것도 실행함.
||는 앞이 성공하면 뒤는 실행안함.
ㅁ cat Dockerfile
ㅁ ls
ㅁ docker build -t gdlsw/apacheweb:1.0 .
- 이미지를 빌드한다.
- 태그는
- 현재 디렉토리에있는 도커파일을 찾아서 그 도커파일 대로 이미지를 만들라는 명령어다.
ㅁ docker image ls
- apacheweb이라는 이미지가 생성이 된걸 볼 수 있다.
- 저이미지로 컨테이너를 만들면 그 컨테이너에는 이미 아파치가 동작하고 있느 ㄴ상태라는ㄴ 것이다.
우분투 설치하고 업데이트하고 아파치 설치함.
ㅁ docker ps
80번은 사용중이다.
ㅁ docker run -d --name myweb1 -p 81:80 gdlsw/apacheweb:1.0
- 이러면 컨테이너가 동작했다.
ㅁ docker ps
- 81번 포트가 동작중임이 보여진다.
ㅁ curl localhost:81
-텍스트로 페이지가 출력된다.
ㅁ 웹브라우저로
- 접속된다.
=========
- 위에선 빌드해가지고 실행시켜봤는데 이번엔 컨테이너로 해봄.
- 얘는 openjdk 11이라는 베이스 이미지를 쓸거다.
- openjdk 11번이 아예 깔려있는 베이스 이미지다.
17번 버전이면 17쓰면 된다.
- 빌드하고 나면 ~.jar 파일이 생성된다. 이 생성된 jar파일(target~)을 컨테이너의 /app/guestbook.jar라는 이름으로 복사하라는 명령이다.
- EVN 환경성정변수에서 홈은 /app이다. 컨테이너 안에 /app이 홈 디렉토리로 사용되는 디렉토리다.
- expose80
- volume은 /app/upload 이게 밖ㅌ에 생성이 된다.
볼륨쓰는 이유는 호스트하고 컨테이너 내부를 연동하기 위해서다.
- WORKDIR은 달러를 붙으면 저 변수를 의미한다. /app을 의미.
- 컨테이너가 처음 실행될때 실행할 명령. java다.
jar, guestbook.jar를 실행하라.
- 이 도커파일으 ㅣ목적은 target 밑의 자르파일을 컨테이너의 /app밑에 guestbook.jar로 복사해서 실행까지 하란거다.
이걸로 이미지를 만들면 guestbook이 실행된 상태로 이미지가 생성된다.
이 이미지 가지고 컨테이너를 만들면 자동으로 guestbook이라는 웹애플리케이션이 ~다.
자동화되는 거다. 빌드도 자동화하고, 빌드가 된 파일을 컨테이너에 집어놓고 실행된 상태로 해놓고 그걸가지고 컨테이너로 만들거다.
목적은 사람 손을 안타는 거다.
- 실행이 된다.
- ctrl c로 나온다.
ㅁ .
- .의 의미는 현재 이렉토리에서 도커파일을 찾아서 이미지를 만들어ㅏ라.
- 저게 오류는 아님.
- guestbook 1.0이라는 이미지가 만들어졌다. 이 이미지 가지고 컨테이너를 만들면 게스트북이 된채로 그게 ㅇ된다.
- ntlp해봄. 8080안쓰니 8080으로 설정함.
그리고 웹을 ㅗㄷ르어가봄.
- 오라클 디비때매 나는 오류인거고. 접속은 되는거다.
- 도커파일써서 이미지를 만드는 이유는 이런거다. 그 이미지로 컨테이너를 만들면 우리가 원하는 형태로 어플리케이션ㅇ ㅣ실행된 상태로 바로 접속할 수 있기 때문에.
=======================================================
[5교시 시작]
- 아까 오라클은 timezone 때문에 에러났다. timezone을 추가해놨다.
- Dockerfile에 타임존을 추가했다.
- Dockerfile을 바꾸고 build하고 run하고 브라우저로 들어가면 방명록 페이지가 보여진다.
==================================================================
ㅁ 샘플 프로젝트 stswebjpa 배포하기
- 사전 준비사항 : 도커 설치
(1) oracle11g 컨테이너 생성
- docker run -d --name oracle11g -e ORACLE_PASSWORD=1234 -p 1521:1521 gvenzl/oracle-xe:11
- oracle11g는 금요일날 컨테이너를 만들었다. ------------------- system 계정 패스워드
- system계정으로 로그인해서 admin/1234 계정을 생성하고 connect, resource 권한을 부여했다. (금요일에_
(2) stswebjpa 프로젝트 빌드
- stswebjpa.zip을 서버로 업로드
- unzip stswebjpa.zip
- cd stswebjpa
(3) Dockerfile 이용하여 도커 이미지 빌드
(4) 생성된 이미지 이용해서 컨테이너 생성
(5) 웹브라우저를 통한 접속 테스트
- stswebjpa.zip을 서버로 업로드
- unzip stswebjpa.zip
- cd stswebjpa
○ ls
○ chmod u+x mvnw
○ ./mvnw clean package
○ java -jar target/stswebjpa-0.0.1-SNAPSHOT.jar
- 브라우저 접속해본다.
- 여기까지가 (2)다.
==========================================================================
[4시 반 ~]
○ nano application.properties
- 오라클이 설치되어있는 컨테이너와 애플리케이션이 설치된 컨테이너가 서로 다르다.
컨테이너가 다르단 거는 서로 다른 서버란 얘기다.
- localhost 대신 inspect로 본 oracle이 설치된 컨테이너의 ip를 적었다.
- ctrl + x, y, 엔터로 저장하고 나온다.
○ nano Dockerfile
- FROM에 sunnykid7/gdj85jdk:17를 적었다.
ㅁ 스샷엔 없지만 ./mvnw clean package를 한다.
ㅁ docker build -t gdlsw/memberbook:1.0 .
ㅁ docker rm -f stsweb // 최초엔 없음.
ㅁ docker run --name stsweb -p 8080:8080 gdlsw/memberbook:1.0
- 아까는 db연결이 안돼서 에러났던거고 지금은 된다.
- 브라우저에서도 접속되고, 회원 등록하기 기능도 된디ㅏ.
'배포 > Docker' 카테고리의 다른 글
3. (1) | 2024.12.09 |
---|---|
2. 이미지파일 다운&업로드 (1) | 2024.12.09 |
1. Docker 설명 (0) | 2024.12.08 |
11. 이미지파일 다운&업로드 (2) | 2024.12.06 |
10. Docker 설명 (3) | 2024.12.06 |