Docker 개요

Docker는 애플리케이션을 개발, 적재 및 실행하기 위한 개방형 플랫폼입니다. Docker를 사용하면 애플리케이션을 인프라에서 분리할 수 있으므로 소프트웨어를 빠르게 제공할 수 있습니다. Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다. 코드를 신속하게 적재, 테스트 및 배포하기 위한 Docker 방법론을 활용하면 코드 작성과 프로덕션 환경에서 실행 사이의 지연을 크게 줄일 수 있습니다.

The Docker 플랫폼

Docker는 컨테이너라고 하는 느슨하게 격리된 환경에서 애플리케이션을 패키징하고 실행할 수 있는 기능을 제공합니다. 격리 및 보안을 통해 주어진 호스트에서 많은 컨테이너를 동시에 실행할 수 있습니다. 컨테이너는 가볍고 애플리케이션을 실행하는 데 필요한 모든 것을 포함하므로 현재 호스트에 설치된 것에 의존할 필요가 없습니다. 작업하는 동안 컨테이너를 쉽게 공유할 수 있으며 공유하는 모든 사람이 동일한 방식으로 작동하는 동일한 컨테이너를 갖게 됩니다.

Docker는 컨테이너의 수명 주기를 관리하기 위한 도구와 플랫폼을 제공합니다.

  • 컨테이너를 사용하여 애플리케이션 및 구성 요소를 개발
  • 컨테이너는 애플리케이션을 배포하고 테스트하기 위한 단위
  • 애플리케이션을 컨테이너 또는 오케스트레이션된 서비스로 프로덕션 환경에 배포합니다. 이는 프로덕션 환경이 데이터 센터, 클라우드 환경 또는 하이브리드 환경에서 동일하게 작동

도커는 어떻게 사용하나?

빠르고 일관된 애플리케이션 제공
Docker는 개발자가 애플리케이션 및 서비스를 제공하는 로컬 컨테이너를 사용하여 표준화된 환경에서 작업할 수 있도록 하여 개발주기를 간소화합니다. 컨테이너는 지속적 통합 및 지속적 전달(CI/CD) 워크플로우입니다.

<예제 시나리오>

  • 개발자는 로컬에서 코드를 작성하고 Docker 컨테이너를 사용하여 동료와 작업 공유
  • Docker를 사용하여 애플리케이션을 테스트 환경으로 구성하고 자동화 및 수동 테스트 실행
  • 개발자는 버그를 발견하면 개발 환경에서 수정하고 테스트 및 검증을 위해 테스트 환경에 재배포
  • 테스트가 완료되면 업데이트된 이미지를 프로덕션 환경에 배포하는 것으로 간단하게 고객에게 수정 사항을 제공

 

반응형 배포 및 확장
Docker의 컨테이너 기반 플랫폼은 이식성이 높은 워크로드를 허용합니다. Docker 컨테이너는 개발자의 랩톱, 데이터 센터의 물리적 또는 가상 머신, 클라우드 공급자 또는 hybrid 환경에서 실행할 수 있습니다.

Docker의 휴대성과 가벼운 특성 덕분에 거의 실시간으로 비즈니스 요구 사항에 따라 애플리케이션과 서비스를 확장하거나 축소하여 워크로드를 쉽게 동적으로 관리할 수 있습니다.

 

동일한 하드웨어에서 더 많은 워크로드 실행
Docker는 가볍고 빠릅니다. 하이퍼바이저 기반 가상 머신에 실행 가능하고 비용 효율적인 대안을 제공하므로 더 많은 컴퓨팅 용량을 사용하여 비즈니스 목표를 달성할 수 있습니다. Docker는 고밀도 환경과 더 적은 리소스로 더 많은 작업을 수행해야 하는 중소 배포에 적합합니다.

 

Docker는 클라이언트-서버 아키텍처를 사용합니다. Docker 클라이언트는 Docker 컨테이너를 빌드, 실행 및 배포 작업을 수행하는 Docker 데몬과 통신합니다. Docker 클라이언트와 데몬은 동일한 시스템에서 실행되거나 Docker 클라이언트를 원격 Docker 데몬에 연결할 수 있습니다. Docker 클라이언트와 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 사용하여 통신합니다. 또 다른 Docker 클라이언트는 컨테이너 세트로 구성된 애플리케이션으로 작업할 수 있는 Docker Compose입니다.

 

도커 데몬

Docker 데몬(dockerd)은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리합니다. 

데몬은 Docker 서비스를 관리하기 위해 다른 데몬과 통신할 수도 있습니다.

 

도커 클라이언트

Docker 클라이언트(docker)는 많은 Docker 사용자가 Docker와 상호 작용하는 기본 방법입니다.

docker run과 같은 명령을 사용할 때 클라이언트는 이러한 명령을 dockerd에 보내고 이를 수행합니다. docker 명령은 Docker API를 사용합니다. Docker 클라이언트는 둘 이상의 데몬과 통신할 수 있습니다.

 

도커 데스크탑

Docker Desktop은 컨테이너화된 애플리케이션 및 마이크로서비스를 구축하고 공유할 수 있는 Mac 또는 Windows 환경용으로 설치하기 쉬운 애플리케이션입니다.

Docker Desktop에는 Docker 데몬(dockerd), Docker 클라이언트(docker), Docker Compose, Docker Content Trust, Kubernetes 및 Credential Helper가 포함됩니다.

자세한 내용은 Docker 데스크톱(Docker Desktop)을 참조하세요.

 

도커 저장소

Docker 레지스트리는 Docker 이미지를 저장합니다. Docker Hub는 누구나 사용할 수 있는 공용 레지스트리이며 Docker는 기본적으로 Docker Hub에서 이미지를 찾도록 구성되어 있습니다. 자신의 개인 레지스트리를 실행할 수도 있습니다.
docker pull 또는 docker run 명령을 사용하면 구성된 레지스트리에서 필수 이미지를 가져옵니다. docker push 명령을 사용하면 이미지가 구성된 레지스트리로 저장됩니다

 

도커 오브젝트

Docker를 사용하면 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 및 기타 개체를 만들고 사용합니다. 

Images

이미지는 Docker 컨테이너 생성 지침이 포함된 읽기 전용 템플릿입니다. 이미지는 다른 이미지를 기반으로 추가 사용자 정의를 포함할 수 있습니다. 예를 들어, 우분투 이미지를 기반으로 하는 이미지를 빌드할 수 있고 Apache 웹 서버와 애플리케이션은 물론 애플리케이션을 실행하는 데 필요한 세부 구성정보도 설치합니다.

자신만의 이미지를 만들거나 다른 사람이 만들고 레지스트리에 게시한 이미지를 사용할 수 있습니다. 고유한 이미지를 빌드하려면 이미지를 만들고 실행하는 데 필요한 단계를 정의하기 위해 Dockerfile을 만듭니다. Dockerfile의 각 명령은 이미지에 계층을 생성합니다. Dockerfile을 변경하고 이미지를 다시 빌드하면 변경된 레이어만 다시 빌드됩니다. 이것은 다른 가상화 기술과 비교할 때 이미지를 매우 가볍고 작고 빠르게 만드는 부분입니다.

Containers

컨테이너는 이미지의 실행 가능한 인스턴스입니다. Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있습니다. 컨테이너를 하나 이상의 네트워크에 연결하거나, 컨테이너에 스토리지를 연결하거나, 현재 상태를 기반으로 새 이미지를 생성할 수도 있습니다.
기본적으로 컨테이너는 다른 컨테이너 및 해당 호스트 시스템과 잘 격리되어 있습니다. 컨테이너의 네트워크, 스토리지 또는 기타 하위 시스템이 다른 컨테이너나 호스트 시스템과의 격리를 제어할 수 있습니다.
컨테이너는 이미지와 컨테이너를 만들거나 시작할 때 제공하는 구성 옵션으로 정의됩니다. 컨테이너가 제거되면 영구 저장소에 저장되지 않은 상태 변경 사항은 사라집니다.

<도커 실행 명령의 예>
다음 명령은 우분투 컨테이너를 실행하고 로컬 명령줄 세션에 대화형으로 연결하고 /bin/bash를 실행합니다.

$ docker run -i -t ubuntu /bin/bash

이 명령을 실행하면 다음이 발생합니다.(기본 레지스트리 구성을 사용한다고 가정)

  1. 우분투 이미지가 로컬에 없는 경우 Docker는 수동으로 docker pull ubuntu를 실행한 것처럼 구성된 레지스트리에서 이미지를 가져옵니다.
  2. Docker는 docker container create 명령을 수동으로 실행한 것처럼 새 컨테이너를 생성합니다.
  3. Docker는 컨테이너에 읽기-쓰기 파일 시스템을 최종 계층으로 할당합니다. 이를 통해 실행 중인 컨테이너가 로컬 파일 시스템에서 파일 및 디렉토리를 생성하거나 수정할 수 있습니다.
  4. Docker는 네트워킹 옵션을 지정하지 않았기 때문에 컨테이너를 기본 네트워크에 연결하는 네트워크 인터페이스를 만듭니다. 여기에는 컨테이너에 IP 주소 할당이 포함됩니다. 기본적으로 컨테이너는 호스트 시스템의 네트워크 연결을 사용하여 외부 네트워크에 연결할 수 있습니다.
  5. Docker는 컨테이너를 시작하고 /bin/bash를 실행합니다. 컨테이너가 대화식으로 실행되고 터미널에 연결되기 때문에(-i 및 -t 플래그로 인해) 출력이 터미널에 기록되는 동안 키보드를 사용하여 입력을 제공할 수 있습니다.
    /bin/bash 명령을 종료하기 위해 exit를 입력하면 컨테이너가 중지되지만 제거되지는 않습니다. 다시 시작하거나 제거할 수 있습니다.

container lifecycle

Docker container lifecycle

The underlying technology

Docker는 Go 프로그래밍 언어로 작성되었으며 Linux 커널의 여러 기능을 활용하여 기능을 제공합니다. Docker는 네임스페이스라는 기술을 사용하여 컨테이너라는 격리된 작업 공간을 제공합니다. 컨테이너를 실행할 때 Docker는 해당 컨테이너에 대한 네임스페이스 세트를 생성합니다.
이러한 네임스페이스는 격리 계층을 제공합니다. 컨테이너의 각 측면은 별도의 네임스페이스에서 실행되며 액세스는 해당 네임스페이스로 제한됩니다.

 

다음 단계

'Docker' 카테고리의 다른 글

헷갈리는 Docker - 수정  (0) 2021.12.26
Docker Commands for Managing Container Lifecycle  (0) 2021.12.25
Docker run, start, create 차이  (0) 2021.12.25
window10에 도커 설치하기  (1) 2021.12.25
도커 명령어 - 수정  (0) 2021.12.25

Docker CLI 명령어에 대한 설명이다.

 

Child commands

Command Description
docker attach Attach local standard input, output, and error streams to a running container
docker build Build an image from a Dockerfile
docker builder Manage builds
docker checkpoint Manage checkpoints
docker commit Create a new image from a container’s changes
docker config Manage Docker configs
docker container Manage containers
docker context Manage contexts
docker cp Copy files/folders between a container and the local filesystem
docker create Create a new container
docker diff Inspect changes to files or directories on a container’s filesystem
docker events Get real time events from the server
docker exec Run a command in a running container
docker export Export a container’s filesystem as a tar archive
docker history Show the history of an image
docker image Manage images
docker images List images
docker import Import the contents from a tarball to create a filesystem image
docker info Display system-wide information
docker inspect Return low-level information on Docker objects
docker kill Kill one or more running containers
docker load Load an image from a tar archive or STDIN
docker login Log in to a Docker registry
docker logout Log out from a Docker registry
docker logs Fetch the logs of a container
docker manifest Manage Docker image manifests and manifest lists
docker network Manage networks
docker node Manage Swarm nodes
docker pause Pause all processes within one or more containers
docker plugin Manage plugins
docker port List port mappings or a specific mapping for the container
docker ps List containers
docker pull Pull an image or a repository from a registry
docker push Push an image or a repository to a registry
docker rename Rename a container
docker restart Restart one or more containers
docker rm Remove one or more containers
docker rmi Remove one or more images
docker run Run a command in a new container
docker save Save one or more images to a tar archive (streamed to STDOUT by default)
docker search Search the Docker Hub for images
docker secret Manage Docker secrets
docker service Manage services
docker stack Manage Docker stacks
docker start Start one or more stopped containers
docker stats Display a live stream of container(s) resource usage statistics
docker stop Stop one or more running containers
docker swarm Manage Swarm
docker system Manage Docker
docker tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
docker top Display the running processes of a container
docker trust Manage trust on Docker images
docker unpause Unpause all processes within one or more containers
docker update Update configuration of one or more containers
docker version Show the Docker version information
docker volume Manage volumes
docker wait Block until one or more containers stop, then print their exit codes

 

 

docker login

Docker registry(dockerhub)에 login하는 명령어로 docker registry에 등록된 이미지를 pull하거나 push를 위해 login한다. docker login은 패스워드를 직접 입력하는 방식과 STDIN 을 사용해서 로그인하는 방식이 있는데 보안을 위해 STDIN 방식으로 로긴하는 것을 권장한다.

 

1) STDIN을 사용하면 shll history나 로그파일에 남는 것을 방지

아래 예제는 pass.txt 파일에서 패스워드를 읽어서 login하는 방식이다.

$ cat pass.txt | docker login -u <username> --password-stdin

 

2) 패스워드 직업 입력 login

$ docker login -u <username> -p <password>

 

docker serarch

Docker registry(dockerhub)에 등록된 이미지를 검색하는 명령어이다.

아래는 oracle19 라는 이름이 포함된 이미지를 검색하는 명령어이다.

$ docker search oracle19

 

docker pull

docker pull 명령어로 oracle datbase 19c 이미지를 다운로드한다.

 

$ docker pull banglamon/oracle193db:19.3.0-ee

 

docker images

다운로드한 이미지 목록을 조회한다.

docker run

다운로드한 도커 이미지파일을 이용해서 컨테이너를 실행한다.

$ docker run -d --name oracle19db \
-p 1521:1521 \
-e ORACLE_SID=MONGO \
-e ORACLE_PDB=MONGOPDB \
-e ORACLE_PWD=Oracle123 \
-v /u01/app/oracle/oradata:/opt/oracle/oradata \
banglamon/oracle193db:19.3.0-ee

-d : deatach mode를 나타내며, -d=true 는 detached mode(background mode), -d=false는 foreground mode 로 수행

       -d 옵션만 쓸 경우는 -d=true와 동일

--name : 컨테이너 이름을 지정

-p, --publish : host port를 컨테이너 port로 게시, 앞쪽 port가 host port이고 뒤쪽 port가 컨테이너 port이다.

     ( 예, -p 1621:1521 로 설정하면 호스트에 1621 TCP port로 유입되는 모든 traffic은 컨테이너의 1521 port로 전달)

-e :  컨테이너의 환경변수를 설정. -e 옵션을 사용하면 Dockerfile의 ENV 설정도 덮어쓰게 된다.

    (예, -e ORACLE_SID=MONGO 는 오라클 컨테이너 환경변수 ORACLE_SID를 MONGO로 설정)

-v : 호스트와 컨테이너 간의 볼륨(volumn) 설정을 위해서 사용.

      호스트(host) 컴퓨터의 파일 시스템의 특정 경로를 컨테이너의 파일 시스템의 특정 경로로 마운트(mount)를 해준다.

      (Window : -v d:\temp )

      (Linux : )

 

위 예제는 oracle193db 이미지로 detached mode로 컨테이너를 실행하고

host에 1521 port로 유입되는 traffic을 컨테이너의 1521 port로 전달한다는 명령어이다. (1521은 오라클 리스너 port ) 

docker run 명령어 실행

컨테이너 조회 - docker ps 

docker ps는 현재 실행중인 도커 컨테이너를 조회한다.

docker ps -a는 실행중인 컨테이너와 중지된 컨테이너 모두를 조회한다. 컨테이너가 생성된 것을 확인 할 수 있다.

컨테이너 로그 조회 - docker logs 

컨테이너 실행 명령어 수행 후 바로 컨테이너를 사용할 수 있는 것은 아니다. 컨테이너에 따라 컨테이너를 생성하는데 필요한 설정을 하고 컨테이너를 생성하는데 시간이 소요된다. 오라클 데이터베이스는 오라클 인스턴스와 데이터베이스에 필요한 파일들을 생성하는데 일정 시간이 소요된다. 컨테이너 생성 과정을 모니터링 하기 위해 

docker logs <container name or cotainer id> 명령어를 수행한다. 아래 화면은 DB 설치가 진행 중인 것을 보여주고 있다.

log의 마지막 줄에 "XDB initialized" 가 보이면 정상 설치된 것이다.

컨테이너 접속 - docker exec 

컨테이너 생성이 "XDB initialized" 메시지와 함께 정상적으로 완료되면,

docker exec -i -t <ontainer name or cotainer id> /bin/bash 명령어로 컨테이너에 접속할 수 있다.

$ docker exec -it oracle19db bash
  • -i, --interactive=false : 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지한다.
  • -t, --tty=false : TTY 모드(pseudo-TTY)를 사용한다. Bash를 사용하려면 이 옵션을 설정해야 한다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 셸이 표시되지 않는다.
  • ontainer name 을 oracle19db 로 입력한다.
  • bash : 컨테이너 안의 /bin/bash를 실행하여 Bash 셸에 연결한다

 

컨테이너 중지 - docker stop

실행 중인 Docker 컨테이너를 중지하려면 

docker stop <container name or cotainer id> 명령어를 사용한다. 중지하고 싶은 컨테이너 ID나 NAME을 입력한다.

 

컨테이너 시작 - docker start

중지된 Docker 컨테이너를 시작하려면 

docker start <container name or cotainer id> 명령어를 사용한다. 시작하고 싶은 컨테이너 ID나 NAME을 입력한다.

 

컨테이너 재시작 - docker restart

실행 중인 Docker 컨테이너를 재시작하려면 

docker restart <container name or cotainer id> 명령어를 사용한다. 재시작하고 싶은 컨테이너 ID나 NAME을 입력한다.애

 

컨테이너 접속 - docker attach

실행 중인 Docker 컨테이너에 접속하려면 

docker attach <container name or cotainer id> 명령어를 사용한다.  접속하고 싶은 컨테이너 ID나 NAME을 입력한다.

 

컨테이너 삭제 - docker rm

중지된 Docker 컨테이너를 삭제하려면 

docker rm <container name or cotainer id> 명령어를 사용한다. 삭제하고자 하는 컨테이너 ID나 NAME을 입력한다.

실행 중인 Docker 컨테이너를 삭제하려면 

docker rm -f <container name or cotainer id> 명령어를 사용한다. 삭제하고자 하는 컨테이너 ID나 NAME을 입력한다.

 

이미지 삭제 - docker rmi

Docker 이미지를 삭제하려면 

docker rmi <image name or image id> 명령어를 사용한다. 삭제하고자 하는 이미지 ID나 NAME을 입력한다. 

단, Docker 이미지 삭제 시 이미지를 사용하는 컨테이너가 없어야 한다. 이미지를 사용하는 컨테이너가 먼저 모두 삭제되어야 한다.

컨테이너가 존재하는 상태에서 컨테이너와 이미지를 삭제하려먼

docker rmi -f <image name or image id> 명령어를 사용한다. 삭제하고자 하는 이미지 ID나 NAME을 입력한다.

'Docker' 카테고리의 다른 글

헷갈리는 Docker - 수정  (0) 2021.12.26
Docker Commands for Managing Container Lifecycle  (0) 2021.12.25
Docker run, start, create 차이  (0) 2021.12.25
window10에 도커 설치하기  (1) 2021.12.25
도커란  (0) 2021.12.25

 

 

'Oracle Cloud' 카테고리의 다른 글

오라클 클라우드에 로그인하기  (0) 2021.12.22

오라클 클라우드에 로그인하기

 https://cloud.oracle.com 접속 Sign in

클라우드 프리티어 사용을 위한 클라우드 어카운드와 사용자계정을 생성했으면 https://cloud.oracle.com에 접속한다.

아래 화면에 Cloud Accont Name에 가입 시 생성한 Cloud Accont Name을 입력한다.

[Next] 버튼을 클릭한다.

아래 화면이 뜨는데 [Continue] 버튼을 클릭한다.

 

프리티어 생성 시 입력했던 이메일주소와 비밀번호를 입력하고 [사인인] 버튼을 클릭한다.

오라클 클라우드 콘솔에 접속한 화면입니다. 

 

 https://www.oracle.com 접속 Sign in

클라우드 프리티어 사용을 위한 클라우드 어카운드와 사용자계정을 생성했으면 https://www.oracle.com에 접속한다.

우측 상단의 [View Accounts] 클릭 후 [Sign in to Cloud] 버튼을 클릭합니다.

아래 화면이 나타나면 위에서 설명한 동일한 방법으로 클라우드 콘솔에 Sign in 합니다.

'Oracle Cloud' 카테고리의 다른 글

오라클 클라우드 VM 생성  (0) 2021.12.22

Oracle Cloud Free Tier란?

오라클 클라우드 프리티어는 평생 무료인 Always Free 서비스와 30일 무료체험인 30-day Free Trial 서비스입니다. 이전에 Oracle Cloud Free Tier 또는 Free Trial에 가입하지 않은 사람은 누구나 신청 가능합니다. 기존에 Free Tail에 가입한 사람도 Always Free를 제공한다고 했는데, 제 경우에는 Always Free 서비스가 되지 않더군요. 기존에 이미 등록한 분에 대해서는 추후 확인하여 사용할 수 있는 방법을 알려드리겠습니다.

 

Oracle Free Tier에서 제공하는 서비스

  • 무제한 서비스(Always Free)
  • 30일 Free Trial(30-day Free Trial)

Always Free서비스는 다음의 제공받은 자원을 평생 제한없이 사용할 수 있습니다.

  • 1 OCPU와 20GB 스토리지를 가진 2개의 자율주행 데이터베이스(ATP, ADW)
  • 1/8 OCPU and 1 GB 메모리를 가진 VM 2개
  • 100GB Block Volume 2개.
  • 10 GB Object Storage.
  • 10 GB Archive Storage.
  • Load Balancer, 1 instance, 10 Mbps bandwidth.
  • Monitoring, 500 million ingestion datapoints, 1 billion retrieval datapoints.
  • Notifications, 1 million delivery options per month, 1,000 emails sent per month.
  • Outbound Data Transfer, 10 TB per month.

30-day Free Trial은 USD 300$ 크레딧을 30일간 무료로 제공하는 프로그램입니다

  • Compute  : 3,500 hours, 1.5 TB of storage. High-performance VMs and bare metal servers.
  • 112 million invocations and 20 million gigabyte memory-seconds of execution time.
  • Storage : 5 TB storage. Object and block storage to store and access data at scale.

사용 가능 서비스(별첨 참조)

30일이 경과하거나, 300불이 소진될 때까지 사용할 수 있습니다. 크레딧은 시간 단위로 계산됩니다.

오라클 클라우드 프리티어 신청 시 신용카드를 입력해야 합니다.

사용자 확인을 위해 오라클 싱가폴에서 1달러(SGD 1$)를 결제하고 바로 해당 결제를 승인취소합니다. 오라클 클라우드 트라이얼은 사용 기간과 크레딧이 한정된 서비스입니다. 30일 동안 제공된 크레딧을 초과하여 사용할 수 없습니다. 사용량 초과에 대한 신용카드 청구는 발생하지 않습니다.

오라클 클라우드 프리티어 신청

클라우드 프리티어 신청 페이지

오라클 클라우드 프리티어를 신청하기 위해서는 Email, 핸드폰번호, 신용카드가 필요합니다. 오라클 클라우드 프리티어 신청 홈페이지는 https://www.oracle.com 이나 https://cloud.oracle.com입니다.

1) https://www.oracle.com 접속하여 신청

아래 화면은 https://www.oracle.com 에 접속하여 ① 페이지이동 버튼을 클릭한 화면입니다. 아래 화면에서 [Start your trial today] 버튼을 클릭합니다. 또는 우측 상단의 [View Accounts] 버튼을 클릭한 후 [Sign Up for Free Cloud Tier]를 클릭합니다.

그림 1 : http://www.oracle.com

[Sign Up for Free Cloud Tier]를 클릭하면 아래의 화면이 나타나고 [Start for free] 버튼을 클릭합니다.

 

2) https://cloud.oracle.com 에 접속하여 신청

https://www.oracle.com 에 접속하여 [Sign Up] 버튼을 클릭합니다. 

https://www.oracle.com

 

위에서 설명한대로 진행했으면 아래와 같이 Email 계정과 국가선택, 약관동의 화면이 나타납니다.

 

 

계정생성

아래의 계정 생성 화면에서 국가/지역, 이름, 성, E-mail 입력 및 모든 이용약관에 동의한 후 [내 전자메일 확인] 버튼을 클릭합니다.

입력한 메일을 확인해 보면, "Confirm your Oracle cloud account" 제목으로 아래와 같은 메일이 수신됩니다. 저 같은 경우는 Junk 메일로 수신이 되었습니다. 수신 확인이 되지 않는 경우, Junk 메일도 확인해봐야 합니다. 메일 내용의 [Click here] 버튼을 클릭합니다. 링크는 30분 동안만 유효합니다.

[Click here] 버튼을 클릭하면 아래의 화면으로 이동합니다.

비밀번호, 회사이름, 대체회사 영어이름, 클라우드 계정 이름(오라클 클라우드 Sign in 할 때 사용하는 클라우드 계정명), 홈영역(클라우드 자원을 생성할 지역)을 입력하고 다시 이용약관에 동의한 후 [계속] 버튼을 클릭합니다.

주소정보 입력창이 나타납니다.  주소와 전화번호를 입력한 후 [계속] 버튼을 클릭합니다.

아래와 같은 화면이 나타나면 카드 등록을 위해 [지급 검증 방법 추가] 버튼을 클릭합니다.

지불수단 등록

위의 화면에서 [지급 검증 방법 추가] 버튼을 클릭하면 아래와 같이 지불수단을 등록하는 화면이 뜹니다. 클라우드 프리티어를 사용하려면 반드시 지불수단을 등록해야 하기 때문에 [Credit Card] 버튼을 클릭합니다.

카드는 Visa, Mastercard, Amex 만 가능합니다. 보유하고 있는 카드번호, 카드 유효년월, CVN을 입력한 후 [Finish] 버튼을 클릭합니다.

계정을 upgrade하지 않는 한 과금되지 않고, 인증을 위해 지불수단(카드)에 임시로 청구한 후 자동으로 취소됩니다. 핸드폰으로 오라클 싱카폴 해외승인과 해외취소 문자가 전송되는데 싱가폴 달러로 1.38달러(SGD 1.38)가 결제된 후 취소됩니다.

아래의 [Close] 버튼을 클릭합니다.

지불수단 검증이 완료되면 아래와 같이 "계약" 라디오 버튼이 활성화되고 클릭하면 [내 무료 체험판 시작하기] 버튼이 활성화됩니다. [내 무료 체험판 시작하기] 클릭하고 무료 체험판을 사용합니다.

[내 무료 체험판 시작하기] 클릭하면 아래와 같이 계정 설정 화면이 뜹니다. 계정 설정이 완료될 때까지 기다립니다.

계정설정 화면

계정 설정이 완료되면 아래와 같은 화면이 뜹니다. 자신의 역할과 관련 있는 분야를 선택합니다. 그냥 skip해도 됩니다. 

위 화면에서 [Skip] 버튼이나 [Save] 버튼을 클릭하면 아래와 같이 오라클 클라우드 화면이 뜹니다. 이 화면은 홈영역(Domain) 설정에 따라 다를 수 있습니다. 저같은 경우는 US East(Ashburn)을 홈영역으로 선택한 화면입니다.

클라우드 Account 계정에 대한 상세정보와 Sign in 링크가 포함된 메일과 오라클 클라우드 자원을 30일 동안에 SG 400$(싱가폴 달러)를 사용할 수 있다는 메일이 발송됩니다.

 

오라클 클라우드에 로그인하기

클라우드 프리티어 사용을 위한 클라우드 어카운드와 사용자계정을 생성했으면 https://cloud.oracle.com에 접속합니다. https://www.oracle.com 사이트에 접속해서 Sign in 해도 됩니다.

아래 화면에 Cloud Accont Name에 가입 시 생성한 Cloud Accont Name을 입력합니다.

[Next] 버튼을 클릭합니다.

아래 화면이 뜨는데 [Continue] 버튼을 클릭합니다.

 

오라클 프리티어 가입 시 입력했던 이메일주소와 비밀번호를 입력하고 [사인인] 버튼을 클릭합니다.

오라클 클라우드 콘솔에 접속한 화면입니다. Free Tier에서 제공하는 자원과 한달 동안 300$ 내에서 사용할 수 있는 자원을 사용하시면 됩니다. 추가로 OCI Certification 에 대한 무료 시험도 제공하고 있습니다.

오라클 클라우드 자원생성에 대한 내용은 아래 링크를 클릭하시면 됩니다.

오라클 클라우드 자원생성

'Oracle Cloud > Oracle Cloud 계정 생성' 카테고리의 다른 글

Oracle Cloud Free Tier(2020 ver.)  (0) 2020.01.27

Docker registry에 login하여 Oracle image를 검색한 후 원하는 컨테이너 이미지를 docker pull로 다운받아 사용한다.

참고로, 이 이미지는 multitenant DB(CDB, PDB)이다.

 

[ 수행환경 ]

- Microsoft Windows 10 Pro(10.0.19041 N/A 빌드 19041)

- WSL 2(Ubuntu 20.04.3 LTS)

- Docker Desktop version :  4.3.2

- SQL Developer 21.4.1

 

WSL 에 접속

윈도우 command 창이나 Window PowerShell 창에서 wsl 명령어를 수행하여 wsl에 접속한다. wsl에 접속한다는 것은 wsl 이 기동하는 Ubuntu Linux에 접속하는 것이다. 문서에서 "$" 표시는 wsl 접속된 상태를 의미한다.

PS D:\> wsl
username@computername:/mnt/d$

 

Oracle container 이미지 검색

dockerhub(https://hub.docker.com/)에 접속하여 검색창에 oracle19를 입력하여 oracle image를 검색한다. Oracle19.3c 버전의 image가 검색된다. 본 문서에서는 Docker image for Oracle Database 19c (19.3) Enterprise Edition 이미지인 banglamon/oracle193db 이미지를 docker pull로 다운받는다. 

 

docker login

Docker registry(dockerhub)에 login하는 명령어로 docker registry에 등록된 이미지를 pull하거나 push를 위해 login한다. docker login은 패스워드를 직접 입력하는 방식과 STDIN 을 사용해서 로그인하는 방식이 있는데 보안을 위해 STDIN 방식으로 로긴하는 것을 권장한다.

 

1) STDIN을 사용하면 shll history나 로그파일에 남는 것을 방지

아래 예제는 pass.txt 파일에서 패스워드를 읽어서 login하는 방식이다.

$ cat pass.txt | docker login -u <username> --password-stdin

 

2) 패스워드 직업 입력 login

$ docker login -u <username> -p <password>

 

docker pull

docker pull 명령어로 oracle datbase 19c 이미지를 다운로드한다.

 

$ docker pull banglamon/oracle193db:19.3.0-ee

docker pull

docker images

다운로드한 이미지 목록을 조회한다.

docker run

다운로드한 도커 이미지파일을 이용해서 컨테이너를 실행한다.

$ docker run -d --name oracle19db \
-p 1521:1521 \
-e ORACLE_SID=MONGO \
-e ORACLE_PDB=MONGOPDB \
-e ORACLE_PWD=Oracle123 \
-v /u01/app/oracle/oradata:/opt/oracle/oradata \
banglamon/oracle193db:19.3.0-ee

-d : deatach mode를 나타내며, -d=true 는 detached mode(background mode), -d=false는 foreground mode 로 수행

       -d 옵션만 쓸 경우는 -d=true와 동일

--name : 컨테이너 이름을 지정

-p, --publish : host port를 컨테이너 port로 게시, 앞쪽 port가 host port이고 뒤쪽 port가 컨테이너 port이다.

     ( 예, -p 1621:1521 로 설정하면 호스트에 1621 TCP port로 유입되는 모든 traffic은 컨테이너의 1521 port로 전달)

-e :  컨테이너의 환경변수를 설정. -e 옵션을 사용하면 Dockerfile의 ENV 설정도 덮어쓰게 된다.

    (예, -e ORACLE_SID=MONGO 는 오라클 컨테이너 환경변수 ORACLE_SID를 MONGO로 설정)

-v : 호스트와 컨테이너 간의 볼륨(volumn) 설정을 위해서 사용.

      호스트(host) 컴퓨터의 파일 시스템의 특정 경로를 컨테이너의 파일 시스템의 특정 경로로 마운트(mount)를 해준다.

      (Window : -v d:\temp )

      (Linux : /u01/app/oracle/oradata )

      윈도우에서 위의 명령어로 수행했는데도 오류가 발생하지는 않는다.

 

위 예제는 oracle193db 이미지로 detached mode로 컨테이너를 실행하고

host에 1521 port로 유입되는 traffic을 컨테이너의 1521 port로 전달한다는 명령어이다. (1521은 오라클 리스너 port ) 

docker run 명령어 실행

컨테이너 조회 - docker ps 

docker ps는 현재 실행중인 도커 컨테이너를 조회한다.

docker ps -a는 실행중인 컨테이너와 중지된 컨테이너 모두를 조회한다. 컨테이너가 생성된 것을 확인 할 수 있다.

컨테이너 로그 조회 - docker logs 

컨테이너 실행 명령어 수행 후 바로 컨테이너를 사용할 수 있는 것은 아니다. 컨테이너에 따라 컨테이너를 생성하는데 필요한 설정을 하고 컨테이너를 생성하는데 시간이 소요된다. 오라클 데이터베이스는 오라클 인스턴스와 데이터베이스에 필요한 파일들을 생성하는데 일정 시간이 소요된다. 컨테이너 생성 과정을 모니터링 하기 위해 

docker logs <container name or cotainer id> 명령어를 수행한다. 아래 화면은 DB 설치가 진행 중인 것을 보여주고 있다.

log의 마지막 줄에 "XDB initialized" 가 보이면 정상 설치된 것이다.

컨테이너 접속 - docker exec 

컨테이너 생성이 "XDB initialized" 메시지와 함께 정상적으로 완료되면,

docker exec -i -t <ontainer name or cotainer id> /bin/bash 명령어로 컨Docker 테이너에 접속할 수 있다.

$ docker exec -it oracle19db bash
  • -i, --interactive=false : 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지한다.
  • -t, --tty=false : TTY 모드(pseudo-TTY)를 사용한다. Bash를 사용하려면 이 옵션을 설정해야 한다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 셸이 표시되지 않는다.
  • ontainer name 을 oracle19db 로 입력한다.
  • bash : 컨테이너 안의 /bin/bash를 실행하여 Bash 셸에 연결한다

참고로 아래 명령어는 bash 쉘로 접속하고 /home/oracle/.bashrc을 수행한 후 oracle DB에 sqlplus /nolog로 접속한다.

이 명령어는 참고만 하고 개인적으로 수행해 본다.

<참고> docker exec -it oracle19db bash -c "source /home/oracle/.bashrc; sqlplus /nolog"

 

Oracle DB가 설치된 컨테이너에서 SQL 명령어 수행

$ sqlplus '/as sysdba'

SQL> select name from v$database;
NAME
---------
MONGO

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                          READ ONLY  NO
         3 MONGOPDB                       READ WRITE NO

## PDB에 접속
SQL> alter session set container=MONGOPDB;
Session altered.

## user 생성
SQL> create user docker identified by "docker123";

## 접속, resource 권한 부여
SQL> grant connect, resource to docker;

## users 테이블스페이스 사용 권한 설정
SQL> alter user docker quota unlimited on users;

Oracle client Tool로 DB 접속하기

Oracle Client Tool(SQL Developer, DBeaver, TOAD, Orange, Golden 등)로 컨테이너 DB 접속하기

 

SQL Developer로 Docker DB 접속하기

SQL Developer실행 후 좌측 상단의 [+] 를 클릭한 후 새 데이터베이스 접속 메뉴를 클릭한다.

데이터베이스에 접속하기 위해 아래의 화면에 각 항목을 입력한다.

- Name : 본인이 사용하자 하는 임의의 이름을 정한다.

- 사용자이름 : PDB에 생성한 사용자계정명을 입력한다. 예시에서는 docker를 입력한다.

- 비밀번호 : PDB에 생성한 사용자계정명을 입력한다. 예시에서는 docker123을 입력한다.

- 호스트이름 : Localhost 또는 127.0.0.1 또는 본인의 PC/서버 IP를 입력한다.

- 포트 : docker run 수행 시 지정한 host port를 입력한다.

- 서비스 이름 : 반드시 SID가 아닌 서비스명을 입력한다.

[테스트] 버튼을 클릭하여 정상 접속 여부를 확인한다. 올바르게 설정했으면 좌측 하단에 "상태 : 성공" 이라는 메시지가 출력된다.

접속 테스트를 성공했으면 [접속] 버튼을 클릭하여 PDB에 접속한다.

 

SQL DML 수행하기

SQL Developer의 SQL 작성창에 테이블생성, 데이터 입력 등을 할 수 있다.

 

sqlplus 로 Docker DB 접속하기

접속하고자는 PC나 서버에 오라클 Client가 설치된 경우에는 아래와 같이 접속할 수 있다.

 

sqlplus 사용자/패스워드@//host:port/service_name

 

host 앞의 '//' 문자는 IP를 입력할 경우 생략해도 된다. url을 입력할 경우에는 사용해야 하니, 평소 사용하는 습관을 들이는 것이 좋을 듯하다. port도 오라클 DB 기본 port인 1521인 경우에는 생략해도 되나, 습관적으로 사용하는 것이 좋겠다.

주의할 것은 service_name에는 반드시 SID가 아닌 service_name을 사용해야 한다.

SID를 사용할 경우 ORA-01017 : invalid username/password:login denied 오류가 발생한다. 

$ sqlplus docker/docker123@//127.0.0.1:1521/MONGOPDB

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Dec 25 02:26:49 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Last Successful login time: Sat Dec 25 2021 02:10:43 +00:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

 

관련글 : Docker 명령어

 

 

 

 

'ORACLE' 카테고리의 다른 글

AWS Oracle RDS 장애 - Library cache lock  (0) 2021.12.28
cardinality란 ?  (0) 2021.12.28
Oracle ADG AFFIRM/NOAFFIRM VS SYNC/ASYNC  (0) 2021.12.21
Oracle sequence cache  (0) 2021.12.21
Oracle RMAN  (0) 2021.12.17

Oracle ADG Affirm VS SYNC

 

SYNC and ASYNC

Specifies that network I/O is to be done synchronously (SYNC) or asynchronously (ASYNC) when archival is performed using the log writer process (LGWR).

 

Note:

When the primary database is in maximum protection mode or maximum availability mode, destinations archiving to standby redo log files and using the log writer process are automatically placed in SYNC mode.

Category SYNC ASYNC
Data type Keyword Numeric
Valid values Not applicable Not applicable
Default value Not applicable None
Requires attributes ... None LGWR
Conflicts with attributes ... ASYNC SYNC, LOCATION, ARCH
Corresponds to ... TRANSMIT_MODE column of the V$ARCHIVE_DEST view TRANSMIT_MODE and ASYNC_BLOCKS columns of the V$ARCHIVE_DEST view

Usage Notes

 

 

 

Table 5-2 Minimum Requirements for Data Protection Modes

  Maximum
Protection
Maximum
Availability
Maximum
Performance
Redo archival process LGWR LGWR LGWR or ARCH
Network transmission mode SYNC SYNC SYNC or ASYNC when using LGWR process. SYNC if using ARCH process
Disk write option AFFIRM AFFIRM AFFIRM or NOAFFIRM
Standby redo log required? Yes Yes No, but it is recommended

 

'ORACLE' 카테고리의 다른 글

cardinality란 ?  (0) 2021.12.28
도커(docker) container로 오라클 사용하기  (0) 2021.12.22
Oracle sequence cache  (0) 2021.12.21
Oracle RMAN  (0) 2021.12.17
ORACLE ATP DB 접속  (0) 2020.01.27

DB 정상/비정상 종료에 따른 Sequence cache 작용

시퀀스 최초 생성 시에 Oracle dictionary view에서 관리하는 last_number 값은 start 값이고,

시퀀스 nextval 로 최초 채번하면 last_number 값은 start 값 + cache 값이 된다.

DB의 정상/비정상 종료 시에 따라 last_number 값이 상이하게 관리된다.

- DB 정상 종료 시

cache와 상관없이 last_number는 sequence current 값 + 1 로 관리

 

- DB 비정상 종료 시

sequence의 last_number값 유지

 

 

시퀀스 cache 테스트

- 시퀀스 생성

SQL> CREATE SEQUENCE SEQ_CACHE
           START WITH 1

       INCREMENT BY 1
          CACHE 100;

 

- 시퀀스 조회

SQL> select sequence_name, last_number from user_sequences where sequence_name='SEQ_CACHE';

 

SEQUENCE_NAME                  LAST_NUMBER
------------------------------ -----------
SEQ_CACHE                                1

 

- 시퀀스 nextval

4번 채번하면 시퀀스 current value가 4가 된다.

 

SQL> select seq_cache.nextval from dual;

----------
         1

SQL> select seq_cache.nextval from dual;

----------
         2

SQL> select seq_cache.nextval from dual;

----------
         3

SQL> select seq_cache.nextval from dual;

----------
         4

 

- 시퀀스 last_number 조회

SQL> select sequence_name, last_number from user_sequences where sequence_name='SEQ_CACHE';


SEQUENCE_NAME                  LAST_NUMBER
------------------------------ -----------
SEQ_CACHE                              101

 

- DB 정상 종료 후 시퀀스 조회

SQL> shutdown immediate;

SQL> startup

 

SQL> select sequence_name, last_number from user_sequences where sequence_name='SEQ_CACHE';


SEQUENCE_NAME                  LAST_NUMBER
------------------------------ -----------
SEQ_CACHE                                5

 

- DB 비정상 종료 후 시퀀스 조회

SQL> shutdown abort;

SQL> startup

 

SQL> select sequence_name, last_number from user_sequences where sequence_name='SEQ_CACHE';

 

SEQUENCE_NAME                  LAST_NUMBER
------------------------------ -----------
SEQ_CACHE                              101

 

* CACHE값에 때문에 RAC에서긔 각각의 node에서 채번할 경우 채번값이 상이하다.

  CDC로 동기화할 경우 동기화 대상 node는 시퀀스값을 계속 증가하여 유지한다.

'ORACLE' 카테고리의 다른 글

도커(docker) container로 오라클 사용하기  (0) 2021.12.22
Oracle ADG AFFIRM/NOAFFIRM VS SYNC/ASYNC  (0) 2021.12.21
Oracle RMAN  (0) 2021.12.17
ORACLE ATP DB 접속  (0) 2020.01.27
Oracle ATP DB 생성  (0) 2020.01.27

+ Recent posts