728x90

유튜브 무료 강의인 따배도가 마지막 강의입니다. 무료 강의이지만 퀄리티가 무료 강의를 넘어서는 강의이고 도커가 처음이신 분 도커에 대해 공부하고 싶은 분, 취준생분들 모두 추천합니다.

https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=1 

토커 컴포즈란?

여러 컨테이너를 일괄적으로 적용하고 실행할 수 있는 툴

  • 하나의 서비스를 운영하기 위해서는 여러개의 애플리케이션이 동작해야 한다.
  • 컨테이너화 된 애플리케이션들을 통합 관리할 수 있다.

docker-compose 기본 명령어

docker-compose 기본 명령어

version : compose 버전 버전에 따라 지원 문법이 다름
service : 컴포즈를 이용해서 실행할 컨테이너 옵션 정의
build : 컨테이너 빌드
image : compose를 통해 실행할 이미지를 지정
command : 컨테이너에서 실행 될 명령어 지정
port : 컨테이너가 공개하는 포트 나열
link : 다른 컨테이너와 연계할 때 연계할 컨테이너 지정
expose : 포트를 링크로 연계된 컨테이너에만 공개할 포트
volumes : 컨테이너에 볼륨을 마운트
environment : 컨테이너에 적용할 환경변수를 정의
restart : 컨테이너가 종료 될 때 적용할 restart 정책
	no : 재시작 되지 않음
	always : 컨테이너를 수동으로 끄기 전까지 항상 재시작
	on-failure : 오류가 있을시에 재시작
depends_on : 컨테이너 간의 종속성을 정의 정의한 컨테이너가 먼저 동작되야함

docker-compose로 동작시키는 웹서버

1단계 : 도커 컨테이너가 사용할 서비스 디렉터리부터 만들어줘야 한다.

  • mkdir webserver
  • cd webserver

2단계 : docker-compose.yml 생성

3단계 : docker-compose 명령어

  • docker-compose up -d
  • docker-compose ps
  • docker-compose scale mysql=2
  • docker-compose ps
  • docker-compose down

docker-compose 명령어

도커 컴포즈 명령어

up : 컨테이너 생성/시작
ps : 컨테이너 목록 표시
logs : 컨테이너 로그 출력
run : 컨테이너 실행
start : 컨테이너 시작
stop : 컨테이너 정지
restart : 컨테이너 재시작
pause : 컨테이너 일시정지
unpause : 컨테이너 재개
port : 공개포트번호 표시
config : 구성확인
kill : 실행중인 컨테이너 강제 정지
rm : 컨테이너 삭제
down : 리소스 삭제

ex) docker-compose scale 서비스 이름 = 개수
docker-compose run 서비스 이름 실행 명령어
docker-compose logs 서비스 이름
docker-compose up -d
docker-compose ps
docker-compose scale mysql=2
docker-compose ps
docker-compose down
docker-compose down - -volumes 볼륨까지 지워진다.

빌드와 운영

1단계 : 도커 컨테이너가 사용할 서비스 디렉터리부터 만들어줘야 한다.

  • mkdir webserver
  • cd webserver

2단계 : 빌드를 위한 dockerfile 생성

3단계 : docker-compose.yml 생성

4단계 : docker-compose 명령어

  • docker-compose up -d
  • docker-compose ps
  • docker-compose scale mysql=2
  • docker-compose ps
  • docker-compose down
728x90
728x90

컨테이너 간 통신(네트워크) 명령어

1. 컨테이너 통신 방식

도커 데몬을 실행하게 되면 docker0라고 하는 도커 네트워크 인터페이스가 생긴다. 도커 네트워크 인터페이스는 virtual ethernet bridge이고 브릿지 네트워크를 지원하는 가상 네트워크이다. 브릿지 네트워크는 도커 컨테이너가 가지고 있는 IP와 Host 이더넷 또는 물리 장비가 가지고 있는 네트워크를 연결해주는 역할을 한다. 브릿지 네트워크를 지원하기 위해서 docker0는 내부적으로 NAT서비스와 포트 포워딩 기능을 제공한다. 직접 도커가 지원하는 것은 아니고 IPtables로 해준다. virtual ethernet bridge : 172.17.0.0/16 값을 가지는 브릿지 네트워크가 docker0이고 브릿지 네트워크 안에서 docker0는 172.17.0.1 IP를 가지고 게이트웨이 역할을 한다. 컨테이너의 게이트웨이 역할과 L2통신을 지원해준다. 모든 컨테이너는 외부 통신을 docker0를 통해 진행한다. 컨테이너가 실행되면 172.17.x.x로 순차적으로 가상 IP를 할당한다.

 

-NAT : Network Address Translation의 약자로 패킷이 라우팅 장치를 통해 전송되는 동안 패킷의 IP주소 정보를 수정하여 IP 주소를 다른 주소로 매핑하는 방법이다.

-IPtables : iptables 시스템 관리자 리눅스 커널 방화벽(다른 넷필터 모듈로 구현됨)이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용 프로그램이다.

 

2. 컨테이너 포트를 외부로 노출

클라이언트는 eth0라는 인터페이스를 통해서만 들어올 수 있다. eth0에서 컨테이너까지 연결될 수 있도록 포트 포워딩이 진행되야한다.

-p 80:80 -p 호스트 포트:컨테이너 포트

-p 8080로 하면 실제로는 -p randomport:8080이 된다.

-P는 컨테이너 내부에서 도커 파일의 EXPOSE로 정의되어있는 포트에 맞춰서 렌덤 포트가 자동으로 맞춰진다.

 

3. user-defined bridge network 생성 방법

docker network create --driver bridge --subnet xxx.xxx.xxx.x/24 --gateway xxx.xxx.xxx.xxx mynet

subnet을 정해주지 않으면 docker0가 172.17.0.1을 사용하고 있으므로 172.18.0.1로 된다.

gateway를 생략하면 xxx.xxx.xxx.1번으로 된다.

 

docker network ls

위의 명령어는 docker의 네트워크 확인하는 명령어이다.

 

docker run -d —-name appjs —-net mynet —-ip 192.168.100.100 -p 8080:8080 smliux/appjs

위의 명령어는 docker에서 유저가 정의한 네트워크를 실행할 때의 명령어이다.

-ip 생략하면 순차적으로 알아서 생긴다. ex) 192.168.100.001 , 192.168.100.002 등등

 

4. 컨테이너끼리의 통신

프론트 컨테이너와 백엔드 컨테이너가 통신을 할 때를 예를 들면 wordpress가 있는데 wordpress는 웹페이지를 쉽게 제작할 수 있게 도와주는 Tool이다. wordpress 안에는 아파치 웹서버가 내장되어 있다. 또한 wordpress에서 만들어진 데이터는 MySQL에서 저장되게 구성되어있다.

 

mysql 실행

docker run -d —-name mysql -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_PASSWORD=pass mysql

 

wordpress 실행

docker run -d —-name wordpress —-link mysql:mysql -e WORDPRESS_DB_PASSWORD=pass -p 80:80 wordpress

컨테이너와 컨테이너끼리의 통신은 --link를 통해서 연결된다. 컨테이너 이름:원하는 이름

 

728x90
728x90

Docker 컨테이너가 사용하는 스토리지

1. 도커의 레이어 기술

도커의 컨테이너 이미지는 ReadOnly 상태입니다. 컨테이너에 추가되는 데이터들은 별도의 ReadWrite레이어에 저장됩니다. 도커 컨테이너를 실행시키면 ReadOnly와 ReadWrite를 만들어서 같이 실행되어 하나의 프로세스가 되어서 동작을 합니다. 어떻게 ReadOnly와 ReadWrite가 하나인 것처럼 보일까요? 이것은 도커가 가지고 있는 레이어의 기술입니다. 이 레이어 기술을 유니온 파일 시스템 또는 overlay라고 합니다. 기존에 가지고 있던 ReadOnly 레이어에서 ReadWrite 레이어에 변경사항이 마치 하나인 것처럼 보여주는 것입니다. 도커에서는 컨테이너를 실수로 삭제하면 그 안에 있던 데이터가 다 날아갑니다. 이를 보안하기 위해 -v volume 명령어를 사용합니다.

 

2. volume 명령어

volume 옵션
-v <host path>:<container mount path>

-v <host path>:<container mount path>:<read writer mode>

-v <container mount path>

$ docker run -d --name db -v /data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
데이터를 실제 호스트에 기록되게 볼륨 마운트하면 보안 이슈가 있다. 
해커가 파일을 저장하게되면 호스트에도 저장된다.

$ docker run -d --name db -v /data:/var/www/html:ro httpd
위의 보안 문제를 해결하기 위해 둘째 라인처럼 ro :readonly을 써준다.

$ docker run -d --name db -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
-v 뒤에 호스트 주소가 없으면 data 디렉토리 처럼 uuid로 된 디렉토리를 만들고 
그 밑에 data디렉토리를 만들어서 거기에 저장된다.

 

3. 컨테이너끼리 데이터 공유하기

컨테이너와 컨테이너끼리 데이터 마운트로 데이터 공유가 가능합니다.

이를 이용하면 리눅스 컨테이너가 /webdata와 마운트 되어있고 index.html을 만들었고 nginx 컨테이너가 같은 폴더를 마운트하고 있으면 유저에게 index.html을 보여줄 수 있습니다. 또한 리눅스에서 index.html 파일을 변경하여도 적용됩니다.

 

4. volume 실습

docker exec -it db /bin/bash

위에 명령어는 도커에서 mysql에 접속하는 명령어입니다.

 

성공적으로 mysql에 접속한 것을 확인하실 수 있습니다. hs 라는 이름으로 database를 만들었습니다.

 

동작중인 컨테이너를 삭제하여도 호스트의 dbdata 디렉터리에는 hs 가 남아있는 것을 확인하실 수 있습니다.

 

-v 옵션에 host 디렉토리의 이름을 지정해주지 않았습니다.

 

docker inspect 명령어로 host 디렉토리의 이름을 지정하지 않으면 어느 디렉터리로 Mount 되는지 확인하였습니다.

host 디렉토리를 지정하지 않으면 /var/lib/docker/volumes/에 uuid로 디렉터리가 만들어지고 그 밑에 _data라는 디렉터리가 만들어진 것을 확인하실 수 있습니다.

728x90
728x90

따배도 강의를 보고 실습을 하다가 발생하는 오류를 작성했습니다.

1. no matching manifest 오류

MySQL을 실행시키려고 명령어를 작성하였는데 no matching manifest 오류가 발생하였습니다.

해결 방법은 간단했습니다. 실행시킬 때 플랫폼 주소도 함께 작성해주면 해결됩니다.

docker run --platform linux/amd64 -d --name db -v /data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest

성공적으로 실행이 되는가 했는데 이번에는 Mounts denied 오류가 발생하였습니다.

 

2. Mounts denied 오류

우선 docker desktop 화면에서 오른쪽 상단에 보시면 Settings에 톱니바퀴의 이미지가 있습니다. 클릭합니다.

 

Settings를 클릭하시면 위와 같은 화면이 나오실 텐데 위에 화면에서 Resources에서 FILE SHARING을 클릭해 줍니다.

그 화면에서 마운트를 진행할 폴더를 설정해줍니다. 설정하시고 오른쪽 하단에 Apply&Restart 버튼을 눌러줍니다.

 

다시 MySQL을 Run하시면 정상적으로 동작하는 것을 확인하실 수 있습니다.

728x90
728x90

컨테이너 리소스 제한 명령어

docker command 를 통해 제한할 수 있는 리소스는 

  1. CPU
  2. Memory
  3. Disk I/O 가 있다.

1.  Memory 리소스 제한

Memory 리소스 제한
  제한 단위는 b, k, m, g로 할당
--memory, -m : 컨테이너가 사용할 최대 메모리 양을 지정

--memory-swap : 컨테이너가 사용할 스왑 메모리 영역에 대한 설정

--memory-reservation : --memory 값보다 적은 값으로 구성하는 소프트 제한 값 설정

--oom-kill-disable : OOM Killer가 프로세스 kill 하지 못하도록 보호

$ docker run -d -m 512m nginx

$ docker run -d -m 1g --memory-reservation 500m nginx
: --memory-reservation 1g 메모리를 지정하는데 최소 500메가까지 보장 받는다.

$ docker run -d -m 200m --memory-swap 300m nginx
: swap은 메모리가 200m swap이 300m일 때 swap은 300 - 200으로 swap의 용량은 100m이다.

$ docker run -d -m 200m --oom-kill-disable nginx
: oom-kill 실제 피지컬 메모리가 부족해도 nginx는 죽이지 마라

리눅스에서 부하테스트를 하기위해 dockerfile을 작성했다.

 

dockerfile을 build하는 모습이다.

 

부하 테스트를 진행하는 사진입니다.

메모리를 100m를 설정을하고 swap도 100m로 설정을해서 실제로 swap에는 메모리가 없습니다.

5초동안 90m 부하를 일으키는 테스트를 진행했습니다..

정상적으로 실행 되고 있습니다.

 

5초동안 150m를 진행하였는데 실패하는 화면입니다. 

 


2. CPU 리소스 제한

CPU 리소스 제한
--cpus : 컨테이너에 할당할 CPU core 수를 지정

--cpuset-cpus : 컨테이너가 사용할 수 있는 CPU나 코어를 할당. cpu index는 0부터

--cpu-share : 컨테이너가 사용하는 CPU 비중을 1024값을 기반으로 설정



$ docker run -d --cpus=".5" ubuntu
: .5는 예를 들어 cpu 4개중에 1개를 절반까지 쓸수 있다.

$ docker run -d --cpu-shares 2048 ubuntu
: 디폴트는 1024인데 2048로 설정하면 다른 cpu보다 더 많은 리소스를 할당한다.

$ docker run -d --cpuset-cpus 0-3 ubuntu

3. Block I/O 제한

Block I/O 제한
--blkio-weight : Block IO의 Quota를 설정할 수 있으며 100 ~ 1000까지 선택 default 500
--blkio-weight-device : weight-device는 weight값을 한 device에만 적용시킨다.

--device-read-bps : 특정 디바이스에 대한 읽기와 쓰기 작업의 초당 제한을 kb, mb, gb단위로 설정
--device-write-bps 

--device-read-iops : 컨테이너의 read/write 속도의 쿼터를 설정한다. 초당 quota를 제한해서 I/O를 발생시킴
--device-write-iops :  0이상의 정수로 표기 초당 데이터 전송량 = IOPS * 블럭크기

4. 모니터링

docker stat m4

실행중인 컨테이너의 런타임 통계를 확인하는 명령어이다.

docker events -f container=name
docker image -f container=name

도커 호스트의 실시간 event 정보를 수집해서 출력하는 명령어이다.


cAdvisor이라는 모니터링툴이 있는데 제 맥북 환경에서 실행이 안되어서 모니터링을 못했습니다.

https://github.com/google/cadvisor

728x90
728x90

도커 실행과 종료의 관련된 명령어

docker create --name webserver nginx

create 명령어는 기본 백그라운드에서 실행된다. nginx가 webserver라는 이름으로 컨테이너가 생성된다.

 

docker start webserver

컨테이너로 만든 webserver를 실행시켜주는 명령어이다.

 

docker run --name webserver -d nginx

docker pull, create, start를 한 번에 진행하는 명령어이다.

 

docker ps -a

docker ps 명령어와 docker ps -a 명령어의 차이는 docker ps는 실행 중인 컨테이너만 보인다.

docker ps -a 는 실행과 중단된 컨테이너 모두 보인다.

 

docker inspect webserver

컨테이너의 상세 내용을 볼 수 있다.

 

docker inspect --format '{{.NetworkSettings.IPAddress}}' web

컨테이너의 상세 NetworkSetting.IPAddress 의 설정만 볼 수 있는 --format 옵션이다.

 

1. docker logs web
2. docker logs -f web

1. web의 이름을 가진 컨테이너의 로그를 확인할 수 있다.

2. web의 이름을 가진 컨테이너의 실시간 로그를 확인할 수 있다.

 

docker exec -it webserver /bin/bash

-it 옵션을 사용해 컨테이너에 직접 접속해서 배쉬 쉘 사용할 수 있다.

728x90
728x90

따라 하며 배우는 도커 유튜브 영상을 보고 학습한 내용을 블로그에 정리하려고 합니다.

 

1. 도커 기본 명령어

docker

docker를 설치하셔서 docker를 치면 docker에 관련된 명령어들이 나온다.

 

docker search nginx

[nginx]의 이미지가 있는지 도커에서 확인하는 명령어

 

docker images

docker에서 다운로드하였던 이미지들 목록이 나온다.

 

docker pull centos

[name]의 이미지를 다운받을 때 사용하는 명령어

 

docker run centos

위에 명령어를 실행하면 실행되지 않습니다. 

 

docker run -i -t centos

실행시키기 위해서는 태그를 붙여줘야합니다.

-i 옵션과 -t 옵션은 같이 쓰는 경우가 흔하다.

컨테이너를 종료하지 않은 채 터미널에서 입력을 계속해서 컨테이너로 전달하기 위해 이 두 옵션을 사용합니다.

-it 옵션은 컨테이너의 쉘(shell)이나 CLI 도구로 사용할 때 유용하게 사용된다.

 

docker run --name web -d -p 80:80 nginx

--name 옵션을 사용해서 컨테이너에 이름을 만들고 해당 이름으로 컨테이너를 식별할 수 있다.

-d 옵션을 사용하면 컨테이너가 detached 모드에서 실행된다. 컨테이너를 백그라운드에서 실행하고 싶을 때 쓰는 명령어이다.

-p 옵션은 호스트와 컨테이너 간의 포트(Port) 배포(publish)/바인드(bind)를 위해 사용된다.

호스트(host) 컴퓨터에서 컨테이너에서 리스닝하고 있는 포트로 접속할 수 있도록 설정해준다.

 

2. 도커 파일을 만들고 도커 허브에 배포까지

 

도커 파일이란 도커 이미지를 만들기 위한 설정 파일입니다. 여러 가지 명령어를 사용하여 도커 파일을 작성하면 설정된 내용대로 도커 이미지를 만들 수 있습니다.

 

2-1. 도커 파일의 기본 문법

#
comment를 남길때 사용한다.

FROM
컨테이너의 베이스이미지(운영환경), 기반이 되는 이미지 레이어입니다.

MAINTAINER
이미지를 생성한 사람의 이름 및 정보

LABEL
컨테이너 이미지에 컨테이너의 정보를 저장

RUN
도커이미지가 생성되기 전에 수행할 쉘 명령어

COPY
컨테이너 빌드시 호스트의 파일을 컨테이너로 복사

ADD
컨테이너 빌드시 호스트의 파일을(tar, url포함) 컨테이너로 복사

WORKDIR
컨테이너 빌드시 명령이 실행될 작업 디렉토리 설정

ENV
환경변수 설정

USER
명령 및 컨테이너 실행시 적용할 유저 설정

VOLUME
파일 또는 디렉토리를 컨테이너의 디렉토리로 마운트
디렉터리의 내용을 컨테이너에 저장하지 않고 호스트에 저장하도록 설정합니다. 
데이터 볼륨을 호스트의 특정 디렉터리와 연결하려면 docker run 명령에서 -v 옵션을 사용해야 합니다. 
ex) -v /root/data:/data

EXPOSE
컨테이너 동작 시 외부에서 사용할 포트 지정

CMD
컨테이너 동작 시 자동으로 실행할 서비스나 스크립트 지정

ENTRYPOINT
CMD와 함께 사용하면서 command 지정 시 사용

 

2-2. 도커파일 만들고 배포까지

 

hellojs라는 폴더를 만들고 그 폴더 안에 들어가서 dockerfile을 만들려고 한다.

dockerfile을 만들고 위에 내용을 입력한다.

그리고 hello.js라는 파일을 만든다. 

 

hello.js라는 파일은 node.js파일이며 컨테이너의 os.hostname을 확인하는 파일입니다.

 

docker build -t hellojs .

dockerfile을 이미지로 만들기 위해 docker build 작업을 해야 된다.

마지막. 은 호스트의 작업 디렉터리 경로 → 컨테이너 이미지가 만들어진 것

 

빌드가 진행 중인 화면입니다.

다음으로 webserver라는 폴더를 만들고 그 폴더에 도커 파일을 만듭니다.

 

도커 파일은 우분트로 되어있으며 도커가 실행될 때 아파치를 설치하고

아파치를 설치하면 /var/www/html/index.html을 찾아서 클라이언트에게 서비스해주게 된다.

따라서 /var/www/html/index.html에 TEST WEB이라는 이름의 파일을 저장시켰다.

이 컨테이너가 서비스해주는 포트를 알려주는 EXPOSE에 80번으로 설정했다.

CMD에는 아파치를 설치하고 나면 그 컨테이너 안에는 /usr/sbin/apache2ctl이라는 바이너리가 생긴다.

아파치 웹서버를 동작시켜주는 데몬이 생긴다. 아파치를 실행할 때는 -DFOREGROUND라는 옵션을 써줘야 된다.

 

docker build 명령어로 webserver를 build 중인 화면이다.

 

webserver와 hellojs가 정상적으로 이미지로 만들어진 것을 확인하실 수 있습니다. 

 

webserver의 컨테이너를 실행하는 화면입니다. 정상적으로 실행되었습니다.

 

curl로 localhost:80을 하면 잘 동작하는 것을 확인하실 수 있습니다.

 

docker rm -f web web

실행 중인 컨테이너를 지울 때는 -f라는 옵션을 붙여줘야 한다.

 

docker run 명령어로 hellojs라는 컨테이너를 실행시켰습니다.

정상 작동되는 것을 확인하실 수 있습니다.

 

 

 

docker login

도커를 내 Repository에 올리기 위해서 로그인을 진행해야 합니다.

유저 이름과 패스워드를 입력합니다.

 

docker tag webserver:v1 lusida/webserver:v1

컨테이너를 내 Repository에 올리려면 내 이름의 태그가 붙어있어야 한다.

따라서 내 이름의 태그를 붙여주기 위해 이름을 변경하는 명령어이다.

 

도커 허브에 접속하셔서 로그인 후 도커 허브 홈페이지 상단에 Repositories을 클릭해 줍니다.

 

현재 내 Repository에는 비어 있는 것을 확인하실 수 있습니다.

 

docker push lusida/webserver:v1

내 컨테이너를 Repository에 올리기 위한 명령어입니다.

하지만 오류가 난 것을 확인하실 수 있는데 제 네임을 잘못 설정을 해서 denied 오류가 발생하는 것이었습니다.

이름을 잘 확인합시다.

 

정상적으로 push 명령어가 실행되었습니다.

 

제 Repository에서도 webserver라는 Repository가 올라간 것을 확인하실 수 있습니다.

728x90
728x90

1. UTM 설치

맥북 M1에서 VM(Virtual Machine)인 UTM에서 Ubuntu 설치를 진행해 보려고 합니다.

밑에 주소에서 다운로드할 수 있습니다.

UTM 다운로드 사이트 https://mac.getutm.app

 

UTM

Securely run operating systems on your Mac

mac.getutm.app

사이트에 접속하신 후 Download를 진행하시면 됩니다.

 

맥북 런치패드에 보시면 UTM이 잘 설치된 것을 확인하실 수 있습니다.

 

2. Ubuntu 설치

이제 밑에 사이트는 우분투를 설치하는 사이트입니다. 사이트에 들어가서 우분투를 다운로드합니다.

우분투 https://ubuntu.com/download/server/arm

 

Ubuntu for ARM | Download | Ubuntu

Download Ubuntu Server for ARM with support for the very latest ARM-based server systems powered by certified 64-bit processors.

ubuntu.com

Download Ubuntu 22.04 LTS를 다운로드합니다. 이제 다운로드는 다 끝났습니다.

이전에 다운로드했던 UTM을 실행시켜 줍니다.

 

UTM을 실행시키면 위와 같은 화면이 실행됩니다.

왼쪽에는 VM을 보여주는 공간입니다. 아직 VM을 만든 것이 없기 때문에 왼쪽 공간은 비어있습니다.

이제 새 가상머신 만들기 버튼을 클릭합니다.

 

Virtualize 버튼을 클릭해 줍니다.

 

저희는 Linux를 설치를 해야 되므로 Linux를 클릭해 줍니다.

 

리눅스를 클릭하면 위와 같은 창이 나오는데 Use Apple Virtualization을 체크하지 않고

Boot ISO Image에 있는 탐색 버튼을 클릭합니다. 

 

위에서 다운로드했던 Ubuntu 설치 파일을 클릭합니다. 

 

메모리를 설정합니다.

Ubuntu Server는 메모리 사용량이 크지 않으므로 저는 2GB와 CPU Core 2개를 설정했습니다.

 

저장소를 설정하는 화면입니다.

저장소의 크기는 20GB로 설정하였습니다.

 

공유 폴더를 선택하는 화면입니다.

저는 따로 공유 폴더를 만들지 않아 Continue 버튼을 눌렀습니다.

 

VM의 이름을 설정해 줍니다.

저는 docker-ubuntu라는 이름으로 설정하였습니다.

 

VM에서의 설정은 완료하였습니다.

이제 VM에 우분투를 설치하기 위해 재생 버튼을 클릭합니다.

 

재생 버튼을 눌렀을 때 나오는 화면입니다.

Try or Install Ubuntu Server에 엔터를 눌러줍니다.

 

한국어는 따로 없어서 English를 선택합니다.

 

업데이트를 진행하지 않고 실행하였습니다.

Continue without updating에서 엔터를 누릅니다.

 

English로 설정되어 있습니다.

한국어는 없으니 Done에서 엔터를 눌러줍니다.

 

Ubuntu Server를 선택하고 Done에서 엔터를 누릅니다.

 

네트워크 연결을 진행하는 화면입니다. 할당된 IP 주소와 맥 주소가 보입니다.

따로 설정할게 없어서 Done에서 엔터를 눌러줍니다.

 

프록시도 따로 설정해 줄게 없어서 그냥 넘어갔습니다.

Done에서 엔터를 눌러줍니다.

 

저는 미러를 기본 Default 값으로 설정하였습니다.

Done에서 엔터를 눌러줍니다.

 

저장소를 설정하는 화면입니다.

파티션 분배를 수동으로 하기 위해 Custom storage layout에 (x)로 표시하고 Done에서 엔터를 눌러줍니다.

 

위에 화면에서 free space에서 엔터를 누르면 옆에 창이 나오는데 Add GPT Partition에서 엔터를 눌러줍니다.

 

저는 총 3개의 파티션을 나눴는데 1개의 파티션은 13G를 사용하고 format은 ext4, Mount는 / 로 만들었습니다.

 

두 번째 파티션은 1G를 사용하고 Format은 swap으로 설정하였습니다. 

 

세 번째 파티션은 나머지 용량을 사용하고 Format은 ext4를 사용하고 Mount는 /boot 로 설정하였습니다.

 

파티션 분배가 완료된 화면입니다.

이제 Done에서 엔터를 눌러줍니다.

 

창이 하나가 나오는데 Continue에서 엔터를 눌러 진행합니다.

 

이제 우분투 사용자에 대한 정보를 적는 화면입니다.

유저 이름과 유저 서버 네임 등 기본 정보와 패스워드를 설정합니다.

 

openSSH server에 대한 화면입니다.

따로 설정은 해주지 않고 Done에서 엔터를 눌러줍니다.

 

우분투에 설치하고 싶은 패키지들을 보여주는 화면입니다.

따로 설치하고 싶은 것이 있으시면 체크하고 설치를 진행하시면 됩니다.

 

설치가 진행되고 있는 화면입니다.

조금만 기다리시면 설치가 완료됩니다.

 

화면 위에 Install complete라고 나왔습니다.

이제 Reboot Now에서 엔터를 눌러줍니다.

 

우분투가 꺼졌다가 다시 켜지는데 검정 화면에서 커서만 깜빡거리면서 멈춰있는 경우가 있습니다.

 

이때는 VM 화면 창 오른쪽 상단에서 Drive image options을 클릭하고 CD/DVD에 마우스를 가져가면 옆에 꺼내기 변경이 나옵니다.

꺼내기를 클릭합니다.

 

꺼내기를 완료하셨으면 이제 VM 화면의 왼쪽 상단에 Restarts the VM 을 클릭해 줍니다.

 

우분투가 재부팅이 진행되는 화면입니다.

 

성공적으로 나오는 것을 확인하실 수 있습니다.

우분트를 설치하면서 설정하셨던 유저 이름과 패스워드로 로그인을 진행하시면 됩니다.

 

로그인이 성공 후 우분투가 성공적으로 설치된 것을 확인하실 수 있습니다. 

728x90

+ Recent posts