웹개발

[Docker] 생활코딩 Docker 입문수업

ruming 2022. 1. 21. 07:41

생활코딩 Docker 입문수업 - 1. 수업소개

도커 : 가상 머신처럼 독립된 실행환경을 제공하면서도, 컴퓨터에 직접 앱을 설치한 것과 같이 빠르고, apt, npm, pip처럼 명령어 한줄로 원하는 앱이 포함된 실행환경을 손쉽게 설치할 수 있는 개발환경을 제공

 

운영체제가 설치되어 있는 호스트 컴퓨터

웹서버와 데이터베이스는 컨테이너로써 격리된 실행환경, 앱을 실행하는 데 필요한 파일만 존재

 

장점

1. 따로 설치할 필요 없음

2. 운영체제가 하나라 속도가 빠름, 시간절약 가능

3. 용량을 아낄 수 있음

 

리눅스 운영체제에 내장되어 있는 이 실행환경을 컨테이너라고 부름. 

 

 

생활코딩 Docker 입문수업 - 2. 설치

 

리눅스가 아닌 윈도우, 맥 환경에서는 성능 저하가 있을 수 있음.

 

도커 다운로드

docker.com   

Developers > Docs > Download and install

 

운영체제 별로 다운로드가 가능하다.

 

윈도우에 설치할 때는 WSL2를 설치해야 한다고 한다. 

https://docs.microsoft.com/ko-kr/windows/wsl/install

 

PowerShell을 관리자권한으로 실행한 뒤 WSL2 환경을 구성했다.

리눅스용 윈도우 하위 시스템 설정 & virtual machine 설정

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

 

리눅스 커널 업데이트

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi  

ARM용은 현재 사용이 불가능한 것 같다.

 

 

 

 

생활코딩 Docker 입문수업 - 3. 이미지 pull

도커를 사용하기 위해 필요한 개념을 비유한 것

docker hub - app store

image - program

container - process

 

*이미지는 여러 개의 컨테이너를 가질 수 있음.

pull : docker hub에서 이미지를 다운 받는 것

run : 이미지를 실행하는 것

 

도커 허브에서 필요한 이미지를 다운받는 방법

hub.docker.com

위 사이트에서 explore 탭을 누르면 다운받을 수 있는 컨테이너가 나옴

아파치 웹서버의 경우 httpd를 다운받으면 됨. 

 

도커에 대한 사용설명서

docs.docker.com

Reference > Command line reference > Docker CLI > docker pull

pull 명령어

$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]

 

[httpd 다운 받기]

docker pull httpd

 

[다운 받은 것 확인]

docker images

 

 

생활코딩 Docker 입문수업 - 4. 컨테이너 run

[GUI]

run 버튼 클릭

 

 

 

 

 

 

[COMMAND]

 

httpd run

docker run httpd

 

컨테이너 보기

docker ps

 

또 다른 컨테이너 생성 (ws2라는 이름의 컨테이너를 생성한 것, 하나의 이미지는 여러 개의 컨테이너를 생성할 수 있다.)

docker run --name ws2 httpd

 

컨테이너 끄기

docker stop 뒤에 컨테이너 이름이나 아이디를 쓰면 된다.

docker stop ws2

 

중지한 컨테이너를 보려면 -a옵션을 준다.

docker ps -a

 

컨테이너 켜기

docker start ws2

 

로그 보기

docker logs ws2

실시간으로 확인하려면 -f옵션

docker logs -f ws2

 

컨테이너 삭제

*실행 중인 컨테이너는 삭제되지 않는다. 중지시키고 삭제해야 함.

docker stop ws2
docker rm ws2

실행 중인 컨테이너를 삭제하려면 --force 옵션

docker rm --force ws2

 

이미지 삭제

docker rmi httpd

 

 

생활코딩 Docker 입문수업 - 5. 네트워크

도커 없이 웹서버를 사용한다면?

웹브라우저가 설치된 컴퓨터, 웹서버가 설치된 컴퓨터 두 대가 필요

웹페이지를 파일로 만들어서 파일시스템에 저장

6만개의 port로 소프트웨어를 구분, 아파치 서버에서는 80번 포트에서 접속을 대기하도록 설정되어 있음.

웹서버의 주소는 example.com

-> http://example.com:80/index.html 

 

 

도커를 이용하면?

컨테이너에 웹서버가 설치되고, 컨테이너가 설치된 운영체제를 docker host라고 한다.

컨테이너와 호스트는 독립적인 실행환경이기 때문에 포트를 따로 가지고 있음.

$ docker run -p 80:80 httpd

위 명령으로 컨테이너와 호스트의 포트를 연결

port forwarding : 연결된 포트로 신호를 전달하는 것

 

*접속경로가 8000번 포트로 변경됐다면?

$ docker run -p 8000:80 httpd

 

 

docker run --name ws3 -p 8081:80 httpd

 

localhost:8081/index.html로 접속

 

생활코딩 Docker 입문수업 - 6. 명령어 실행

컨테이너에서 편집하는 방법

컨테이너 안에서 pwd라는 명령을 실행

docker exec ws3 pwd

 

컨테이너 내에서 지속적으로 명령을 전달하고 싶을 때 (interactive, tty 옵션)

docker exec -it ws3 /bin/sh

exit로 연결을 끊을 수 있다.

 

sh는 기능이 부족해서 bash를 주로 쓴다. 없으면 sh쓰면 됨.

docker exec -it ws3 /bin/bash

 

index.html 편집하기

index.html은 /usr/local/apache2/htdocs/ 경로에 들어있다.

cd /usr/local/apache2/htdocs/

 

nano 설치하기

apt update
apt install nano

nano 에디터 사용하기

nano index.html

 

생활코딩 Docker 입문수업 - 7. 호스트와 컨테이너의 파일시스템 연결

https://youtu.be/AmSKD4p-jhw

docker 안의 파일을 직접 수정하는 것은 위험하다. 컨테이너가 사라지면 작업한 내용이 함께 없어지기 때문이다.

 

호스트와 컨테이너의 파일시스템을 연결

Desktop/htdocs 아래 있는 파일과 연결하려면 다음과 같이 하면 된다.

docker run -p 8888:80 -v ~/Desktop/htdocs:/usr/local/apache2/htdocs/ httpd

 

 

생활코딩 Docker 입문수업 - 8. 수업을 마치며

도커 후속수업 듣기

https://seomal.com/map/1/129

 

1. dockerfile 2. docker compose 3. 쿠버네티스