docker를 만드는 과정을 진행하기에 앞서서 docker는 대체 왜 사용하는 걸까요?
docker를 사용하는 주된 이유는 개발환경을 이미지화 시켜서 개발 및 배포 환경을 컨테이너화 할 수 있기 때문입니다.
개발을 하다 보면 분명히 내 자리에서 빌드가 잘 되는 것을 확인하고 팀원들에게 배포를 진행했는데, 꼭 한-두명 씩 에러가 나는 경우가 있습니다.
물론 다른 문제로 인해서 에러가 난 경우도 있겠지만, 원인을 분석해보면 플랫폼이나 프레임워크의 버전이 달라서 발생하는 경우가 많습니다.
이것에 대한 해결책으로 저는 docker를 사용하고 있습니다.
팀원들과 같은 버전인 플랫폼, 프레임워크를 이미지에 올려놓고 컨테이너로 만들고 이 컨테이너에서 돌리면 로컬이랑 별개로 독립적으로 작업을 진행할 수 있기 때문에 관련 이슈들을 쉽게 해결할 수 있습니다.
또한, 빌드 중 치명적인 에러가 발생했을 경우에도 그저 관련 컨테이너만 제거하면 되기 때문에 안전성도 보장된다는 장점이 있습니다.
이제 docker hub 에 있는 ubuntu docker image를 setting해보는 시간을 가져보도록 하겠습니다.
ubuntu image의 경우 docker hub 사이트에 들어가서 ubuntu를 검색해보면 ubuntu 의 버전과 그에 맞는 image들을 쉽게 찾아 볼 수 있습니다.
저는 ubuntu 16.04 version image를 받아서 진행하였습니다.
$ docker pull ubuntu:16.04
docker image가 잘 pull 되었는지 확인합니다.
$ docker images
맨 하단에 ubuntu 16.04 image가 생성되어있는 것을 확인할 수 있습니다.
이제 docker 컨테이너를 run해 보도록 하겠습니다.
$ docker run --name <conatiner name> -dit <docker image>
여기서 사용하는 옵션은 다음과 같습니다.
container가 잘 생성되었는지 확인합니다.
$ docker ps
run 하고 있는 container에 접속하는 command는 다음과 같습니다.
$ docker exec -it [container id] /bin/bash
hostname이 해당 container id로 바뀐 것을 볼 수 있습니다.
exit 명령을 통해 접속 종료가 가능하며, docker container를 종료하는 명령어는 다음과 같습니다.
$ docker stop [container id] // 해당 컨테이너 종료
$ docker kill [container id] // 해당 컨테이너 강제 종료
보이는 것 과 같이 실행 중이었던 container가 내려간 것을 볼 수 있습니다.
docker kill command를 사용할 경우, 말 그대로 container가 강제 종료가 되는 것이기 때문에, 이후에 사용할 때 conflict error가 발생할 수 있습니다.
따라서, 심각한 문제로 강제 종료하는 경우가 아닐 경우 왠만하면 docker stop으로 container를 종료하는 것이 좋습니다.
docker restart는 종료한 container를 다시 시작하게 해주는 명령어이며, docker container 및 image를 지우는 명령어는 다음과 같습니다.
$ docker restart [container id] // 해당 컨테이너 다시 시작
$ docker rm //conatiner 삭제
$ docker rmi //image 삭제