diff --git a/chapter1.md b/chapter1.md
index cc33756..109f797 100644
--- a/chapter1.md
+++ b/chapter1.md
@@ -386,12 +386,13 @@ git clone https://github.com/shclub/edu1.git
-도커 이미지를 만들기 위해서는 Dockerfile 을 생성 해야 한다.
+위에서 복사한 Dockerfile은 아래와 같다.
+
+
Dockerfile 예제
```yaml
-
# 베이스 이미지 이며 이미지 이름 앞에 아무것도 없으면 docker hub에서 가져온다.
FROM python:3.8-slim
@@ -401,15 +402,7 @@ WORKDIR /app
# 로컬 현대 폴더의 모든 값을 컨테이너 /app 폴더에 복사한다.
ADD . /app
-# pyhon의 경우 library를 requirements.txt에 기술을 하였고 RUN 명령어를 # 사용하여 아래 구문을 실행한다.
-
-# RUN pip install -r requirements.txt
-
-# 직접 라이브러리를 추가 할수 있다. 단 라이브러리가 많아지면 불편하다.
-RUN pip3 install flask==2.0.3
-RUN pip3 install flask-cors==3.0.10
-RUN pip3 install flask_restx
-RUN pip3 install Werkzeug==2.0.3
+RUN pip install -r requirements.txt
# 기본 이미지는 대부분 GMT+0 기준으로 생성되어 한국 시간으로 변경 해준다
RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && echo Asia/Seoul > /etc/timezone
@@ -422,98 +415,48 @@ EXPOSE 40003
CMD ["python", "app.py"]
```
-터미널에서 edu2 폴더로 이동하여 vi 에디터로 Dockerfile를 생성한다.
-
-```bash
-vi Dockerfile
-```
+
-i (소문자) 를 누른 후 위의 Dockerfile 내용을 복사하여 붙여넣기 한다.
+vi 에디터는 i (소문자) 를 누른 후 내용을 복사하여 붙여넣기 한다.
esc 키를 누른 후 :wq를 입력하여 저장하고 나온다.
-그리고 app.py 화일을 아래 소스를 사용하여 생성한다.
-
-```bash
-vi app.py
-```
+app.py 화일의 내용은 아래와 같도 Flask 프레임 웍을 사용하며 내부 포트는 8080 이다.
app.py
-
-
```python
-# -*- coding:utf-8 -*-
-# REST API로 구현한 계산기 예제
-
-import werkzeug
-werkzeug.cached_property = werkzeug.utils.cached_property
-
from flask import Flask
-from flask_restx import Resource, Api, reqparse
-
-
-# -----------------------------------------------------
-# api
-# -----------------------------------------------------
app = Flask(__name__)
-api = Api(app, version='1.0', title='Calc API',
- description='계산기 REST API 문서',)
-
-ns = api.namespace('calc', description='계산기 API 목록')
-app.config.SWAGGER_UI_DOC_EXPANSION = 'list' # None, list, full
-
-
-# -----------------------------------------------------
-# 덧셈을 위한 API 정의
-# -----------------------------------------------------
-sum_parser = ns.parser()
-sum_parser.add_argument('value1', required=True, help='연산자1')
-sum_parser.add_argument('value2', required=True, help='연산자2')
-
-
-@ns.route('/sum')
-@ns.expect(sum_parser)
-class FileReport(Resource):
- def get(self):
- """
- Calculate addition
- """
- args = sum_parser.parse_args()
-
- try:
- val1 = args['value1']
- val2 = args['value2']
- except KeyError:
- return {'result': 'ERROR_PARAMETER'}, 500
-
- result = {'result': 'ERROR_SUCCESS','value': int(val1) + int(val2)}
- return result, 200
+@app.route("/")
+def hello():
+ return "Hello World!"
if __name__ == '__main__':
- app.run(host='0.0.0.0', port=5000) # , debug=True)
+ app.run(host= '0.0.0.0',port=8080,debug=True)
```
+
-git 명령어를 사용하여 서버에 commit 하고 push 한다.
+먼저 아래 명령어를 사용하여 기존의 컨테이너를 종료하고 삭제한다.
```bash
-git add .
-git commit -m "first commit"
-git push -u origin master
+docker rm -f $(docker ps -aq)
```
+
이제 아래 명령어를 사용하여 도커 이미지를 생성한다.
-Dockerfile 위치와 같은 폴더에서 실행하여야 하며 생성할 이미지 이름 뒤에 . 을 반드시 사용한다.
+Dockerfile 위치와 같은 폴더에서 실행하여야 하며 생성할 이미지 이름 뒤에 . 을 반드시 사용한다.
+
```bash
-docker build -t edu2 .
+docker build -t edu1 .
```
@@ -528,20 +471,21 @@ Cache를 사용 하기 때문에 훨씬 빨리 빌드가 된다.
아래 명령어를 사용하여 생성된 도커 이미지를 확인 할 수 있다.
+
```bash
docker images
```
-로컬에서 생성된 이미지를 공유하기 위해서는 Docker Hub 에 저장을 해야 하고 그 전에 Docker Hub에서 계정을 생성한다. ( private repository 는 1개만 가능 )
+로컬에서 생성된 이미지를 공유하기 위해서는 Docker Hub 에 저장을 해야 하고 그 전에 Docker Hub에서 계정을 생성한다. ( private repository 는 2개만 가능 )
계정 생성 후에 tagging 을 하고 push를 한다.
tag 명령어 뒤에는 로컬 이미지 이름 , 다음에는 도커허브 이미지 이름을 입력.
```bash
-docker tag edu2 (본인 도커 허브 ID)/edu2
-docker push (본인 도커 허브 ID)/edu2
+docker tag edu1 (본인 도커 허브 ID)/edu1
+docker push (본인 도커 허브 ID)/edu1
```
@@ -565,7 +509,7 @@ docker stop (컨테이너id)
- 맨 마지막에 도커 이미지 이름
```bash
-docker run -d --name my-python -p 40003:5000 (본인 도커 허브 ID)/edu2
+docker run -d --name my-python -p 40003:5000 (본인 도커 허브 ID)/edu1
```
docker ps 명령어로 정상적인지 확인한다.
@@ -605,7 +549,7 @@ exit 명령어를 사용하여 컨테이너 내부에서 나올수 있다.
- 신규 도커 이미지 : 신규로 생성하고 싶은 로컬 도커이미지 이름을 적어준다
```bash
-docker commit -m "new edu2" (컨테이너 이름) (생성하고싶은 이미지 이름):(버전)
+docker commit -m "new edu1" (컨테이너 이름) (생성하고싶은 이미지 이름):(버전)
```
@@ -639,6 +583,10 @@ root@jakelee:~# docker stats
### 계정 생성 후에 Repository를 생성한다.
+우리는 repository 를 fork할 예정임으로 아래 생성 과정은 생략하고 setting 메뉴에서 repository 선택 한 후에 default branch를 main 에서 master 로 변경한다.
+
+> 아래 내용 스킵
+
아래와 같이 이름 입력를 하고 README file check 를 한다.
@@ -649,6 +597,10 @@ default 브랜치를 main에서 master로 변경한다. ( 맨 하단 setting 클
+> 여기서 부터 시작
+
+
+
### 교육용 repository인 https://github.com/shclub/edu1 를 fork 하여 본인의 Repository에 복사한다.
총 4개 화일을 만들고 내용을 복사한다.
@@ -669,6 +621,25 @@ default 브랜치를 main에서 master로 변경한다. ( 맨 하단 setting 클
### Docker 연동 테스트를 한다.
+
+
+기존에 로그인 사람의 계정이 있을수 있기 때문에 로그아웃을 먼저한다.
+
+```bash
+docker logout
+```
+
+다시 로그인을 하고 본인 id와 비밀번호를 입력한다.
+
+```bash
+docker login
+```
+
+
+
+tag를 하여 새로운 이름을 생성하고 docker hub에 push 한다.
+
+
```bash
docker tag hello-world (본인id)/hello-world
docker push (본인id)/hello-world
@@ -695,7 +666,7 @@ docker push (본인id)/hello-world
도커 이미지가 Private으로 되어 있으면 Public 으로 변경한다.
-- 개인 계정은 1개의 private 만 가능
+- 개인 계정은 2개의 private 만 가능
setting 으로 이동하여 Make public 클릭후 repository 이름을 입력후 Make Public 클릭
@@ -710,7 +681,7 @@ setting 으로 이동하여 Make public 클릭후 repository 이름을 입력후
### 일반 사용자 계정을 생성한다
웹 브라우저에서 http://211.252.85.148:9000/ 로 이동하여 로그인 한다.
-교육 계정은 기 생성 되어 있다. ( edu1 ~ edu25 )
+교육 계정은 기 생성 되어 있다. ( edu1 ~ edu35 )
비밀번호는 계정 이름과 동일.
@@ -729,7 +700,9 @@ Manage Jenkins -> Manage Users 로 이동한다. 사용자 생성 버튼 클릭
Configure Global Security로 이동
-admin 계정으로 테스트 할 예정 으로 skip.
+
+
+> admin 계정으로 테스트 할 예정 으로 skip 한다.
@@ -757,7 +730,7 @@ Github 사이트의 오른쪽 상단 본인 계정의 Setting으로 이동한다
-Expiration 은 No Expiration으로 선택하고 repo, admin:repo_hook 만 체크하고 Generation Token 버튼 클릭해서 토큰 생성
+Expiration 은 No Expiration으로 선택하고 repo, admin:repo_hook , write:packages, delete:packages 만 체크하고 Generation Token 버튼 클릭해서 토큰 생성
@@ -789,11 +762,11 @@ Add Credential를 클릭하면 계정 설정하는 화면이 나온다.
Kind는 Username with password 를 선택해주시면 됩니다.
-Username 은 본인의 Github ID 를 선택해주시면 됩니다. ( 이메일 아님 )
+> Username 은 본인의 Github ID 를 선택해주시면 됩니다. ( 이메일 아님 )
ID는 본인이 원하는 식별자를 넣어준다.
-password는 이전에 발급받은 Github Token 값을 입력한다.
+> password는 이전에 발급받은 Github Token 값을 입력한다.
@@ -809,6 +782,10 @@ Jenkins가 Docker Hub에 Image를 push 할 수 있도록 Credential을 추가하
+> 바로 이동 : http://211.252.85.148:9000/credentials/store/system/
+
+
+
Add Credential를 클릭하면 계정 설정하는 화면이 나온다.
Kind는 Username with password 를 선택해주시면 됩니다.
diff --git a/chapter2.md b/chapter2.md
index 936c407..98bfd6e 100644
--- a/chapter2.md
+++ b/chapter2.md
@@ -407,20 +407,35 @@ version: '3.3'
services:
frontend:
image: ghcr.io/shclub/edu12-3:master
- container_name: frontend
depends_on:
- backend
- environment:
- API_URL: http://backend:8080
ports:
- - 3000:80
+ - 80:80
+ environment:
+ REACT_APP_API_URL: http://backend:8080
backend:
+ depends_on:
+ - db
+ ports:
+ - 8111:8080
image: ghcr.io/shclub/edu12-4:master
- container_name: backend
environment:
- SPRING_PROFILES_ACTIVE: dev
+ # dev is H2 DB , prd is MariaDB
+ SPRING_PROFILES_ACTIVE: prd
+ SPRING_DATASOURCE_USERNAME: edu
+ SPRING_DATASOURCE_PASSWORD: caravan
+ db:
+ image: ghcr.io/shclub/mariadb:10.6.9-debian-11-r4
ports:
- - 8092:8080
+ - 3306:3306
+ volumes:
+ - ${PWD}/database:/var/lib/mysql
+ - ${PWD}/schema.sql:/docker-entrypoint-initdb.d/init.sql
+ environment:
+ MARIADB_ROOT_PASSWORD: New1234!
+ MARIADB_DATABASE: edu
+ MARIADB_USER: edu
+ MARIADB_PASSWORD: caravan
```
@@ -509,12 +524,6 @@ mysql container 에 접속하여 로그인 한 후 wordpress db 에
### 과제 3
-금일 실습한 Dockerfile과 docker-compose.yml 화일을 git 명령어를 사용하여 edu2에 push 한다.
-
-
-
-### 과제 4
-
docker 컨테이너 GUI 관리 툴인 portainer를 설치하고 웹에서 접속하여
모니터링한다.
- url 참고 : https://docs.portainer.io/v/ce-2.11/start/install/server/docker/linux
diff --git a/k8s_basic_hands_on.md b/k8s_basic_hands_on.md
index 581b6b1..af31ca1 100644
--- a/k8s_basic_hands_on.md
+++ b/k8s_basic_hands_on.md
@@ -676,7 +676,11 @@ flask-edu4-app ClusterIP 10.43.119.5 5000/TCP 3s
-### 잠시 Route 설정 시작
+***
+
+
+
+### Route 설정 시작
@@ -696,12 +700,16 @@ flask-edu flask-edu-shclub.apps.211-34-231-82.nip.io flask-edu4-app
웹브라우저에서 해당 url을 조회해 본다.
-http://flask-edu-shclub.apps.211-34-231-82.nip.io
+> http://flask-edu-shclub.apps.211-34-231-82.nip.io
+
+
+
+### Route 설정 끝
-### 잠시 Route 설정 끝
+***