[2024.10.27]
4) WORKDIR
Ex1) 절대 경로/상대 경로를 사용한 WORKDIR 명령어 예제
- RUN 명령어에 의해서 출력되는 내용은 어떻게 되는가?

Ex2) WORKDIR 명령어로 환경변수를 사용한 예제
- RUN 명령어에 의해서 출력되는 내용은 어떻게 되는가?

5) USER
Ex) USER 명령 사용 실습

먼저 Dockerfile을 제작한다

# docker image build --no-cache --progress plain -t user-img .
그런 다음 위의 명령어를 입력하여 이미지를 빌드한다

마지막으로는 이미지가 생성되었는지 확인한다
6) COPY/ADD

① COPY 호스트의 파일/경로 컨테이너의 파일 경로
COPY test.sh /root/bin/
② ADD 호스트의 파일/경로 컨테이너의 파일 경로
ADD test.sh /root/bin/
③ ADD 원격 파일 URL 컨테이너의 파일 경로
ADD https://github.com/ncs10322/docker/raw/main/index.html /var/www/html/
④ ADD 아카이브/압축 파일 컨테이너의 파일 경로
ADD docker.tar.gz /var/www/html/

7) LABEL

'docker image inspect' 명령을 이용하여 빌드된 이미지에서 레이블 정보를 확인할 수 있다.
# docker image inspect --format="{{ .Config.Lables }}" [이미지명]
8) EXPOSE

9) VOLUME

14. Docker 로컬 레지스트리
1. Docker 로컬 레지스트리
1) 도커 이미지의 자동 생성 및 공개
Dockerfile 을 GitHub 등에서 관리하고 Docker Hub 와 연결하면
Dockerfile 로 부터 자동으로 Docker 이미지를 생성하고 공개할 수 있다.
3) Bitbucket
Atlassian 이 제공하는 버젂 관리를 위한 레포지토리 서비스이다. 유료 계정과 무료 계정을 제공하며, 무료 계정의 경우, 유저 5 개까지는 비공개 리포지토리를 무제한으로 만들수 있는 것이 특징이다
4) 로컬 레지스트리를 구성하는 방법은 다음과 같다.

docker2 를 로컬 레지스트리로 구축할 예정이다. 앞으로 진행 하는 내용들은 docker2 에서 진행한다.
2. 기본 로컬 레지스트리 구축하기
1) 'registry' 이미지 다운로드 및 로컬 레지스트리 컨테이너 구동

registry 이미지를 검색하고 다운로드한다
그런 다음 이미지 다운로드 여부를 확인한다

local-registry 컨테이너를 실행하고 컨테이너 동작 여부를 확인한다
2) 로컬 레지스트리에 이미지 업로드 실시

용량 작은 hello-world 이미지를 다운로드한다

이미지 다운로드 여부를 확인하고

hello-world 이미지에 localhost:5000/hello-world 태그를 설정하여 이미지를 생성한다
3) 로컬 레지스트리로부터 이미지 다운로드 및 컨테이너 구동


hello-world, localhost:5000/hello-world 이미지를 삭제하고,
삭제되었는지 확인한다

로컬 레지스트리로부터 localhost:5000/hello-world 이미지를 다운로드하여 컨테이너를 구동한다
확인했다면 crm, irm으로 컨테이너와 이미지를 모두 삭제한다
3. SSL/TLS 로컬 레지스트리 구축을 위한 준비 작업
1) docker1 과 docker2 에서 '/etc/hosts' 파일 작업


docker1과 docker2에 /etc/hosts/ 파일에
myregistry.com 도메인과 IP 주소 정보를 추가한다
2) docker2 에서 SSL/TLS 공개키 및 비밀키 생성하기
docker container run --rm \
-v /auth:/auth \
alpine/openssl req -newkey rsa:4096 \
-nodes -sha256 -x509 -days 365 \
-out /auth/myregistry.com.crt \
-keyout /auth/myregistry.com.key \
-subj '/CN=myregistry.com' \
-addext "subjectAltName = DNS:myregistry.com"

다른 도커 시스템에서 로컬 레지스트리를 사용하려면 SSL/TLS를 구축해야 한다
호스트 /auth 디렉터리에 myregistry.com.crt(공개키/Public Key),
myregistry.com.key(비밀키/Private Key) 파일을 생성할 수 있도록
alpine/openssl 이미지를 이용하여 컨테이너를 구동한다


호스트 /auth 디렉터리에 공개키와 비밀키가
볼륨을 통하여 복사되었는지 확인한다
3) docker2 에서 공개키 배포를 위한 인증서 준비하기


4. SSL 인증서로 암호화된 통신을 사용하는 로컬 레지스트리 구축하기
1) docker2 에서 SSL 로 암호화된 통신을 사용하는 로컬 레지스트리 컨테이너 구동하기
docker container run -d -p 443:443 \
--restart=always \
--name local-registry \
-v /auth:/certs \
-v /root/upload-img-1:/var/lib/registry \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/myregistry.com.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/myregistry.com.key \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
registry


docker container run 명령으로 실행한 내용을 확인하고,
맞게 실행되었는지 컨테이너 구동 상태를 확인한다

다음으로 local-registry라는 컨테이너의 cert 디렉터리에
공개키, 비밀키가 있는지 확인한다
보통 TLS 인증서가 여기에 저장되며,
cert.crt (공개키)와 cert.key (비밀키) 파일 형태로 존재할 가능성이 크다

env로 환경 변수가 다 설정되어 있는지의 유무도 확인한다
2) 로컬 레지스트리에 이미지 업로드 실시

hello-world 이미지를 다운로드하고,
hello-world 이미지에 localhost:5000/hello-world 태그를 설정하여 이미지를 생성한다

다음으로 localhost:5000/hello-world 이미지를 로컬 레지스트리에 업로드한다

이미지를 업로드하고,
/root/upload-img-1 볼륨 디렉터리에서 업로드된 이미지를 확인한다
3) 로컬 레지스트리로부터 이미지 다운로드 및 컨테이너 구동

hello-world, localhost:5000/hello-world 이미지를 삭제한다
삭제했다면 로컬 레지스트리로부터 localhost:5000/hello-world
이미지를 다운로드하여 컨테이너를 구동한다

이미지의 여부를 확인하고,
docker2에서 scp를 이용하여 docker1에게 인증서(ca.crt)를 배포한다
*중간에 대답은 스펠링이 아닌 yes를 풀로 입력해야 된다

docker1로 돌아와 docker1에서 인증서를 확인한다

docker1에서 docker2 레지스트리로부터 myregistry.com/hello-world
이미지를 다운로드하고 컨테이너를 구동한다

docker2에서 받아온 이미지와 공개키 및 비밀키를 이용하여
docker1에서도 손쉽게 이미지를 다운로드하고
컨테이너를 구동할 수 있는 것을 확인할 수 있다
5. SSL 통신 & Authentication 기능을 모두 제공하는 로컬 레지스트리 구축하기
1) docker2 에서 'htpasswd' 파일 생성하기

/auth 디렉터리에 htpasswd 파일을 생성하기 위해서
httpd:2.4 이미지를 이용한 컨테이너를 구동한다
htpasswd 파일은 사용자(tester) 정보는 평문,
패스워드(abcd1234) 정보는 해시 값으로 저장된
2) docker2 에서 SSL 통싞 & Authentication 기능을 모두 제공하는 로컬 레지스트리 컨테이너 구동하기
docker container run -d -p 443:443 \
--restart=always \
--name local-registry \
-v /auth:/certs \
-v /root/upload-img-2:/var/lib/registry \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/myregistry.com.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/myregistry.com.key \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_PATH=/certs/htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Please enter your Username and Password." \
registry


docker container run 명령으로 실행한 내용은 다음과 같다

auth 디렉터리에 있는 파일들이 볼륨에 의해서 파일들이 다 존재하는지 확인한다

마지막으로 환경 변수까지 잘 설정되어 있는지 확인한다
3) 로컬 레지스트리에 이미지 업로드 실시

hello-world 이미지를 다운로드하고, 이미지 여부를 확인한다

hello-world 이미지에 localhost:5000/hello-world
태그를 설정하여 이미지를 생성한다

다음으로 myregistry.com 레지스트리에 로그인한다

로그인 후 localhost:5000/hello-world 이미지를 로컬 레지스트리에 업로드한다

이미지를 업로드하고,
/root/upload-img-2 볼륨 디렉터리에서 업로드된 이지를 확인한다
4) 로컬 레지스트리로부터 이미지 다운로드 및 컨테이너 구동

이번에는 hello-world, localhost:5000/hello-world 이미지를 삭제한다

로컬 레지스트리로부터 'localhost:5000/hello-world' 이미지를 다운로드하여 컨테이너를 구동한다

docker1 에서 'myregistry.com' 레지스트리에 로그인한다

이미지에 아무것도 없는 것을 확인하고

docker1 에서 docker2 레지스트리로부터 'myregistry.com/hello-world'
이미지를 다운로드하고 컨테이너를 구동한다


확인 후에 로그아웃하고 컨테이너와 이미지는 모두 삭제한다
15. Docker Compose
1. Docker Compose 개요 및 설치



1) Docker Compose 설치 방법 및 버전 정보 확인
- 참고 사이트 : https://docs.docker.com/compose/install
- 참고 사이트 : https://github.com/docker/compose/tags
2) Docker Compose 구성 파일

3) Docker Compose v2.4.1 설치
curl -SL "https://github.com/docker/compose/releases/download/v2.4.1/\
docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

기존에 설치된 Docker Compose 플러그인 대신에
Docker Compose v2.4.1을 설치해서 진행한다
먼저 docker1에서 Docker Compose v2.4.1 버전 설치 및
자동 완성 스크립트를 다운로드한다


docker-compose 파일에 실행 권한이 없기 때문에
chmod 명령어를 사용하여 실행 권한을 부여한다
curl -SL \
https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/\
docker-compose -o /etc/bash_completion.d/docker-compose


docker-compose를 설치하면 기본적으로 자동 완성 기능이 제공되지 않는다
docker-compose 명령어 자동 완성 기능을 제공하는 스크립크를 따로 다운로드한다
다운로드가 완료되었다면 로그아웃 후에 재로그인하여
docker-compose 명령어 자동 완성 기능을 확인한다
version: '3.3'
services:
# WebServer config
webserver:
build: .
ports:
- "80:80"
depends_on:
- redis
# Redis config
redis:
image: redis:4.0

다음은 docker-compose.yml 파일을 제작한다
위의 코드 그대로 복사 후 붙여넣기를 진행하면 된다
# 베이스 이미지
FROM python:3.6
# 주석
LABEL maintainer "Docker Compose Test"
# pip 업그레이드
RUN pip install --upgrade pip
# 웹 작업 디렏토리를 환경 변수로 선언
ENV APP_PATH /opt/homepage
# 파이썬 모듈(Flask==1.0, redis)을 설치하기 위한 작업
COPY requirements.txt $APP_PATH/
RUN pip install --no-cache-dir -r $APP_PATH/requirements.txt
# 호스트에 있는 웹 애플리케이션 관련 파일 복사
COPY app.py $APP_PATH/
COPY templates/ $APP_PATH/templates/
COPY static/ $APP_PATH/static/
# 포트 정보
EXPOSE 80
# 컨테이너 구동시 실행할 애플리케이션 지정
CMD ["python", "/opt/homepage/app.py"]

파일 제작 후 webserver 컨테이너 이미지를
생성하기 위한 Dockerfile을 제작한다
#!/usr/bin/env python3
from flask import Flask, render_template
from redis import Redis
import os,random
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
images = [
"j1.png",
"j2.png",
"j3.png",
"j4.png",
"j5.png"
]
@app.route('/')
def index():
image_path = "/static/images/" + random.choice(images)
count = redis.incr('count')
return render_template('index.html', image_path=image_path, access_count=count)
# Main
if __name__ == "__main__":
port = int(os.environ.get("PORT", 80))
try:
app.run(host="0.0.0.0", port=port, debug=True)
except Exception as ex:
print(ex)

파이썬으로 app.py 애플리케이션까지 제작한다

docker-compose를 이용하여 백그라운드로 컨테이너를 구동한다
*-d의 경우 백그라운드를 뜻한다

백그라운드로 컨테이너를 구동했다면 컨테이너 정보를 확인한다

'cur'l 을 이용하여 webserver 컨테이너(http://192.168.2.10)로 HTTP 요청을 실시한다


실제 웹 브라우저를 통해서도 접속하면 위와 같은 화면이 나타난다
새로고침을 하게 되면 이미지가 변경되면서
access count 수가 늘어나는 것을 확인할 수 있다

docker-compose 명령어를 이용하여 컨테이너를 중지한다

다시 docker-compose 명령어를 이용하여 컨테이너를 구동한다

마지막으로 docker-compose 명령어를 이용하여 컨테이너를 삭제한다
down 자체가 삭제라고 보면 된다
2. Docker Compose 파일
1) YAML 파일

참고 사이트 : https://www.json2yaml.com/convert-yaml-to-json
JSON to YAML Online Converter
Convert JSON to YAML and slim down your data with the json2yaml online editor
www.bairesdev.com
2) 'docker-compose.yml' 파일


참고 사이트 : https://docs.docker.com/compose/compose-file
Compose file reference
Find the latest recommended version of the Docker Compose file format for defining multi-container applications.
docs.docker.com

3) 파일 버전(version)

참고 사이트 : https://docs.docker.com/compose/intro/history
History and development
History of Compose V1 and Compose YAML schema versioning
docs.docker.com
4) 이미지 지정(image)

5) 이미지 빌드(build)
① 현재 디렉토리에 존재하는 Dockerfile 를 이용하여 빌드

: <-- 콜론(:) 뒤에 한 칸 띄어 써야 된다
② 다른 Dockerfile 지정하기(dockerfile)

임의의 이름으로 된 Dockerfile 을 빌드할 때는 'dockerfile' 지시자를 사용한다
Dockerfile 이 있는 디렉토리의 경로나 Git Repository 의 URL 을 'context'로 지정한다
③ 이미지 빌드시 인수(인자) 지정하기(args)

Docker 이미지를 빌드할 때에 인수를 args 로 지정할 수 있다
bool 연산자(true/false/yes/no)를 사용하는 경우에는 따옴표로 둘러 싸야 한다
또한, 변수의 값은 Docker Compose 를 실행하는 머싞 위에서만 유효하다
6) 컨테이너 안에서 동작하는 명령 지정(command)

7) 컨테이너 안에서 동작하는 명령 지정(entrypoint)

8) 컨테이너 간 연결(links)

9) 컨테이너 간 통신 포트(ports/expose)

10) 서비스의 의존 관계 정의(depends_on)

11) 컨테이너 환경 변수 지정(environment)

12) 파일을 이용한 컨테이너 환경 변수 지정(env_file)

여러 개의 환경 변수의 지정은 배열 형식으로 지정한다
13) 컨테이너 이름 설정(container_name)

14) 컨테이너 레이블 설정(lables)

15) 컨테이너 볼륨 관리(volumes)

4. Docker 허브 사이트 'nginx' 내용 분석 및 실습
참고 사이트: https://hub.docker.com/_/nginx
nginx - Official Image | Docker Hub
Quick reference Supported tags and respective Dockerfile links 1.27.2, mainline, 1, 1.27, latest, 1.27.2-bookworm, mainline-bookworm, 1-bookworm, 1.27-bookworm, bookworm1.27.2-perl, mainline-perl, 1-perl, 1.27-perl, perl, 1.27.2-bookworm-perl, mainline-
hub.docker.com
1) Hosting some simple static content
① docker 명령어를 이용한 컨테이너 구동 예시
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
② docker-compose.yml 파일로 제작할 경우

③ docker-compose.yml 파일 권장 방식

2) Exposing external port
① docker 명령어를 이용한 컨테이너 구동 예시
docker run --name some-nginx -d -p 8080:80 some-content-nginx
② docker-compose.yml 파일로 제작할 경우

③ docker-compose.yml 파일 권장 방식

3) Running nginx in debug mode
① docker 명령어를 이용한 컨테이너 구동 예시
docker run --name my-nginx -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx nginx-debug -g 'daemon off;'
② docker-compose.yml 파일로 제작할 경우

③ docker-compose.yml 파일 권장 방식

5. Docker 허브 사이트 mongodb 내용 분석 및 실습
1) Connect to MongoDB from another Docker container
# Use root/example as user/password credentials
version: '3.1'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongoexpress:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/

실습을 진행하기 위해 11번 compose_mongo 디렉터리로 이동 후
docker-compose.yml 파일을 제작하여 컨테이너를 생성하고 구동시킨다
[참고] DBMS 포트
- Oracle Oracle 19c: 1521/tcp
- MS-SQL : 1433/tcp
- MySQL/MariaDB: 3306/tcp
- PostgreSQL: 5432/tcp
- MongoDB: 27017/tcp
- Redis: 6379/tcp
2) docker-compose 구동 및 테스트


컨테이너를 구동시킨 다음 네트워크, 볼륨, 이미지를 확인하고

실제 웹 브라우저를 이용하여
mongo-express(http://192.168.2.10:8081)로 접속되는지 확인한다
이때, mongo-express의 아이디와 패스워드는
각각 admin/pass이다

마지막으로 다음 실습을 위해 이런 식으로 삭제하는 것이 좋다
3) Docker 명령어로 재구성

mynet이라는 네트워크를 생성한다

지정된 네트워크에서 자동 재시작되도록 설정한
MongoDB 컨테이너를 생성하고, 루트 사용자 계정을 초기화한다

이미지가 mongo인 컨테이너가 구동 중인지 확인한다

다음으로 MongoDB에 연결된 Mongo Express 웹 인터페이스를
지정된 네트워크에서 자동 재시작되도록 설정하고,
8081 포트로 접근할 수 있게 하는 컨테이너를 생성한다

볼륨을 확인하게 되면 두 개의 볼륨이
추가로 생성된 것을 확인할 수 있다
*볼륨을 미리 삭제해 두지 않아서 많은 볼륨이 뜨지만,
다음 실습을 위해서는 반드시 볼륨까지 삭제하는 걸 권장한다

mongo-express와 mongo의 컨테이너 구동 상태를 다시 확인한다

해당 페이지의 기본 값이 아이디 admin과 비밀번호 pass다

로그인 시 해당 mongo express 화면을 볼 수 있고,
실제로 데이터 베이스를 생성할 수도 있다
현재 testdb라는 데이터 베이스를 임의로 만들어 놓은 상태다
6. Docker 허브 사이트 postgres 내용 분석 및 실습
참고 사이트: https://hub.docker.com/_/postgres
postgres - Official Image | Docker Hub
Note: the description for this image is longer than the Hub length limit of 25000, so has been trimmed. The full description can be found at https://github.com/docker-library/docs/tree/master/postgres/README.md. See also docker/hub-feedback#238 and d
hub.docker.com
1) start a postgres instance
# Use postgres/example user/password credentials
version: '3.1'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: example
adminer:
image: adminer
restart: always
ports:
- 8080:8080

docker-compose.yml 파일을 제작하여 컨테이너를 생성하고 구동한다
2) docker-compose 구동 및 테스트

컨테이너를 구동시킨 다음


이미지와 네트워크, 컨테이너 구동 상태까지 확인한다

실제 웹 브라우저를 이용하여 adminer(http://192.168.2.10:8081)로
접속하여 postres DB 테스트를 진행한다
데이터 베이스 형식: PostgreSQL
서버: db
사용자 이름: postgres
비밀번호: example
데이터 베이스: 빈 칸
3) Docker 명령어로 재구성

이번에는 mynet이라는 네트워크를 생성한다

docker container run -d --name db \
--restart=always \
--network=mynet \
-e POSTGRES_INITDB_ROOT_PASSWORD=example \
postgres
지정된 네트워크에서 자동 재시작되도록 설정한
PostgreSQL 데이터베이스 컨테이너를 생성하고, 루트 비밀번호를 초기화한다


이미지를 확인하고, 컨테이너 구동 상태까지 확인한다
그 다음 볼륨을 확인하면 현재 하나의 볼륨이 생성된 것을 확인할 수 있다

현재 설정해 놓은 비밀번호 example로 입력 후
화면과 동일하게 입력하고 로그인한다

로그인 시 화면과 같이 내가 만든 postgres를 확인할 수 있다
7. Docker Compose 명령어

1) Docker Compose 버전 확인(docker-compose version)
# docker-compose --version
> Docker Compose version v2.4.1
2) 컨테이너 생성(docker-compose up)
① 명령어 형식
# docker compose up [옵션]
② 명령어 옵션
-d, --detach
--build
--no-deps
-t, --timeout int
--scale scale
③ 명령어 예시
컨테이너 생성 및 구동
# docker-compose up
컨테이너를 백그라운드로 구동
# docker-compose up -d
컨테이너 시작시 Dockerfile 을 빌드
# docker-compose up --build
컨테이너 생성 개수를 지정
# docke-compose up --scale [서비스명=개수]
# docker-compose up --scale server_a=5 --scale server_b=10
Ex1) docker-compose up 예제
version: '3.3'
services:
server_a:
image: nginx
server_b:
image: redis

docker-compose.yml 파일을 제작하고,
docker-compose를 이용하여 컨테이너를 백그라운드로 구동시킨다

ps로 확인 시 a와 b 두 개의 컨테이너를 확인할 수 있다
Ex2) 동일한 이미지를 사용하는 여러 개의 컨테이너 실행 예제

#docker-compose up -d --scale server_a=5 --scale server=b=10
다음으로 docker-compose를 이용하여 여러 개의 컨테이너를 백그라운드로 구동한다
다시 ps 명령어를 통해 확인하게 되면 여러 개의 컨테이너가 생성되어 있다
3) 컨테이너 상태 확인(docker-compose ps/logs)
① 명령어 형식
# docker-compose ps [옵션]
② 명령어 옵션
-a, --all
-q, --quiet
③ 명령어 예시
컨테이너의 상태 확인
# docker-compose ps -a
컨테이너 ID 만 확인
# docker-compose ps -q
컨테이너 로그 확인
# docker-compose logs
Ex) docker-compose ps 명령 예제

server_a-1과 server_b-1 컨테이너를 백그라운드로 구동한다

ps 명령어를 통해 구동된 server_a-1, server_b-1 컨테이너를 확인한다

마지막으로 컨테이너 로그를 확인한다
실시간으로 확인하려면 -f 옵션을 사용하여 확인이 가능하다
4) 컨테이너 명령 실행(docker-compose run)
Ex) docker-compose run 명령 예제
# docker-compose run server_a /bin/date
> Sun Aug 25 04:39:39 UTC 2024
# docker-compose run server_a /bin/bash
root@7a2a60629784:/
# root@7a2a60629784:/
# exit exit
5) 컨테이너 시작/중지/재시작(docker-compose start/stop/restart/pause/unpause)
① 명령어 예시
서비스 시작하기
# docker-compose start
서비스 중지하기
# docker-compose stop
서비스 재시작하기
# docker-compose restart
서비스 일시정지하기
# docker-compose pause
서비스 일시정지 재개하기
# docker-compose unpause
강의 소감
오늘로 도커의 실습은 마무리가 되었다
마지막으로 docker 파일 이미지 빌드와 로컬 레지스트리,
마지막 장의 docker compose에 대해서 배우게 되었다
도커의 명령어를 사용하며 컨테이너 구동과
각 컨테이너를 구동하여 포트 번호를 설정하고
이미지를 빌드 후 실제 웹 브라우저로 접속할 때
내가 사용할 수 있는 웹 브라우저가 나오는 것도 신선했다
아직 많이 부족하지만 꾸준한 연습을 통해 클라우드에
대해서도 잘 아는 보안 전문가가 되고 싶다
출처 - 코리아it아카데미 김정우 강사님 제공
*중간에 나오는 교재의 단편적인 면이 아닌
MobaXterm으로 실행하여 캡처한 것은 모두 본인이 직접 실행해 보고
캡처하여 블로그에 작성하는 것입니다
'멀티 클라우드 인프라(DKR & K8S)' 카테고리의 다른 글
도커 & 쿠버네티스 6 (2) | 2024.11.11 |
---|---|
도커 & 쿠버네티스 5 (0) | 2024.11.02 |
도커 & 쿠버네티스 3 (0) | 2024.10.28 |
도커 & 쿠버네티스 2 (2) | 2024.10.20 |
도커 & 쿠버네티스 1 (1) | 2024.10.20 |