티스토리 뷰
이번 포스팅은 도커에 대해서 알아본다.
기존 가상화 솔루션등을 사용한 사람들은 VMware, Virtualbox 라던지 많이 들어 봤을 거다.
이런 가상화 방식을 전가상화라고 하는데 호스트 OS에서 하이퍼바이저를 통해 게스트 OS가 구동되는
방식이다. 이렇게 구현되는 가상화는 자원이 많이 필요해 비용도 많이 들고 무겁다는 단점이 있다.
그래서 하이퍼바이저를 거치지 않고 컨테이너 방식의 가상화가 각광받기 시작했다.
이 컨테이너 방식을 솔루션으로 구현한 것이 도커이다.
그러면 도커가 무엇인지 간단한 실습을 통해 알아보자.
도커 설치와 퍼블릭 도커 허브에서 nginx웹서버 도커 이미지를 활용하여
웹서버를 구동 시켜 웹서버에 접속까지 진행한다.
먼저 여러분들의 시스템(PC, 테스트 서버, 클라우드 등) 도커가 설치가 되어 있지 않았을 것이다.
각 OS에 맞게 설치 방법을 다루고 이어서 실습을 진행해보자.
다음에 클라우드에서 리눅스에서의 설치를 다루는걸로 하고 이번 포스팅은
윈도우 환경과 맥 OS에서 도커 설치하는 법을 다루겠다.
그 이후에 나오는 예제들의 도커 명령어들은 도커만 설치되어 있으면 동일하게 실습이 가능하다.
윈도우에서 도커 설치
현재 필자의 PC는 Windows 10이 설치가 되어 있다.
맥에서 설치 방법은 다음 포스팅 참조
2020/04/16 - [SW] - [도커(Docker)] 도커 설치와 웹서버 구동 (MacOS)
도커를 설치 하기전에 내 PC에 가상화가 지원하는지 Hyper-V 기능이 설치되어 있는지 확인해야 한다.
작업표시줄에 마우스 오른쪽클릭 후 작업 관리자를 선택해서 연다.
아래처럼 가상화 사용이라고 되어 있는지 확인한다.
그림처럼 사용이라고 되어 있지 않다면 컴퓨터를 재시작하여 BIOS 설정으로 가서 가상화 기능을 활성화시켜야 한다.
가상화 설정이 되었다면 Hyper-V를 확인 하자.
윈도우키를 누르고 "Windows 기능 켜기/끄기" 검색해서
아래와 같이 Hyper-V를 체크해서 설치를 진행하자.
설치가 완료되면 재부팅 후에
구글에 docker install으로 검색한다.
설치가 완료되고 트레이 아이콘에 도커 아이콘이 생성이 되었을 것이다.
클릭을 하여 About을 눌러보자
현재 필자의 도커 정보이다.
도커가 running 이 되고 있는 것을 확인 후 이제 윈도우키 + R키를 눌러 실행창에 cmd 입력하여 명령 창을 열고
docker 명령어를 입력해보자.
docker images
오류 메시지 없이 명령이 잘 실행이 되었다면 실습이 가능하다.
위 명령어는 현재 로컬 PC에 도커 이미지가 다운되어 있는 리스트를 보여준다.
위 결과는 리스트가 존재하지 않다. 이제 웹서버인 nginx 도커 이미지를 다운로드를 해보자.
도커 이미지를 다운로드하는 명령어는 pull이다. nginx 이미지를 다운로드하기 위해 아래와 같이 입력을 해보자.
docker pull nginx
결과 화면이다 nginx 도커 이미지를 인터넷을 통해 다운로드가 되고 이미지 리스트를 보는 명령어를 통해 확인을 하면
리스트에 추가가 된 것을 확인할 수 있다.
이제 이미지가 준비가 되었으니 이미지를 컨테이너화 해서 도커를 실행시켜보자.
docker run --name nginx -p 8000:80 -d nginx
docker run 명령어를 통해 --name 이라는 옵션으로 컨테이너 이름을 지정해주고 -p 옵션으로 도커에서 실행되는 포트와 현재 호스트가 되는 내 PC의 포트를 연결시켜준다.
위 설정은 내 PC 8000번 포트에 도커 컨테이너 80 포트를 포트 포워딩을 한 예이다. 그리고 -d 옵션으로 detached mode 즉 백그라운드로 실행을 시키겠다는 의미이고 마지막 nginx 는 도커 이미지의 이름이다
그 외 옵션으로 docker run -it --restart unless-stopped --name nginx -p 8000:80 -d nginx --restart unless-stopped 를 붙이면 서비스가 도커 재시작시 이 컨테이너도 재시작을 한다.
--restart 컨테이너의 프로세스 종료시 재시작 정책을 설정 하는 옵션
어떤 값을 주느냐에 따라서 재시작 설정을 할 수 있다.
--restart unless-stopped 도커 서비스 재시작시 컨테이너도 재시작
--restart no 컨테이너 재시작 안함
--restart on-failure 프로세스의 exit code 0 이 아닐 때 재시작
--restart always 무조건 재시작 (프로세스 exit code 영향을 받지 않음)
docker images 명령어로 확인할 수 있다.
실행을 시켜 보자.
명령이 잘 실행이 되었다면 실행하면 해쉬값 하나가 결괏값으로 출력되고 윈도우 방화벽이 걸려 있다면 허용을 해준다.
실행이 잘 되었고 nginx 도커 컨테이너가 잘 실행이 되고 있는지 확인을 할 수 있다.
이 때 확인하는 명령어는 다음과 같다.
docker ps
nginx 도커 컨테이너의 정보를 확인이 가능하다. 잘 실행이 되고 있는지 확인했다면 웹 브라우저에서 확인해보자.
웹 브라우저 주소창에 아래 주소를 입력하면
http://localhost:8000
위 와 같이 nginx 디폴트 페이지에 접속이 되는 것을 확인할 수 있다.
이제 nginx 컨테이너를 종료하고 삭제까지 해보자.
실행되고 있는 컨테이너는 삭제가 되지 않는다. 종료 명령은 docker stop [컨테이너 이름] 이다.
docker stop nginx
docker ps 로 확인을 해보면 리스트에서 사라지고 웹 브라우저에도 접속이 되지 않는다.
하지만 아직 컨테이너는 삭제는 되지 않았고 컨테이너는 다시 시작을 할 수 있다.
ps 명령어로 보이지 않는 컨테이너는 -a 옵션을 붙이면 확인이 가능하다.
docker ps -a
STATUS 값을 보면 Exited가 된 것을 확인할 수 있고 이 컨테이너를
다시 시작하는 명령은 docker start [컨테이너 이름] 이다.
docker start nginx
ps 명령으로 확인을 해서 STATUS 값을 보면 Up 이 된 것을 확인할 수 있다.
이제 rm 명령어로 삭제를 해보자. 물론 컨테이너를 중지시키지 않고 삭제를 하면 stop 을 하고 삭제를 하라고 하는 오류 메시지를 보여준다. docker stop nginx 로 정지 후 삭제 명령어는 docker rm [컨테이너 이름(NAMES)] 이다.
docker rm nginx
만약 도커 컨테이너를 run 명령어로 실행할 때 --name 옵션을 붙이지 않았다면 이름은 자동으로 생성이 되는데 삭제할 때 이름을 잘 모른다면 CONTAINER ID 값으로도 삭제가 가능하다. docker rm [컨테이너 아이디(CONTAINER ID)]
docker ps -a 명령으로 확인을 해보면 리스트가 비어 있는 것을 확인할 수 있다.
여러 컨테이너를 관리하다 보면 다운로드한 도커 이미지들 중 안 쓰는 도커 이미지들도 쌓여 있을 수가 있다.
이때 다운로드한 도커 이미지를 삭제를 하는 명령어는
docker rmi [이미지이름(REPOSITORY)] 또는 docker rmi [이미지 아이디(IMAGE ID)] 이다.
도커 이미지 리스트를 확인하는 명령어 docker images 로 이미지 아이디를 확인 후 삭제 하면 된다.
docker images 로 확인하면 리스트가 비어 있는 것을 확인할 수 있다.
위 설명의 과정들을 전체 명령어이다.
C:\>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
C:\>docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
c499e6d256d6: Pull complete 74cda408e262: Pull complete ffadbd415ab7: Pull complete Digest: sha256:bc88c80325c8e6d05446fb042944e692b29916a39f11a276a59cca2a65ad7477
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
C:\>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 2 weeks ago 127MB
C:\>docker run --name nginx -p 8000:80 -d nginx
fbfaa79fa01fac67df290fa7fb2e57268356baae99d571e3a0904d8dae50b9d7
C:\>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fbfaa79fa01f nginx "nginx -g 'daemon of…" 15 seconds ago Up 14 seconds 0.0.0.0:8000->80/tcp nginx
C:\>docker stop nginx
nginx
C:\>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
C:\>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fbfaa79fa01f nginx "nginx -g 'daemon of…" 40 seconds ago Exited (0) 8 seconds ago nginx
C:\>docker start nginx
nginx
C:\>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fbfaa79fa01f nginx "nginx -g 'daemon of…" 59 seconds ago Up 4 seconds 0.0.0.0:8000->80/tcp nginx
C:\>docker stop nginx
nginx
C:\>docker rm nginx
nginx
C:\>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
C:\>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 2 weeks ago 127MB
C:\>docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:bc88c80325c8e6d05446fb042944e692b29916a39f11a276a59cca2a65ad7477
Deleted: sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291
Deleted: sha256:8a305f371a6c3c445a1dfc500c1364743868a269ab8cdaf95902692e82168352
Deleted: sha256:d079ef06ec1f10a8050887365f9a940b39547ba6bcc46b16a463e740984f3223
Deleted: sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45
C:\>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
C:\>
'DevOps' 카테고리의 다른 글
[쿠버네티스 Kubernetes] Rancher(멀티 Kubernetes 클러스터 관리)설치 (0) | 2020.04.20 |
---|---|
[도커(Docker)] Error response from daemon 해결 방법 (0) | 2020.04.19 |
[도커(Docker)] 리눅스(linux)에 도커 설치(클라우드 활용) (0) | 2020.04.18 |
[클라우드] GCP(Google Cloud Platform) 에서 리눅스 생성 하기 (0) | 2020.04.18 |
[도커(Docker)] 도커 설치와 웹서버 구동 (MacOS) (0) | 2020.04.17 |
- Total
- Today
- Yesterday
- 웹앱프로그래밍
- 자바스크립트
- python
- 자바
- mysql
- oracle
- 오라클
- docker
- 부트스트랩
- 웹앱
- GIT
- 클라우드
- DB
- javascript
- 도커
- GCP
- Visual Studio
- github
- 파이썬
- Java
- 플라스크
- Cloud
- nginx
- HTML
- flask
- 웹앱 프로그래밍
- 리눅스
- WEB
- Hello World
- pythonanywhere
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |