오늘 회사에서 서버를 받아서 깃헙에 있는 CenterNet 코드를 실행하려고 여러가지 환경설정을 할려고 했는데, 멘토분께서 docker 얘기를 꺼내셔서 한번 배우는 겸 써보자 싶어서 docker를 쓰게 되었다.
우선 docker란 개념은 virtualbox나 parallel 처럼 가상OS랑 많이 흡사한데 docker가 더 빠르고, 어플리케이션들이 각각 개별 컨테이너에서 돌아가기 때문에 다른 어플들과 충돌이나, 예를 들어 python을 update해서 갑자기 어플리케이션이 안돌아가는 불상사가 안생기기고, 컨테이너 그대로 다른 곳으로 배포하기 좋아서 industry standard가 되어가는거 같다.(약간 virtual environment의 범위를 크게 잡은 느낌?)
제공 받은 서버엔 이미 docker가 설치 되어있었는데 설치 방법은 상당히 쉬운거같다.
curl -fsSL https://get.docker.com/ | sudo sh
리눅스에서 사용
요렇게 다운 받아서 컨테이너를 실행하면 된다
sudo docker run ubuntu:16.04
ubuntu 16.04 컨테이너를 실행해보자.
지금 ubuntu 16.04 image가 없어서 우선 image를 pull 한다음 실행이된다.
실제 컨테이너의 안에 들어가서 사용하기위해선 docker run
을 할때 option들을 추가해 줘야 한다.
sudo docker run --rm -it ubuntu:16.04 /bin/bash
-it 옵션은 키보드 입력을 위한거라고 한다. 옵션이 엄청 많으니 다른걸 찾으면 또 정리 해보겠다.
ubuntu 말고 mysql이나 다른 어플리케이션들을 컨테이너로 돌릴 수 있는데 지금은 그냥 우분투으로도 벅차다;; ㅋㅋ
Container를 작업하다가 저장하고 싶을때 commit 커맨드로 저장하자(사실 dockerfile로 저장하는걸 docker에선 추천한다..)
sudo docker commit [container] [image]
commit을 하다가 이런 에러 메시지가 나오면서 commit이 안될때가 있었다.
Error response from daemon: Error processing tar file(exit status 1): unexpected EOF
찾아보니 docker에서 파일이 8기가 넘는 1개의 파일이 있으면 commit이 안된단다. Unzip을 해서 다시 해보았다.
ㅋㅋㅋ 잘된다 잘된다. 이거 하려고 한 한시간은 삽질 한듯...
그런데 이미지에 이렇게 데이터를 저장하는건 추천하지않는다. 이미지가 너무 커지기 때문에...
Docker의 세계는 끝이 없다.