Docker의 사용목적?
하나의 컴퓨터에 가상으로 컴퓨터를 만들고 그 위에 운영체제를 설치한 후 웹 서버를 설치한다면 컴퓨터를 별도로 장만하지 않아도 된다!
but, 겨우 웹 서버를 운영하기 위해서 운영체제를 깐다는 것이 비효율적이다. 운영체제의 크기가 너무 크기도 크고 운영체제 위에 운영체제를 깐다는 것 때문에 실행속도가 너무 느려지게 된다.
따라서, 한대의 컴퓨터에서 각각의 앱을 실행시키는 것이다. 단, 각각의 앱은 격리된 환경에서 실행된다.
이 때, 운영체제가 설치된 컴퓨터를 주인 = host
host에서 실행되는 격리된 각각의 실행환경 = container
각각의 container에는 운영체제 전체가 설치되어 있는 것이 아니고 앱을 실행하는 데에 필요한 라이브러리, 실행파일들만 포함되어 있다.
=> 이미 존재하는 운영체제를 공유함으로써 무엇인가를 설치 할 필요도 없고 운영체제가 하나 이므로 속도도 느려지지 X
또한, 시간도 절약되며 저장장치 용량도 아낄 수 있다.
리눅스 OS에는 이런 실행방법이 내장되어 있다. 이러한 기술을 Container라고 부른다.
이런 기술을 사용하여 이 일을 쉽게 해주는 소프트웨어중 가장 자주 사용하는 것이 Dokcer이다.
Docker는 리눅스Os의 기술이다. 우리가 알아야 할 것들은?
첫번째, 도커 위에서 돌아가는 컨테이너
두번째, 컨테이너 안에서 동작하는 각각의 앱들은 리눅스 os에서 동작하는 앱이다.
만약 pc가 리눅스os가 아니라면 도커를 사용할 수 없다? 그렇지 않다.
=> 가상머신을 깔고 리눅스 os를 설치하여 그 위에서 docker를 사용할 수 있다.
docker가 알아서 가상머신을 생성하고 그 위에 리눅스를 설치하여 준다.
단, 가상머신위에서 동작하기때문에 성능의 저하는 뒤따를 수 밖에 없다.
리눅스OS가 아님에도 docker를 사용하는 이유는 docker를 사용함에 있어서 얻을 수 있는 편의성이 크기 때문이다.
2. 난 윈도우os이므로 윈도우용 데스크탑 docker설치
서버는 리눅스 우분투이므로 리눅스용도 같이 알아두기.
설치시 WSL 2 installation is incomplete 발생
해결법 => https://blog.nachal.com/1691
docker는 gui환경 보다는 명령어를 이용해 제어하는 것이 도커의 모든 기능을 활용할 수 있다. => cmd환경
cmd환경
docker images 입력 후 에러가 뜨지 않는다면 성공적으로 docker가 설치된 것
* 리눅스 환경에서도 같은 명령어
sudo docker images (sudo로 권한 얻는 것)
docker hub라는 registry 서비스에서 필요한 sw를 찾을 수 있다. (비슷한 개념으로 app store)
hub에서 찾아낸 내 pc에 저장해 갖고 있는 것 = image (비슷한 개념으로 program)
image를 실행하는 것 = container (비슷한 개념으로 program을 실행하면 실제로 동작하는 것은 process)
프로그램이 여러 개의 process를 가질 수 있는 것 처럼 image도 여러 개의 container를 가질 수 있다.
docker hub에서 image를 다운 받는 행위 => pull
image를 실행시키는 행위 => run
run을 하게 되면 image가 container가 되고 그 container가 실행되면서 container안에 포함 되어있는 실행되도록 설정된 프로그램이 실행되면서 그 프로그램을 사용자가 사용할 수 있게 되는 것이다.
docker hub에서 image를 다운 받는 방법
* docker hub상의 apache는 httpd 라는 이름은 가지고 있다.
2. docker docs에 pull하는 방법에 대한 문서를 참고한다.
https://docs.docker.com/engine/reference/commandline/pull/
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
해당 명령어를 통해 registry로 부터 이미지를 다운 받을 수 있다.
image를 run시켜 container로 만드는 방법
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
command는 컨테이너 안의 실행시키고 싶은 명령어
[]는 생략 가능
docker ps
=> 우리가 만든 컨테이너를 확인하는 명령어
docker run --name ws2 httpd
=> 컨테이너 이름을 옵션을 통해 설정해줄 수 있다.
실행중인 컨테이너를 종료시키는 명령어
docker stop [OPTIONS] CONTAINER [CONTAINER...]
유의할 점: 종료를 시켰다고 컨테이너가 삭제된 것은 아니다.
docker ps -a
=> stop시킨 컨테이너들 까지 전부 확인할 수 있다.
docker start ws2
=> stop시킨 컨테이너를 다시 실행시킬 수 있다.
위의 명령어로 실행시키면 로그가 출력되지 않는데
도커의 로그를 확인하는 명령어
docker logs [OPTIONS] CONTAINER
docker logs ws2
단, 로그가 출력되고나면 꺼져버리므로
docker logs -f ws2
=> 로그의 변화를 실시간으로 화면에 출력하도록한다.
컨테이너를 삭제하는 명령어
docker rm [OPTIONS] CONTAINER [CONTAINER...]
현재 실행중인 컨테이너는 삭제할 수 없으므로 docker stop으로 컨테이너를 종료시키고 난 후에 삭제해야 한다.
docker rm --force
=> 현재 실행중인 컨테이너를 종료시키지 않고도 바로 삭제할 수 있다.
이미지를 삭제하는 명령어
docker rmi [OPTIONS] IMAGE [IMAGE...]
docker image 명령어를 통해 이미지가 삭제됐는지 확인할 수 있다.
~ 4. 컨테이너 run
'DevelopmentTools > Docker' 카테고리의 다른 글
[Linux] apache-tomcat 연동 (0) | 2022.05.30 |
---|---|
[생활코딩] Docker 입문수업 Day-2 (0) | 2022.05.29 |