azure, container

gosu·2024년 1월 11일
0
post-custom-banner

대표 소개

azure

1. 기본 설정

2. 데이터 센터

3. azure settings ✍️

  1. 리소스 그룹 (작업 방 - 할당 : 93)

  1. ubuntu 서버 만들기

  2. 가상 머신 만들기

  1. ssh로 연결

ssh -i ~/.ssh/id_rsa.pem winkey@20.200.217.203

4. linux settings 👍

  1. apt-get 업데이트
sudo apt-get update
sudo apt-get upgrade

  • tab - ok
  1. docker 설치 (아래 내용 참조)

컨테이너

1. 서버 가상화

  • Hosted Hypervisor Virtual Machine
    • OS 위에 OS가 올라감으로 서버 부하가 많이 생긴다
  • Container
    • Host OS : 리눅스 OS
    • 그 위에 Container가 올라가있고, Minimal Guest OS가 올라가는 형식이다.
    • 기본 공유 자원 / 각각의 개별 자원으로 나눔. 버전을 기본적으로 각각 설정할 수 있으므로 똑같은 환경으로 배포가 가능하다는 장점이 있다.

2. docker vs 쿠버네티스

  • 도커 : 컨테이너 하나 관리
    • 소 한마리 애지중지 키우는 개념
  • 쿠버네티스 : 컨테이너 다수 관리
    • 미국에서 소 떼거지로 관리하는 개념

3. docker

docker repositories 👍

  • 다양한 네트워크의 레포지토리가 있다.
  1. docker 공식 사이트 (library)
  1. dockerhub
  1. 각 클라우드마다 docker 레포지토리 존재함. (Azure Container Registry)

docker ubuntu 설치 ✍️

  1. docker 설치 전 사전작업
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] 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. docker 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • 설정창 나오면 탭키 - ok
  1. docker 테스트
sudo docker run hello-world
  • 로컬에 있으면 실행
  • 로컬에 없다면 인터넷에 있는 이미지를 찾아 다운로드하고, 실행시킴
  • 기본적으로 도커 레포지토리에서 찾아 가져오고, 다른 레포지토리에서 다운로드도 가능하다.
  1. ubuntu 18.04 다운로드
$ sudo docker pull ubuntu:18.04

18.04: Pulling from library/ubuntu
7c457f213c76: Pull complete
Digest: sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
  • ubuntu 원래 다운로드 받으려면 엄청 오래걸리는데, 현재 22.04 버전 위에서 동작하고 있으므로 스냅샷인 63MB만 받으면 된다. (효율적이군)

docker 명령어 ✍️

  1. 다운로드 받은 docker 이미지 확인
$ sudo docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        18.04     f9a80a55f492   7 months ago   63.2MB
hello-world   latest    d2c94e258dcb   8 months ago   13.3kB
  1. 실행 중인 docker 이미지 확인
$ sudo docker ps


CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  1. docker 실행 내역 확인
$ sudo docker ps -a

CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
31c0991209b4   hello-world   "/hello"   19 minutes ago   Exited (0) 19 minutes ago             zealous_cohen
  1. docker 이미지 실행, ubuntu:18.04 실행
  • -it : interactive 모드
    • 상호작용 가능한 모드로 ubuntu 18.04 환경에 진입할 수 있게 된다
  • -name : 메모리에서 docker 이미지를 실행시킬 때 이름을 지정해줌
  • /bin/bash : bash shell에서 실행
$ sudo docker run -it --name demo1 ubuntu:18.04 /bin/bash

root@06d4ae567214:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  1. 이미지에서 접속 종료
root@06d4ae567214:/etc# exit
exit
winkey@labuser93ubuntu:~$
  1. docker를 계속 실행
  • -d : daemon
$ sudo docker run -it -d --name demo2 ubuntu:18.04
2e5aeafde515f253ae5653528951caededd5733d2874104afe49a4e2ecd7514f

$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS          PORTS     NAMES
2e5aeafde515   ubuntu:18.04   "/bin/bash"   13 seconds ago   Up 12 seconds
demo2
  • container id를 할당받고, 백그라운드에서 계속 실행되고 있는 상태가 됨
  1. 메모리에 올라와 있는 docker 실행
  • exec 명령어로 실행시킬 수 있다.
$ sudo docker exec -it demo2 /bin/bash
root@2e5aeafde515:/#
  1. busybox 실행 (docker 테스트 이미지) 및 로그 보기
$ sudo docker run --name demo5 -d busybox sh -c "while true;do
$(echo date);sleep 1; done"

a3083ce2f910269d1e2fdcf718c6cf6e055fb9485c9b22d05240918b1894c799
  • 로그 확인
$ sudo docker logs demo5

Thu Jan 11 03:27:26 UTC 2024
Thu Jan 11 03:27:28 UTC 2024
Thu Jan 11 03:27:29 UTC 2024
Thu Jan 11 03:27:30 UTC 2024
Thu Jan 11 03:27:31 UTC 2024
Thu Jan 11 03:27:32 UTC 2024
  • 실시간 로그 확인
$ sudo docker logs demo5 -f

Thu Jan 11 03:27:26 UTC 2024
Thu Jan 11 03:27:28 UTC 2024
Thu Jan 11 03:27:29 UTC 2024
Thu Jan 11 03:27:30 UTC 2024
Thu Jan 11 03:27:31 UTC 2024
Thu Jan 11 03:27:32 UTC 2024
... 계속 반복
  1. 메모리에서 실행중인 도커 이미지 실행 중단
  • docker stop
$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS     NAMES
a3083ce2f910   busybox        "sh -c 'while true;d…"   About an hour ago   Up About an hour             demo5
2e5aeafde515   ubuntu:18.04   "/bin/bash"              About an hour ago   Up About an hour             demo2

$ sudo docker stop demo5
demo5

$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED             STATUS             PORTS     NAMES
2e5aeafde515   ubuntu:18.04   "/bin/bash"   About an hour ago   Up About an hour             demo2
  1. 메모리에 적재된 도커 이미지 삭제
  • docker rm
$ sudo docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS                          PORTS     NAMES
a3083ce2f910   busybox        "sh -c 'while true;d…"   About an hour ago   Exited (137) 2 minutes ago                demo5
71c788454ee6   busybox        "sh -c 'while true;d…"   About an hour ago   Exited (2) About an hour ago              demo3
2e5aeafde515   ubuntu:18.04   "/bin/bash"              About an hour ago   Exited (0) About a minute ago             demo2
06d4ae567214   ubuntu:18.04   "/bin/bash"              2 hours ago         Exited (0) 2 hours ago                    demo1
31c0991209b4   hello-world    "/hello"                 2 hours ago         Exited (0) 2 hours ago                    zealous_cohen

$ sudo docker rm demo1 
demo1

$ sudo docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS                         PORTS     NAMES
a3083ce2f910   busybox        "sh -c 'while true;d…"   About an hour ago   Exited (137) 4 minutes ago               demo5
71c788454ee6   busybox        "sh -c 'while true;d…"   About an hour ago   Exited (2) About an hour ago             demo3
2e5aeafde515   ubuntu:18.04   "/bin/bash"              2 hours ago         Exited (0) 3 minutes ago                 demo2
31c0991209b4   hello-world    "/hello"                 2 hours ago         Exited (0) 2 hours ago                   zealous_cohen
  1. 하드디스크에 존재하는 도커 이미지 삭제
  • docker rmi
$ sudo docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
busybox       latest    9211bbaa0dbd   3 weeks ago    4.26MB
ubuntu        18.04     f9a80a55f492   7 months ago   63.2MB
hello-world   latest    d2c94e258dcb   8 months ago   13.3kB

$ sudo docker rmi busybox
Untagged: busybox:latest
Untagged: busybox@sha256:ba76950ac9eaa407512c9d859cea48114eeff8a6f12ebaa5d32ce79d4a017dd8
Deleted: sha256:9211bbaa0dbd68fed073065eb9f0a6ed00a75090a9235eca2554c62d1e75c58f
Deleted: sha256:82ae998286b2bba64ce571578647adcabef93d53867748d6046cc844ff193a83

$ sudo docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        18.04     f9a80a55f492   7 months ago   63.2MB
hello-world   latest    d2c94e258dcb   8 months ago   13.3kB
  • ubuntu 삭제 : 특정 버전으로 정했으면 이미지의 이름과 버전을 같이 명시해줘야 삭제가 가능하다
$ sudo docker rmi ubuntu:18.04
Untagged: ubuntu:18.04
Untagged: ubuntu@sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98
Deleted: sha256:f9a80a55f492e823bf5d51f1bd5f87ea3eed1cb31788686aa99a2fb61a27af6a
Deleted: sha256:548a79621a426b4eb077c926eabac5a8620c454fb230640253e1b44dc7dd7562

Dockerfile 명령어 ✍️

  • Dockerfile 생성
touch Dockerfile

FROM

  • Dockerfile 이 base image로 어떤 이미지를 사용할 것인지를 명시하는 명령어입니다.
FROM <image>[:<tag>] [AS <name>]

# 예시
FROM ubuntu
FROM ubuntu:18.04
FROM ngix:latest AS ngx

COPY

  • <src>의 파일 혹은 디렉토리를 <dest> 경로에 복사하는 명령어입니다.
COPY <src>... <dest>

# 예시
COPY a.txt /some-directory/b.txt
COPY my-directory /some-directory-2

RUN

  • 명시한 커맨드를 도커 컨테이너에서 실행하는 것을 명시하는 명령어입니다.
RUN <command>
RUN ["excutable-command", 'parameter1', 'parameter2']

# 예시
RUN pip install torch
RUN pip install -r requirements.txt

CMD

  • 명시한 커맨드를 도커 컨테이너가 시작될 때, 실행하는 것을 명시하는 명령어입니다.
    • vs RUN : 도커가 처음 실행될 때(설정) 실행된다
    • 반면 CMD는 docker가 run 될 때 마다 실행됨
    • 하나의 docker 이미지는 하나의 CMD만 실행할 수 있다
CMD <command> 
CMD ["executable-command", "parameter1", "parameter2"] 
CMD ["parameter1", "parameter2"] # ENTRYPOINT 와 함께 사용될 때 
 
# 예시 
CMD python main.py 
CMD 

WORKDIR

  • 이후 작성될 명령어를 컨테이너 내의 어떤 디렉토리에서 수행할 것인지를 명시하는 명령어입니다.
  • 해당 디렉토리가 없다면 생성합니다.
WORKDIR /path/to/workdir 
 
# 예시 
WORKDIR /home/demo

ENV

  • 컨테이너 내부에서 지속적으로 사용될 environment variable의 값을 설정하는 명령어입니다.
ENV <key> <value> 
ENV <key>=<value> 
 
# 예시 
# default 언어 설정 
RUN locale-gen ko_KR.UTF-8 
ENV LANG ko_KR.UTF-8 
ENV LANGUAGE ko_KR.UTF-8 
ENV LC_ALL ko_KR.UTF-8

EXPOSE

  • 컨테이너에서 뚫어줄 포트/프로토콜을 지정할 수 있습니다.
  • protocol을 지정하지 않으면 TCP가 디폴트로 설정됩니다.
EXPOSE <port> 
EXPOSE <port>/<protocol> 
 
# 예시 
EXPOSE 8080

Dockerfile 실습 ✍️

  1. Dockerfile 만들기
vi Dockerfile
FROM ubuntu:18.04

RUN apt-get update

CMD ["echo", "Hello Docker"]
  1. 내가 만든 Dockerfile 빌드
sudo docker build -t my-image:v1.0.0 .
  1. docker 실행
sudo docker run my-image:v1.0.0

docker registry로 push

  1. docker registry 실행
  • 도커의 이미지를 관리하기 위한 도커 이미지를 설치하여 실행
  • 5000번
sudo docker run -d -p 5000:5000 --name registry registry
  1. my-image를 방금 생성한 registry를 바라보도록 tag
  • tag 명령어를 통해 repository를 어디에 연결할 지 결정할 수 있다.
  • 링크된 것, git remote origin add와 비슷하다.
$ sudo docker tag my-image:v1.0.0 localhost:5000/my-image:v1.0.0

$ sudo docker images
REPOSITORY                TAG       IMAGE ID       CREATED          SIZE
my-image                  v1.0.0    bf450d7aa616   23 minutes ago   109MB
localhost:5000/my-image   v1.0.0    bf450d7aa616   23 minutes ago   109MB
registry                  latest    909c3ff012b7   5 weeks ago      25.4MB
  1. my-image를 registry에 push
$ sudo docker push localhost:5000/my-image:v1.0.0
The push refers to repository [localhost:5000/my-image]
b5858e8710d9: Pushed
548a79621a42: Pushed
v1.0.0: digest: sha256:16982bd2cd1153fe0a9b875396f3881862b6a6c77e6f788b5b5d7575b345dff8 size: 741

dockerhub로 push

  1. docker login으로 dockerhub에 로그인
$ sudo docker login
Log in with your Docker ID or email address to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
You can log in with your password or a Personal Access Token (PAT). Using a limited-scope PAT grants better security and is required for organizations using SSO. Learn more at https://docs.docker.com/go/access-tokens/

Username: newnyup319
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
  1. dockerhub로 tag
sudo docker tag my-image:v1.0.0 newnyup319/my-image:v1.0.0
$ sudo docker images
REPOSITORY                TAG       IMAGE ID       CREATED          SIZE
my-image                  v1.0.0    bf450d7aa616   43 minutes ago   109MB
newnyup319/my-image       v1.0.0    bf450d7aa616   43 minutes ago   109MB
localhost:5000/my-image   v1.0.0    bf450d7aa616   43 minutes ago   109MB
registry                  latest    909c3ff012b7   5 weeks ago      25.4MB
  1. dockerhub로 push
$ sudo docker push newnyup319/my-image:v1.0.0
The push refers to repository [docker.io/newnyup319/my-image]
b5858e8710d9: Pushed
548a79621a42: Mounted from library/ubuntu
v1.0.0: digest: sha256:9e9bddec89c0b29a3fc8ac560f52cc3aa47ffedb7d03ad550c4215a555fec1a7 size: 741

  • 성공적으로 이미지 업로드 된 것을 확인할 수 있다.

azure cv cat vs dog ✅

1. azure에서 computer vision 생성

  • azure portal - 리소스 그룹 - RG93 - 만들기 - computer vision

  • 만들고, 키 및 엔드포인트 - 키와 주소 복사하고 colab

2. 이미지 분석 - colab

이미지 불러오기

image_url = 'https://cdn.huffingtonpost.kr/news/photo/201602/22260_43420.jpeg'

from PIL import Image
from io import BytesIO
import requests

Image.open(BytesIO(requests.get(image_url).content))

key, endpoint 연결

key = '[key를 입력하세요]'
endpoint = 'https://labuser93computervision.cognitiveservices.azure.com/'
endpoint = endpoint + 'vision/v2.0/'

analyze_endpoint = endpoint + 'analyze' # 분석
detect_endpoint = endpoint + 'detect' # 객체 탐지
ocr_endpoint = endpoint + 'ocr' # 글자 인식

headers = {'Ocp-Apim-Subscription-Key': key}
params = {'visualFeatures': 'Categories,Description,Color'}
data = {'url': image_url}

analyze (태그 달아주기)

response = requests.post(analyze_endpoint,
                         headers=headers,
                         params=params,
                         json=data)
result = response.json()
result['description'] 

analyze 결과

{'tags': ['sitting',
  'cat',
  'brown',
  'indoor',
  'dog',
  'looking',
  'animal',
  'staring',
  'camera',
  'standing',
  'tan',
  'front',
  'table',
  'laying',
  'close',
  'orange',
  'bed'],
 'captions': [{'text': 'a close up of a dog and a cat looking at the camera',
   'confidence': 0.8600456236335963}]}
  • google 포토에서 '브롤스타즈'를 검색하면 나오는 원리로, 태그를 달 항목을 찾아준다. 미쳤음

detect (객체 탐지)

# Object Detection
response = requests.post(detect_endpoint,
                         headers=headers,
                         json=data)

result = response.json()
result

detect 결과

  • 개와 고양이 객체 성공적으로 탐지하는 것을 볼 수 있다.
{'objects': [{'rectangle': {'x': 195, 'y': 53, 'w': 360, 'h': 493},
   'object': 'dog',
   'confidence': 0.92,
   'parent': {'object': 'mammal',
    'confidence': 0.934,
    'parent': {'object': 'animal', 'confidence': 0.935}}},
  {'rectangle': {'x': 0, 'y': 235, 'w': 260, 'h': 317},
   'object': 'cat',
   'confidence': 0.869,
   'parent': {'object': 'mammal',
    'confidence': 0.88,
    'parent': {'object': 'animal', 'confidence': 0.881}}}],
 'requestId': '179b4ac2-6cd9-4b8e-8afb-b74e7092fa6a',
 'metadata': {'height': 552, 'width': 570, 'format': 'Jpeg'}}
profile
개발자 블로그 ^0^
post-custom-banner

0개의 댓글