Azure에서 ubuntu 가상 머신을 만들기

->검토+만들기


가상머신 접속하기

 

cmd로 명령 프롬프트 열기. ssh만 치고 입력했을 때 '알수없는 명령입니다' 이런거 안뜨면 ssh 쓸 수 있다는 것이다.

 

이제 애저 포탈 우분트 가상머신으로 와서 연결 누르고 SSH 누르고 4번 항목에 아이디 @ IP주소 부분 복사해서 cmd에서 ssh + 복붙하고 로그인하기

 

 

ssh? 우리가 접속하는데 사용한 ssh는 secure shell의 줄임말로 통신을 할 때 암호를 걸어서 보내고 받을 때 암호를 풀어서 받는 방식(프로토콜)이다.

 

    이 과정까지는 도커를 사용하기 위해 이제 리눅스 환경을 만든 것이다.

이제 우분투나 리눅스 환경에 들어오면 습관적으로 apt-get undate (리눅스 최신 버전 설치)해줘라. permission denied가 뜨면 권한을 얻기 위해 sudo apt-get update 명령을 줘라.(이때 권한이 처음에 없는 이유는 보안때문이다. $ 상태가 붙으면 권한없는 평민 상태라는 거고 #이면 내가 최고권한자라는 이야기. 내가 권한없는 평민일때 가끔 권한이 필요하면 sudo라는 명령을 쓰는 것이다. sudo는 'super user do' 의 약자이다)

    sudo apt-get upgrade도 해줘라

그 후 docker 입력해보면 docker는 없지만 설치할 수 있다고 뜬다 . 그렇지만 이렇게 설치안할 거임.

 

sudo apt-get update 

sudo apt-get upgrade

 


도커 설치

 

(1)Docker 패키지를 설치하기 위해 필요한 의존성 패키지들을 설치

sudo apt-get install \
apt-transport-https \ #웹통신관련

ca-certificates \ # 인증관련

curl \ # 여기부터는 도커에 필요한 오픈소스

gnupg \   

lsb-release

 

( \는 명령어가 길 때 다음줄로 연결된다는 뜻) 

sudo apt-get install \
apt-transport-https \
ca-certificates \ 
curl \ 
gnupg \   
lsb-release

 

 

 

(2) 이제 컨테이너를 사용을 할 때 pc에서 개발이 끝나면 실제 서버에 보내야하는데 바로 다이렉트로 컨테이너를 보내면 안되고 준비가 필요하다. 그 중간과정이 필요하고 '컨테이너 repository'라고 부른다. 컨테이너를 레포지토리에 다시 저장하고 서버는 레포지토라에서 다운로드하여 사용하는 것이다. 레포지토리는 내 컴퓨터에도 만들 수도 있고 클라우드나 별도의 서비스를 이용해서 만들 수도 있다. 마이크로소프트 애저 안에도 이런 서비스가 있다(ACR = AzureConrainerRepository)또 깃허브와 비슷한 기능을하는 DockerHub를 이용할 수도 있다.

도커가 어느 레포지토리를 바라보는지 알아야함 아래 echo로 시작하는 명령이 레포지토리를 지정하는 건데 보면 docker hub에 연결되어 있음( ~> /dev/null)

 

이제 도커 엔진을 설치해보자(복잡하면 공식 문서 참조, 한줄한줄 카피해라..)

sudo apt-get update 부터 다시시작

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

이제 이명령어 쓰면 설치된다. 이제 docker 쳐보면 커맨드옵션이 뜨면서 도커가 잘 설치된 것을 알 수 있다.

 

 

 

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 

 

echo \ 
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ 
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 

 

sudo apt-get update 


#여기까지 완료하면 도커 시스템 설치완료
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

https://docs.docker.com/engine/install/ubuntu/ 이 공식문서에서 2번 3번 과정까지 복붙해준다-이제 필요한 환경설치 완료

 

 

Install Docker Engine on Ubuntu

 

docs.docker.com

  • sudo apt-get update 할때 멀쩡히 아래 뜨면 잘 설치된것
  • docker --version 쳤을 때 잘 나오면 설치 완료

(4) 권한 변경

이제 다음 명령어를 쳐봐라 docker run hello-world 권한 거부가 될 것이다. 근데 매번 sudo를 할 수는 없으니 sudo를 빼고 실행할 수 있도록 해보자.

유저모드 바꾸기로 일반 유저들에게도 권한을 주겠다는 명령 : sudo usermod -a -G docker $USER

재실행해야 모드변경 적용되기 때문에 sudo service docker restart 해서 시스템 다시 재시작하고 exit 해서 재로그인도 해준다(애저에서 아이디 ip복붙)

sudo usermod -a -G docker $USER

sudo service docker restart 

exit

이제 docker run hello-world도 실행이 될 것이다 (이 명령 실행된 것을 보면 pull로 어디서 파일을 가져오고 hello-world라는 image 가져온 것을 알 수 있다. 즉 이 명령은 docker run-도커를 실행시켜라 hello-world라는 것을. 근데 실행된 걸 보면 우리 pc에는 hello-world라는 이미지가 없다, 그래서 레포지토리(도커 허브)에서 가져온 것이다.이제 이걸 가지고 컨테이너를 실행시킬 수 있다. )


필요한 이미지만 내쪽으로 땡겨오기 docker pull --help 도커 명령어등 보기 docker --version 도커 버전보기

docker pull ubuntu:18.04 필요한 이미지(ubuntu)태그, 즉 버전(18.04)과 함께 작성(Digest 이미지의 고유번호) 이제 내 리눅스에 우분트 18.04 버전이 설치된 것이다.

이제 컨테이너가 있으면 컨테이너를 만들 수 있는 파일 형태를 이미지라고 부른다. 그럼 이제 현재 로컬에 몇개 이미지가 있는지 확인해보자.

로컬에 어떤 이미지 있는지 확인 docker images 여기 용량이 작은 이유는 통용되고 있는 기술을 제외한 이 버전의 이미지(우분투18.04)에만 있는 특성만 저장하기 때문이다.

이건 리눅스 프로세스 명령, 뭐가 돌아가고 있는지 확인, ps 이 명령어 결과 중 PID는 각각의 프로세스에 부여된 고유한 번호이고, 만약 이상한 프로세스가 있으면 고유 번호로 죽일 수 있다. TTY는 터미널을 의미하는데 터미널 몇번에서 작업하는지 알려주고 있다(예전엔 컴퓨터 하나에 여러개 컴퓨터 연결하여 터미널 여러개로 사용했기 때문).

어떤 도커 돌아가는지 보자 docker ps

모든 정보 보기 docker ps -a

가지고 있는 이미지 실행, 이름도 지어준다 docker run --name demo1 -it ubuntu:18.04 /bin/bash

이제 경로가 바뀌었을 것이다 -it는 인터렉티브 터미널이란 뜻의 명령으로 해당되는 도커에 들어가서 명령어를 칠수 있게 해준다. ubuntu18.04 를 실행하고 / bin/bash ..bin은 실행파일이 모인 파일이고 여기있는 bash 쉘 프로그램을 실행한다는 뜻도 붙여주었다.

이제 $가 아닌 #이 붙음으로써 최고권한자로 이 우분투18.04버전 컨테이너 안에 들어온 것을 알 수 있다.

apt-get update apt-get upgrade

해주기

필요하면 컨테이너를 여러개 실행시킬 수도 있다.또 만약 여기서 빠져나가고 싶으면

exit로 나가서 host os (애저에서 선택한 우분투20.14??)버전으로 돌아감


윈도우즈 cmd에서 'dir'이나 'cd 경로' 명령 등을 입력하면 처리해주는 건 명령어 안에 cmd라는 애가 빡세게 일해주고 있기 때문이다.(cmd.exe 예전엔 command.com였음)

이런 명령어 처리기가 운영체제마다 모두 있다. 리눅스나 유닉스 경우에는 born 혹은 bash 같은 것들이 그 역할을 한다. born shell같은 경우에는 요즘 거의 안쓰고 bash shell을 쓴다.


exit 해서 host os로 나가기 docker ps 해서 컨테이너 실행중인거 있는지 확인-도커는 끊으면 종료가 돼서 아마 아무것도 없을 것이다. 근데 만약 웹서비스를 만들어 배포하면 계속 돌아야하는건 어떻게 만들까?

docker run -it -d --name demo2 ubuntu:18.04

-d는 daemon의 약자 : 도커가 계속 메모리 상에 계속 끊기지 않고 돌아야할 때, 어떤 서비스등을 만들 때 사용

이제 docker ps 하면 계속 돌아가는 거 알 수 있다. 도커에 접속을 해보자 , 명령 처리할 쉘도 정해주기

docker exec -it demo2 /bin/bash

이제 demo2 컨테이너에 들어간 것이다 다시 exit로 나가도 docker를 daemon으로 실행시켜서 죽지 않는다.

docker ps -a 실행시켜서 도커들 히스토리부터 현재까지 보면 up 상태인거 있을 텐데 (demo2) 메모리 상에 올려져 있다는 뜻이다.


앱에서 웹서버에 요청을 하는 구조 만들 때 예시

어떤 서비스를 만들려고 한다면 일단 웹서버가 필요할 것이다. ubuntu20.04 버전을 사용한다고 가정하고 여기 웹서버를 설치한다 그후 데이터베이스는 ubuntu22,04이고 데이터베이스는 mySQL을 설치했다고 해보자. 그러면 도커 컨테이너에 이미지를 만들어넣는다. 그럼 웹서버 이미지를 가지고 런해서 웹서버를 하나 만들것이다(web01) 그럼 이제 데이터 베이스도 우분투 위에 mySQL 가지고 db01 이미지를 따로 만들고 할 것이다. 이런식으로 시스템을 구축하다 보니 이 서비스에 사용자가 늘어 컨테이너 용량이 부족할 수도 있다. 그러면 이제 컨테이너를 늘려주는 것이다. web02~web10 이러면 웹 트래픽을 분산처리할 수 있게 된다.

이렇게 도커를 관리하는 일이 필요해지며 쿠버네티스가 나오게 되었다. 쿠버네티스 자체가 작은 클라우드라고 할 수 있다.


도커에 로그 확인 docker logs demo1 모든 기록을 보여준다.

busybox라는 이미지 파일 다운로드, 조건이 true인 이유는 내가 탈출할 코드를 안넣으면 무한 반복, echo를 통해 계속 시간을 찍어주라는 간단한 스크립트. 그래서 sleep 1은 1초동안 쉰다.

docker run --name demo3 -d busybox sh -c "while true;do $(echo date);sleep 1;done"

docker logs demo3 해보면 1초에 각각의 일 볼 수 있다.

docker logs demo3 -f -f는 follow 모드로 1초에 한번씩 이 도커가 뭐하는지 알려준다-시스템 모니터링, 끝내야할 때는 crtl + c (^C)


docker ps로 도커 몇개 돌아가나 보기 (위에 과정을 겪었으면 daemon모드로 실행한 demo2, demo3이 살아있다)

중단시키는 명령은 docker stop demo3 명령잘 끝났으면 demo3 출력, 이제 메모리상의 도커를 멈춘것이다.

docker ps -a 해보면 이제 멈춘 도커들이 보인다.

그동안엔 우분투18.04버전(이미지)으로 demo(이미지가 메모리 상에 올라와 컨테이너가 되었다)를 만들어 up(실행했다가) 자금 stop으로 메모리 상에 정지시켜둔 것이다.

컨테이너를 아예 지우려면 어떻게 할까?

docker rm demo3 (메모리상 컨테이너만 삭제) 그 후 docker ps -a로 지워졌는지 확인

컨테이너 이름이 없을 때는? docker ps -a 옵션에 임의로 지어진 이름이 있으니 이걸 보고 지워라

또 안쓰는 이미지들도 용량을 차지하니 삭제할 필요가있다 지금 있는 이미지 확인하기

docker images

이미지를 삭제라는건

docker rmi hello-world(이미지 이름) => 에러가 난다면 컨테이너로 사용되는 게 있는 이미지는 삭제가 안되기 때문에 먼저 컨테이너 모두 삭제해줘야한다.

태그(버전) 있는 건 정확히 입력해 삭제할 것, 아니면 무조건 최신 것을 삭제함 docker rmi ubuntu:18.04

docker rmi busybox


docker를 사용할 때 docker file이 쌓여 커지면 감당이 안될 수도 있다. 그래서 도커는 도커 우분투 이미지파일이 하나 있고 이걸로 우분투 20.04 컨테이너를 만들려고 한다면 메모리에 절반정도는 우분투 20.04버전으로 채우고 남은 반의 반은 web01:0.1 버전으로 만들고 그 위에 또 web01:0.2 버전을 또 만들 수 있고.. 형태를 레포지토리에 퇴적층처럼 차곡차곡 쌓이게 했다 그래서 쌓인 부분 중에서 필요한 부분만 다운로드하게 해서 훨씬 더 가볍게 되어있다.

그래서 이미지 삭제를 할 때 보면 두개가 삭제된 기록을 볼 수 있는데 이건 즉 여러 퇴적층을 다 삭제해서 그렇다.


이제 도커 파일도 만들 수 있어야하고 도커 이미지도 만들어야함..

 

<도커 이미지 만들기>

이를 위해선 vi 명령어를 알아야 한다. vi는 일종의 에디터로 텍스트 편집기다

vi test.txt 이 파일에서 vi 에디터 시작하기

insert(편집) 모드로 바꾸기 = i 이제 내용을 입력할 수 있음, 그러나 편집모드는 글만 다루는 곳으로 저장할 수 없다.

파일을 저장하려면 저장명령을 내려야 한다.-> command mode로 나와야함

command mode로 바꾸기 = esc

저장을 위해서는 아래쪽에 :w (써라)명령 쓰기, 엔터. 그럼 저장이 된 것이다. :q 는 vi 모드를 탈출

 

이제 ls해보면 내가 만든 파일이 생길 걸 볼 수 있다.

append (편집)모드로 바꾸기 = a i는 앞에 a는 뒤에 덧붙이는 것

내용을 바꾸고 저장안하고 나가려고하면 경고뜬다.

:wq 저장하고나가거나 아니면 :q! 무시하고 나간다

 

vi 에디터 나간 상태에서 파일 내용 보기는 cat (파일.확장자)

 

 

'Linux' 카테고리의 다른 글

Docker(4) vi 에디터를 이용해서 docker 만들기  (0) 2023.05.02
Docker(3) vi editor 기본  (0) 2023.05.01
Docker(1)  (0) 2023.05.01
리눅스의 셸, 파일 디렉토리  (1) 2023.04.28
Linux os 시작  (0) 2023.04.27

+ Recent posts