본문 바로가기
배포/Docker

4. Dockerfile

by moca7 2024. 12. 9.

 

 

 

 

- 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