sudo docker run -it --env="DISPLAY" --runtime=nvidia --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --network host --env ROS_MASTER_URI=http://localhost:11311/ --privileged --gpus all --name [containername] murraiya/[image]:[tag]
sudo docker run -it --env="DISPLAY" --runtime=nvidia --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --network host --env ROS_MASTER_URI=http://localhost:11311/ --privileged --gpus all --name [containername] murraiya/[image]:[tag]
rosrun rviz rviz -d /home/rcvlab/rviz.rviz //rviz 설정파일
roscore 안켜지면
source /opt/ros/noetic/setup.bash
local 에 xhost 설치
local에 ROS 설치
local에 까는건 이게 끝. 나머지는 도커에 깔고 local과 도커 GUI 연결하기.
local과 도커의 ROS를 연결하고 코드도 local의 VS코드로 편집.
osrf docker image (ubuntu+ros:noetic)에 opencv 설치 후 murraiya/ros:opencv* 로 이미지 만듬
vscode에서 ctrl+shift+p 하고 attach to running container 해서 코드 편집하기
docker를 설치해준다. 구글보고 알아서 하셈. sudo docker hello-world 로 제대로 나오나 확인.
우분투 이미지 받아오기. : 뒤는 태그임.
sudo docker pull ubuntu:20.04
지금 실행중인 컨테이너와 이미지 확인
sudo docker ps -a //실행중인 컨테이너 나열
sudo docker images //내가 가진 이미지 나열
이미지 하나에서 여러 컨테이너 생성 가능. 예를 들어 우분투 이미지에서 두 개의 컨테이너를 실행해 다른 환경을 구축해볼 수 있음. 내가 이미지를 변경하지 않는 한 컨테이너에서 일어나는 변경사항은 이미지와 무관함. 이미지는 바뀌지 않는다는 뜻.
컨테이너 삭제 (실행중이 아닐 때 가능)
sudo docker rm [3번의 ps -a 결과중 하나]
이미지 삭제 (컨테이너 없을때 가능)
sudo docker rmi [3번의 images 중 하나]
컨테이너 일시정지
sudo docker pause [container]
sudo docker unpause [container]
컨테이너 종료
sudo docker stop [container]
컨테이너 강제종료
sudo docker kill [container]
이미지에서 컨테이너 생성
sudo docker run --name [이름] -dit ubuntu:focal //우분투 이미지로 컨테이너 만듬
sudo docker ps -a //만든 컨테이너 확인
컨테이너 접속
sudo docker attach [컨테이너 이름] //root 터미널 접속
~~:/# //명령어 입력가능. exit으로 나갈 수 있음.
//켜놓은 상태로 같은 터미널에 또 접속
sudo docker exec -it [컨테이너 이름] bash
Dockerfile
sudo docker build --no-cache --force-rm -f [Dockerfile] -t [이미지이름] .
# --no-cache 는 이전 빌드에서 생성된 캐시를 사용하지 않겠다는겁니다. 생성시간을 줄이기 위해서 캐시를 사용하는 경우도 있는데, 처음 사용하는 사람은 실수하기 쉬우니 일단 no cache 옵션을 씁시다.
# --force-rm 은 빌드하다가 터지면 이미지/컨테이너를 지워줍니다.
# -f 는 사용할 Dockerfile의 이름을 명시합니다
# -t 는 우리가 만드는 이미지의 이름 + 태그를 명시합니다
# . 는 Dockerfile의 경로를 명시합니다.
컨테이너를 이미지로 만들기
sudo docker commit [컨테이너 이름] [dockerhub ID]/[이미지이름:tag]
docker hub에 이미지 올리기