생활코딩 Docker 입문수업 - 1. 수업소개
도커 : 가상 머신처럼 독립된 실행환경을 제공하면서도, 컴퓨터에 직접 앱을 설치한 것과 같이 빠르고, apt, npm, pip처럼 명령어 한줄로 원하는 앱이 포함된 실행환경을 손쉽게 설치할 수 있는 개발환경을 제공
운영체제가 설치되어 있는 호스트 컴퓨터
웹서버와 데이터베이스는 컨테이너로써 격리된 실행환경, 앱을 실행하는 데 필요한 파일만 존재
장점
1. 따로 설치할 필요 없음
2. 운영체제가 하나라 속도가 빠름, 시간절약 가능
3. 용량을 아낄 수 있음
리눅스 운영체제에 내장되어 있는 이 실행환경을 컨테이너라고 부름.
생활코딩 Docker 입문수업 - 2. 설치
리눅스가 아닌 윈도우, 맥 환경에서는 성능 저하가 있을 수 있음.
도커 다운로드
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 : 이미지를 실행하는 것
도커 허브에서 필요한 이미지를 다운받는 방법
위 사이트에서 explore 탭을 누르면 다운받을 수 있는 컨테이너가 나옴
아파치 웹서버의 경우 httpd를 다운받으면 됨.
도커에 대한 사용설명서
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. 호스트와 컨테이너의 파일시스템 연결
docker 안의 파일을 직접 수정하는 것은 위험하다. 컨테이너가 사라지면 작업한 내용이 함께 없어지기 때문이다.
호스트와 컨테이너의 파일시스템을 연결
Desktop/htdocs 아래 있는 파일과 연결하려면 다음과 같이 하면 된다.
docker run -p 8888:80 -v ~/Desktop/htdocs:/usr/local/apache2/htdocs/ httpd
생활코딩 Docker 입문수업 - 8. 수업을 마치며
도커 후속수업 듣기
1. dockerfile 2. docker compose 3. 쿠버네티스