728x90
728x90

Azure를 이용한 리눅스 VM 배포/연결 및 실습

  • Microsoft Azure를 이용하여 리눅스 실습을 진행해보자.

 

리눅스 VM 배포 및 연결

① Azure에서 가상 머신 만들기 및 배포

  • Azure 포털에 로그인한 후, 다음과 같이 가상 머신을 만들어준다.
설정 항목 리눅스 VM
리소스 그룹 RG##
가상머신 이름 vmlinux##
지역 East US
이미지 Ubuntu Server 22.04 LTS
크기 Standard_B2s
사용자 이름 myuser
인증 방식 암호: He*lo@owold123
공용 인바운드 포트 SSH(22), HTTP(80)
OS 디스크 유형 프리미엄 SSD
가상 네트워크 vnet-test
서브넷 snet-linux
부트 진단 사용 안 함
확장 N/A

 

Azure에서 리눅스 가상 머신을 생성한 모습

 

② SSH를 사용한 연결

  • 생성한 vmlinux## 리소스로 이동한다.
  • [설정] > [연결]  탭을 클릭한 후, [SSH] 항목에서 4번 항목을 확인한다. (myuser@IP주소)

 

  • 윈도우 혹은 맥의 터미널에서 아래의 명령을 실행하여 생성한 리눅스 서버로 접속한다.
> ssh myUser@**.**.***.***

 

  • Azure에서 VM을 생성할 때 적었던 비밀번호를 입력한다.
myUser@**.**.***.***'s password:

 

  • 성공적으로 접속이 되었는지 확인한다.

 

리눅스 실습하기

명령행 편집

  • 문자 지우기 : [←] 또는 [Delete]
  • 단어 지우기 : [Ctrl] + [W] (W : Word)
  • 행 지우기 : [Ctrl] + [U] (U : Underline)

 

명령과 옵션

  • 명령만 사용한 경우 : ls
  • 명령과 옵션을 사용한 경우 : ls -al

 

명령과 옵션, 인자

  • 명령과 인자를 사용한 경우 : ls /tmp
  • 명령, 옵션, 인자를 사용한 경우 : ls -al /tmp

 

기초 명령

  • date 명령 : 날짜와 시간을 출력한다.
  • clear 명령 : 화면을 지운다.
  • man 명령 : 명령 사용 방법을 화면에 출력한다.
  • passwd 명령 : 사용자 계정의 비밀번호를 변경한다.

 

셸 지정 및 변경

  • 사용자의 기본 셸은 /etc/passwd 파일에 저장된다.
  • chsh 명령을 사용하여 기본 셸을 변경할 수 있다.
$ grep Sunny /etc/passwd // 기본 셸 확인하기
Sunny:x:1000:1000:Ubuntu:/home/Sunny:/bin/bash
$ chsh -s /bin/sh Sunny // 기본 셀 변경하기
Password:
$ grep Sunny /etc/passwd // 변경된 셸 확인하기
Sunny:x:1000:1000:Ubuntu:/home/Sunny:/bin/sh
$ chsh -s /bin/bash Sunny // 기본 셸로 되돌리기

 

출력 명령

  • echo 명령 : 화면에 한 줄의 문자열을 출력한다.
  • printf 명령 : 자료를 형식화하여 화면에 출력한다.
    • 예) $ printf "linux ubuntu \n"

 

셸 변수 정의

  • 형식 : 변수명=문자열
  • 예) SOME=test

 

별칭

  • alias 명령 : 앨리어스를 생성한다.
  • 예) alias hs = history
  • 주의할 점 : 스크립트를 작성할 때는 앨리어스명을 쓰지 않고 정식 명칭을 사용해야 한다. (실행이 안될 수 있다.)

 

히스토리

  • history 명령 : 히스토리(명령 입력 기록)를 출력한다.

 

파일과 디렉터리

  • file 명령 : 파일의 종류를 알아보는 명령
    • 예) file .profile
  • ls 명령 : 디렉터리의 내용을 출력한다.
  • chmod 명령 : 파일이나 디렉터리의 접근 권한을 변경한다.
  • mkdir 명령 : 디렉터리를 생성한다.
  • rmdir 명령 : 디렉터리를 삭제한다.
  • cp 명령 : 파일이나 디렉터리를 복사한다.
    • -r 옵션 : 디렉터리를 복사할 때 지정한다.
  • mv 명령 : 파일 또는 디렉터리를 이동하거나 이름을 바꾼다.
  • rm 명령 : 파일을 삭제한다.
    • -r 옵션 : 디렉터리를 삭제할 때 지정한다.
    • -i 옵션 : 파일을 정말 삭제할 것인지 확인한다.
  • touch 명령 : 빈 파일을 생성한다.
    • -a 옵션 : 접근 시간만 변경한다.
    • -m 옵션 : 수정 시간만 변경한다.
  • grep 명령 : 지정한 패턴이 포함된 행을 찾는다.
    • -i 옵션 : 소문자, 대문자를 모두 검색한다.
    • -l 옵션 : 지정한 패턴이 포함된 파일명을 출력한다.
    • -n 옵션 : 행 번호를 출력한다.
  • find 명령 : 지정한 위치에서 검색 조건에 맞는 파일을 찾는다.
    • 검색 조건
      • -name filename : 파일명으로 검색한다.
      • -type 파일 종류 : 파일 종류로 검색한다.
      • -user loginID : 지정한 사용자가 소유한 모든 파일을 검색한다.
      • -perm 접근 권한 : 지정한 사용 권한과 일치하는 파일을 검색한다.
    • 동작
      • -exec 명령 {} \; : 검색된 파일에 명령을 실행한다.
      • -ok 명령 {} \; : 사용자의 확인을 받아서 명령을 실행한다.
      • -print : 검색된 파일의 절대 경로명을 화면에 출력한다. (기본 동작)
      • -ls : 검색 결과를 긴 목록 형식으로 출력한다.

 

입출력

  • > : 파일 리다이렉션(덮어쓰기)
  • >> : 파일에 내용을 추가
  • 2> : 표준 오류 메시지를 파일에 저장

 

프로세스 관리

  • ps 명령 : 현재 실행 중인 프로세스에 대한 정보를 출력한다.
  • kill 명령 : 지정한 시그널을 프로세스에게 보낸다.
    • 2 : 인터럽트 시그널 (Ctrl + C)
    • 9 : 프로세스를 강제로 종료
  • pkill 명령 : 프로세스 명령 이름으로 종료
  • pgrep 명령 : 지정한 패턴과 일치하는 프로세스의 정보를 출력한다.

 

디스크 관리

  • fdisk 명령 : 디스크의 파티션 생성, 삭제, 보기 등 파티션을 관리한다.
  • mkfs 명령 : 리눅스 파일 시스템을 만든다. 
  • mount 명령 : 파일 시스템을 마운트한다.
  • umount 명령 : 파일 시스템을 언마운트한다.
  • df 명령 : 디스크의 남은 공간에 대한 정보를 출력한다.

 

리눅스 VM에 데이터 디스크 추가하기

① 데이터 디스크 추가

  • Azure에서 생성한 가상 머신 리소스의 [디스크] 탭에 들어 간후, 새로운 디스크(DataDisk_1)를 생성한다.

  • VM에 연결된 디스크 확인하기
# lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"
sda 0:0:0:0 30G
├─sda1 29.9G /
├─sda14 4M
└─sda15 106M /boot/efi
sdb 0:0:0:1 4G
└─sdb1 4G /mnt
sdc 1:0:0:0 4G

 

② 디스크 포맷 및 검증

# sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
# sudo mkfs.xfs /dev/sdc1
# sudo partprobe /dev/sdc1

 

③ 디스크 마운트

# sudo mkdir /datadrive1
# sudo mount /dev/sdc1 /datadrive1
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 29G 1.6G 28G 6% /
devtmpfs 449M 0 449M 0% /dev
tmpfs 454M 0 454M 0% /dev/shm
tmpfs 91M 964K 90M 2% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 454M 0 454M 0% /sys/fs/cgroup
/dev/loop0 64M 64M 0 100% /snap/core20/1852
/dev/loop2 54M 54M 0 100% /snap/snapd/18933
/dev/loop1 92M 92M 0 100% /snap/lxd/24061
/dev/sda15 105M 6.1M 99M 6% /boot/efi
/dev/sdb1 3.9G 28K 3.7G 1% /mnt
tmpfs 91M 0 91M 0% /run/user/1000
/dev/sdc1 4.0G 61M 4.0G 2% /datadrive1

 

# cd /datadrive1/
# sudo touch test
# ls
test

 

④ 부팅 후 디스크 유지를 위해 /etc/fstab 파일에 추가

[1] 새 드라이브의 UUID 확인

# sudo blkid
/dev/sdb1: UUID="6ee7f013-51f1-446d-80b2-bc4392bec460" TYPE="ext4" PARTUUID="92865292-01"
/dev/sda1: LABEL="cloudimg-rootfs" UUID="1937f012-ef27-469a-8f75-8d63a6a39aa0" TYPE="ext4" PARTUUID="73105be2-2d95-40d8-bb8a-5454f56ccc0b"
/dev/sda15: LABEL_FATBOOT="UEFI" LABEL="UEFI" UUID="B06C-6E89" TYPE="vfat" PARTUUID="fdd00ae2-94f3-4b6a-a9b6-6f6612f42a26"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/sda14: PARTUUID="dcc78ecf-19e8-4e28-83d4-53a9a38e3bcb"
/dev/sdc1: UUID="ad19689d-a77c-446e-988e-43f18682f625" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="a17fdda0-4069-46e5-aa6d-38ddb675a4e3"

 

[2] 텍스트 편집기에서 /etc/fstab 파일 열기

# sudo nano /etc/fstab

 

[3] fstab 파일 마지막에 추가할 내용 예시

UUID=3333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e /datadrive xfs defaults,nofail 1 2

 

vi 편집기

 

NGINX 설치 및 샘플 페이지 생성하기

NGINX란?

  • 가벼우면서도 강력한 프로그램을 목표로 러시아에서 개발되어 현재는 미국에서 운영중인 오픈 소스 웹 서버 프로그램이다. 
  • '엔진엑스'라고 읽는다. 
  • HTTP와 리버스 프록시, IMAP/POP3 등의 서버 구동이 가능하다. 
  • Java 서블릿은 대개 Apache의 Tomcat을 연동해서 구동하고, PHP의 경우 PHP-FPM(FastCGI Process Manager)을 연동해서 구동한다.

 

NGINX - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권

namu.wiki

 

패키지 소스 업데이트

$ sudo apt-get -y update

 

NGINX 설치

$ sudo apt-get -y install nginx

 

  • NGINX를 설치한 후, 제대로 실행되고 있는지 확인하기 위해 다음의 명령을 실행한다.
$ ps -ef
root 2630 1 0 10:20 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process o
www-data 2633 2630 0 10:20 ? 00:00:00 nginx: worker process

 

  • 다음의 명령을 실행하여 nginx가 작동하고 있는지 확인해본다.
$ curl http://localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>

 

  • Azure에서 배포한 리눅스 VM의 내부 IP 주소를 본인 PC의 브라우저 검색창에 입력하고 실행한다. 그러면 nginx 초기 화면이 뜨는 것을 확인할 수 있다.
$ ifconfig

 

index.html 파일 만들기

  • 다음의 명령들을 차례로 실행한다.
$ fileName=/var/www/html/index.html
$ sudo sh -c "echo 'Running Sample Web from host $(hostname)'>${fileName}"

 

  • 그리고 개인 PC의 웹 브라우저의 검색창에 리눅스 VM 아이피 주소를 입력하고 실행한다. 수정한 내용이 반영 것을 확인할 수 있다.

수정한 내용이 반영된 모습

 

  • 다음 명령을 입력하면 nginx가 돌아가고 있는 프로세스가 몇 개인지 확인할 수 있다.
$ ps -ef | grep nginx

 

  • 다음 명령을 입력하면 nginx와 관련된 프로세스들 모두 종료시킬 수 있다.
$ sudo pkill nginx

 

  • nginx를 다시 실행하려면 다음과 같이 명령을 입력한다.
$ sudo nginx

 

VS Code로 원격 리눅스 VM에 SSH 연결 구성하기

① VS Code 설치

VS Code를 설치할 때 해당 옵션들을 모두 체크해준다.

 

② VS Code에서 Remote-SSH 확장 설치하기

Remote - SSH Extension을 설치해준다.

 

③ VS Code에서 원격 리눅스 VM 연결하기

  • Remote-SSH 설치 후, [F1] (또는 [Ctrl] + [Shift] + [P])을 누른다. 그리고 ssh를 입력한 후, Remote-SSH: Connect to Host...를 클릭한다.

 

  • [Add New SSH Host...] 항목을 클릭한다.

 

  • Azure에서 배포한 리눅스 VM의 계정명(name)과 IP주소를 입력한 후, [Enter] 버튼을 누른다.

 

  • 상단의 C:\Users\계정명\.ssh\config 항목을 클릭해준다. 그러면 C:\Users\계정명\.ssh 디렉터리에 config 파일을 저장하게 된다.
    • config 파일에는 원격으로 연결할 서버 정보가 들어가 있다.

 

  • 다시 [F1](또는 [Ctrl] + [Shift] + [P])을 누르고 ssh를 입력하여 Remote-SSH: Connect to Host... 항목을 클릭한다.

 

  • 원격 리눅스 VM의 아이피 주소가 적힌 항목을 클릭한다.

 

  • 새로운 VS Code 창이 뜨고, 패스워드를 입력하라는 창이 뜬다. 원격 리눅스 VM의 사용자 계정 비밀번호를 입력한다.

 

  • 터미널을 열면([Ctrl] + [Shift] + [`]) 자동으로 원격 리눅스 VM으로 연결이 되는 것을 확인할 수 있다.

 

④ 디렉터리 및 파일 생성해보기

  • VS Code에서 원격 리눅스 VM에 연결한 상태에서, 터미널을 통해 디렉터리와 파일을 생성해본다.

lab 디렉터리를 생성하고 hello.py 파일을 생성한 모습

 

  • 이와 같은 방법으로 VS Code를 사용하여 원격 저장소를 편하게 관리할 수 있다.

 

Azure CLI / PowerShell on Linux

  • 리눅스에서 Azure를 셸(Shell)로 관리하려면 Azure CLIAzure PowerShell이 설치되어 있어야 한다.
  • 대부분의 고수들은 Azure CLIAzure PowerShell을 이용하여 Azure를 다룬다.

 

① Azure CLI 설치 및 확인하기

  • Azure CLIBash 스타일로 Azure를 다룰 수 있다.
 

Linux에 Azure CLI 설치

Linux에서 Azure CLI를 수동으로 설치하고 실행하는 방법을 알아봅니다. 하나의 명령 또는 단계별 프로세스를 통해 Linux 컴퓨터에 Azure CLI를 설치할 수 있습니다.

learn.microsoft.com

 

  • 다음 명령을 입력하여 Azure CLI를 설치한다.
$ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

 

  • 설치가 완료되면 다음 명령을 입력해서 Azure CLI가 제대로 설치되어 있는지 확인한다.
$ az --version
azure-cli 2.48.1
core 2.48.1
telemetry 1.0.8
Dependencies:
msal 1.20.0
azure-mgmt-resource 22.0.0
Python location '/opt/az/bin/python3'
Extensions directory '/home/myuser/.azure/cliextensions'
Python (Linux) 3.10.10 (main, Apr 25 2023, 04:23:10) [GCC 11.3.0]
Legal docs and information: aka.ms/AzureCliLegal
Your CLI is up-to-date.

 

 

② Azure PowerShell 설치 및 확인하기

  • Azure PowerShellPowerShell 문법 스타일로 Azure를 다룰 수 있다.
 

Linux에 Azure PowerShell 설치

Linux에서 Azure PowerShell 설치하고 실행하는 방법을 알아봅니다. 하나의 명령으로 Linux에 Azure PowerShell 설치할 수 있습니다.

learn.microsoft.com

 

  • 다음 명령을 입력하여 Azure PowerShell을 설치한다.
// # Update the list of packages
$ sudo apt-get update
// Install pre-requisite packages.
$ sudo apt-get install -y wget apt-transport-https software-properties-common
// Download the Microsoft repository GPG keys
$ wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
// # Register the Microsoft repository GPG keys
$ sudo dpkg -i packages-microsoft-prod.deb
// Delete the the Microsoft repository GPG keys file
$ rm packages-microsoft-prod.deb
// Update the list of packages after we added packages.microsoft.com
$ sudo apt-get update
// # Install PowerShell
$ sudo apt-get install -y powershell
// Start PowerShell
$ pwsh
// Install Azure PowerShell Module
$ Install-Module -Name Az -AllowClobber

 

  • pwsh 명령을 입력하면 다음과 같이 Azure PowerShell로 진입하게 된다.
$ pwsh
PowerShell 7.3.4
PS /home/myuser> // PowerShell 진입

 

  • 다음 명령을 입력하여 Azure PowerShell 모듈이 설치되었는지 확인한다.
$ get-module -ListAvailable Az*
Directory: /home/myuser/.local/share/powershell/Modules
ModuleType Version PreRelease Name PSEdition ExportedCommands
---------- ------- ---------- ---- --------- ----------------
Script 9.7.1 Az Core,Desk
Script 2.12.2 Az.Accounts Core,Desk {Disable-AzDataCollection, Disable-AzCon…
Script 2.0.0 Az.Advisor Core,Desk {Disable-AzAdvisorRecommendation, Enable…
Script 5.4.0 Az.Aks Core,Desk {Get-AzAksCluster, New-AzAksCluster, Rem…
Script 1.1.4 Az.AnalysisServices Core,Desk {Resume-AzAnalysisServicesServer, Suspen…
Script 4.0.2 Az.ApiManagement Core,Desk {Add-AzApiManagementApiToGateway, Add-Az…
Script 1.2.0 Az.AppConfiguration Core,Desk {Get-AzAppConfigurationStore, Get-AzAppC…
Script 2.2.2 Az.ApplicationInsights Core,Desk {Get-AzApplicationInsights, Get-AzApplic…
Script 2.0.0 Az.Attestation Core,Desk {Get-AzAttestationPolicy, Set-AzAttestat…
Script 1.0.0 Az.Automanage Core,Desk {Get-AzAutomanageBestPractice, Get-AzAut…
Script 1.9.1 Az.Automation Core,Desk {Set-AzAutomationPython3Package, New-AzA…
Script 3.4.0 Az.Batch Core,Desk {Remove-AzBatchAccount, Get-AzBatchAccou…
Script 2.0.1 Az.Billing Core,Desk {Get-AzBillingInvoice, Get-AzBillingPeri…
Script 2.1.0 Az.Cdn Core,Desk {Clear-AzCdnEndpointContent, Clear-AzFro…
Script 1.2.0 Az.CloudService Core,Desk {Get-AzCloudService, Get-AzCloudServiceI…
Script 1.13.1 Az.CognitiveServices Core,Desk {Get-AzCognitiveServicesAccount, Get-AzC…
Script 5.7.1 Az.Compute Core,Desk {Remove-AzAvailabilitySet, Get-AzAvailab…
Script 1.0.0 Az.ConfidentialLedger Core,Desk {Get-AzConfidentialLedger, New-AzConfide…
Script 3.2.0 Az.ContainerInstance Core,Desk {Add-AzContainerInstanceOutput, Get-AzCo…
Script 3.0.4 Az.ContainerRegistry Core,Desk {New-AzContainerRegistry, Get-AzContaine…
Script 1.10.1 Az.CosmosDB Core,Desk {Get-AzCosmosDBSqlContainer, Get-AzCosmo…
Script 1.1.0 Az.DataBoxEdge Core,Desk {Get-AzDataBoxEdgeJob, Get-AzDataBoxEdge…
Script 1.5.0 Az.Databricks Core,Desk {Get-AzDatabricksAccessConnector, Get-Az…
Script 1.16.13 Az.DataFactory Core,Desk {Set-AzDataFactoryV2, Update-AzDataFacto…
Script 1.0.2 Az.DataLakeAnalytics Core,Desk {Get-AzDataLakeAnalyticsDataSource, New-…
Script 1.3.0 Az.DataLakeStore Core,Desk {Get-AzDataLakeStoreTrustedIdProvider, R…
Script 1.2.0 Az.DataProtection Core,Desk {Backup-AzDataProtectionBackupInstanceAd…
Script 1.0.1 Az.DataShare Core,Desk {New-AzDataShareAccount, Get-AzDataShare…

 

참고

  • 도커(Docker)쿠버네티스(Kubernetes) 작업을 할 때, Azure 포털이 아닌 Azure CLIAzure PowerShell을 이용하여 작업한다.
728x90
728x90

Azure를 이용한 리눅스 VM 배포/연결 및 실습리눅스 VM 배포 및 연결① Azure에서 가상 머신 만들기 및 배포② SSH를 사용한 연결리눅스 실습하기명령행 편집명령과 옵션명령과 옵션, 인자 기초 명령셸 지정 및 변경출력 명령셸 변수 정의별칭히스토리파일과 디렉터리입출력프로세스 관리디스크 관리리눅스 VM에 데이터 디스크 추가하기① 데이터 디스크 추가② 디스크 포맷 및 검증③ 디스크 마운트④ 부팅 후 디스크 유지를 위해 /etc/fstab 파일에 추가[1] 새 드라이브의 UUID 확인[2] 텍스트 편집기에서 /etc/fstab 파일 열기[3] fstab 파일 마지막에 추가할 내용 예시vi 편집기NGINX 설치 및 샘플 페이지 생성하기NGINX란?패키지 소스 업데이트NGINX 설치index.html 파일 만들기VS Code로 원격 리눅스 VM에 SSH 연결 구성하기① VS Code 설치② VS Code에서 Remote-SSH 확장 설치하기③ VS Code에서 원격 리눅스 VM 연결하기④ 디렉터리 및 파일 생성해보기Azure CLI / PowerShell on Linux① Azure CLI 설치 및 확인하기② Azure PowerShell 설치 및 확인하기참고