전체 적인 Docker 의 명령어를 알고 싶으면 공식 Document 를 검색해보자.
Docker run reference | Docker Documentation
# 아래의 명령어들은 Unity-Robotics-Hub를 위한 ros docker 설치를 기준으로 작성하였다.
실행 중인 Docker conatiner 검색
docker ps -a |
Docker 실행
Docker Image를 실행하는 기본 명령어
docker run -it --rm -p 10000:10000 unity-robotics:pick-and-place /bin/bash |
Option 설명
-i : interactive mode
-t : tty 접속
--rm : docker conatiner 를 exit 하면 자동 삭제함
-p : tty port forwarding 설정
--rm 옵션을 없앤 상태에서 container의 terminal을 종료하면 상태가 running -> exited 로 변경된다.
Container 실행 및 종료
docker start -ia <container id> docker stop <container id> |
Container id 는 위에서 docker ps -a 명령어로 설치된 container id 값을 복사해서 넣거나 docker hub 에 표시된 id를 입력하면된다.
Container 영구 실행
docker run --name unity-ros-tutorial -it -d -p 10000:10000 unity-robotics:pick-and-place /bin/bash |
여기에서는 name option을 추가해서 container를 detach 하여 background 에서 동작하게 하고 exec 명령에서 쉽게 attach 할 수 있도록 하였다.
docker exec -it unity-ros-tutorial /bin/bash |
Conatainer exec 실행 TroubleShooting
docker image의 dockerfile에 entrypoint가 있는 경우에는 docker run 명령일 경우에만 마지막에 실행이 된다.
그렇기 때문에 docker exec 명령으로 container를 재실행하는 경우에는 직접 entrypoint를 실행해야만 한다.
Unity-Robotics-Hub의 경우에는 Dockerfile 의 마지막에 다음 명령어가 포함되어 있다.
ENTRYPOINT ["/tutorial"] |
docker exec 실행하고 roslaunch 를 실행하면 명령어를 찾을 수 없다고 나오는데 bash 가 실행된 뒤에 entrypoint의 명령어를 source /tutorial 로 입력하면 찾을 수 없던 명령어를 인식하게 된다.