본문 바로가기
카테고리 없음

docker란?

by devyongi 2021. 11. 2.

현재 개발공부중이며, 해당 글에 틀린 내용이 있을 수 있습니다. 부족한 부분에 대해서 피드백을 주시면 수정하겠습니다.


최근에 채용정보를 보면서 도커 사용을 요구하는 기업을 종종 봤다. 우대사항에 도커가 있는 경우도 많이 봤다. 아마도 트랜드인듯 싶다. 그래서 어떤 점이 좋고, 도커가 무엇인지 공부해보았다.

도커


기존의 운영체제 안에서 프로세스만 격리시켜 빠르게 실행시키는 기술이다. 가상머신을 사용하여 운영체제 위에 또 다른 운영체제를 설치하여 독립적인 환경을 세팅하는 방법과 다르다.

가상머신을 사용하면, 운영체제를 또 설치해야하기 때문에 용량을 많이 차지하게 되고, 운영체제 위에 또 운영체제가 있는 구조기 때문에 속도가 느려진다. 하지만, 도커를 사용하면 새로운 운영체제를 설치할 필요가 없기 때문에 용량을 많이 차지하지 않게 되고 속도도 느려지지 않는다.

  • 가상머신 사용하는 이유

어떠한 서비스를 만들기 위해서는 운영체제 위에 여러 소프트웨어를 설치해야한다.(web server, DB 등)

하나의 운영체제 위에 서비스에 필요한 소프트웨어들을 설치할 경우 잘 작동되기가 어렵다. 그래서 하나의 운영체제 위에 하나의 소프트웨어만 문제없이 작동하게 만들어, 네트워크 통신으로 연결을 할 수 있다.

하지만, 이럴 경우 서비스용, 웹 서버용, DB용 컴퓨터 3대가 있어야한다. 이런 비용 문제를 해결 하기 위해 가상머신으로 하나의 운영체제 위에 또 다른 운영체제를 설치하여 사용하는 것이다.

도커 설치


도커는 리눅스 운영체제 기술이다. 하지만, window, macOS에서도 사용가능하다. 도커가 자동으로 가상머신을 만들어주고, 그 위에 리눅스를 설치해준다.

내 운영체제가 리눅스라면, 그 위에서 바로 도커가 실행되기 때문에 성능저하가 없지만, 리눅스가 아니라면 가상머신을 만들고 그 위에 도커가 실행되므로 성능 저하를 감수해야한다. 그럼에도 사용하는 이유는 도커를 사용함으로써 편의성이 크기 때문이다.

설치는 각자의 운영체제에 맞게 문서를 보고 설치하면 된다.

설치 후, docker images 명령어를 입력하였을 때, 에러가 없으면 잘 설치된것이다. (운영체제에 따라 다를수도 있음.)

도커 허브, 이미지, 컨테이너


도커 허브 : 많은 이미지들을 가지고 있는 도커 생태계이다. app store와 비슷

이미지 : 실행파일과 라이브러리가 조합된 것을 파일로 만들어 놓은 것이다. program과 비슷

컨테이너 : 이미지를 실행시켜주는 것을 말한다. process와 비슷

한 프로그램이 여러 프로세스를 가지는 것처럼 하나의 이미지도 여러 컨테이너를 가질 수 있다.

이미지 설치

이미지를 설치하기 위해서 허브 도커사이트에서 원하는 이미지를 검색하여 설치 방법에 따라 설치해주면 된다.

docker pull [이미지명]

설치 후에는 docker images명령어를 통해 설치된 이미지를 확인할 수 있다.

도커 명령어

docker run [이미지명] : 이미지에 맞는 컨테이너가 만들어지고 실행된다. 명령어를 입력한 만큼 서로 다른 컨테이너가 생성되고 실행된다. 컨테이너명을 docker run --name ws2 httpd이런식으로 지정해줄 수 도 있고, 지정하지 않을 시에는 임의의 이름이 부여된다.
docker run --name [컨테이너명] -p [포트번호]:[이미지 실행포트] [이미지명] : Host포트와 컨테이너 포트를 연결한다.
docker ps : 실행중인 컨테이너를 확인할 수 있다.
docker stop [컨테이너명] : 실행중인 컨테이너를 중단한다.
docker ps -a : 실행중이거나 중단된 모든 컨테이너를 확인할 수 있다.
docker start [컨테이너명] : 중지된 컨테이너를 다시 실행한다.
docker rm [컨테이너명] : 컨테이너를 삭제한다. 단, 실행중인 컨테이너는 삭제할 수 없다.
docker rmi [이미지명] : 이미지를 삭제한다.

docker exec [컨테이너명] [명령어] : 실행중인 컨테이너를 대상으로 명령어가 실행된다.
docker exec -it [컨테이너명] /bin/sh 또는 bash : 해당 컨테이너로 들어가진다. 이제 명령어 입력시 해당 컨테이너를 대상으로 명령어가 실행된다.
exit : 다시 호스트로 돌아간다.

더 많은 명령어는 여기에서 확인하세요

불상사를 막기 위해

컨테이너에 실행되고 있는 서버를 실수로 지워버리면 안에 내용도 사라진다. 이 문제는 컨테이너 안에서의 파일시스템과 로컬의 파일시스템을 연결해줌으로써 실수로 삭제했을 경우라도 로컬에 남아 있기 때문에 문제없다. 실행환경은 컨테이너에서 파일 수정은 host에서 하는 방법이다.

  • host의 파일시스템과 컨테이너의 파일시스템 연결

docker run -p [포트번호]:[이미지 실행포트] -v [데스크탑의 파일 위치]:[컨테이너 안에서 웹페이지를 찾는 디렉토리] [이미지명]

ex) docker run -p 8080:80 -v ~/Desktop/htdocs:/usr/local/apache2/htdocs/ httpd

참고


생활코딩 - Docker

댓글