1、docker容器暴露多個端口
To expose just one port, this is what you need to do:
docker run -p <host_port>:<container_port>
To expose multiple ports, simply provide multiple -p arguments:
docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>
或者你可以直接橋接網絡,然后在dockerfile上面直接expose你所需要的端口,這樣可以免去-p參數
2、gitlab-runner自動化部署
3.1、注冊runner
命令:sudo gitlab-ci-multi-runner register
➜ ~ sudo gitlab-ci-multi-runner register Running in system-mode. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): http://193.188.2.40/ Please enter the gitlab-ci token for this runner: Xyx8EEd4YeaMSLv7Snh7 Please enter the gitlab-ci description for this runner: [sti-DL]: sdk_AutoDeploy Please enter the gitlab-ci tags for this runner (comma separated): sdk_AutoDeploy Whether to run untagged builds [true/false]: [false]: true Whether to lock Runner to current project [true/false]: [false]: true Registering runner... succeeded runner=Xyx8EEd4 Please enter the executor: shell, docker+machine, docker-ssh+machine, docker-ssh, parallels, ssh, virtualbox, kubernetes, docker: docker Please enter the default Docker image (e.g. ruby:2.1): dockerName:v1.0.0 Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
3.2、docker 掛載宿主的GPU驅動、cuda設備文件
通過gitlab-ci-multi-runner register
注冊的Runner配置會存儲在/etc/gitlab-runner/config.toml
配置文件中,項目中的SDK需要調用英偉達顯卡驅動和cuda,通過修改配置文件使得gitlab-runner啟動容器時自動加載驅動和cuda。具體配置如下:
...
1)、gitlab-runner啟動容器時掛載宿主機驅動的方法
.gitlab-ci.yml文件 gitlab-runner啟動容器默認配置文件是不掛載宿主機上的NVIDIA驅動的,若想gitlab-ci啟動容器掛載驅動,可以通過下面的方法:
修改在*****目錄下的config.toml配置文件。
如下:
[[runners]] name = "my-runner2" url = "http://182.158.10.30/" token = "d67392c2aa868f95ddd0256eb42b1b" executor = "docker" [runners.docker] tls_verify = false image = "127.0.0.1:5000/rs-sdk-test" privileged = false devices = ["/dev/nvidia0:/dev/nvidia0","/dev/nvidiactl:/dev/nvidiactl","/dev/nvidia-uvm","/dev/mem:/dev/mem"] disable_cache = false volumes = ["/cache"] shm_size = 0 [runners.cache]
主要是添加devices一行,gitlabrunner啟動的容器就會自動掛載宿主機上的NVIDIA驅動。
2)、在終端上啟動容器掛載驅動和cuda的方法
sudo docker run -it --name NAME -v /home/:/mnt/home --privileged=true --device /dev/nvidia-uvm:/dev/nvidia-uvm --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl myconda:cuda bash
sudo docker run --privileged=true --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm --device /dev/mem:/dev/mem -it 127.0.0.1:5000/rs-sdk-test:latest
3.3、在master分支中添加.gitlab-ci.yml
.gitlab-ci.yml文件的格式有特定的語法規則,詳細語法見官方文檔。本項目中的.yml文件如下:
image: localhost:5000/***:v1.0.0 before_script: - echo "hello world!" stages: - build - test job1: stage: build script: - nvidia-smi - cat /usr/local/cuda/version.txt - export OpenCV_DIR=/opt/ros/kinetic/include/opencv-3.3.1-dev - source /opt/ros/kinetic/setup.bash - cd /builds/rs_ws_test/ - ls # - sh /builds/rs_ws_test/rs_perception/compileRos.sh - cd ~/PerceptionSDK/rs_ws_2.2.0/src - ls - rm -rf ~/PerceptionSDK/rs_ws_2.2.0/src/rs_perception - ls # - gnome-terminal -x ~/PerceptionSDK/rs_ws_2.2.0/roscore # - gnome-terminal -x ~/PerceptionSDK/rs_ws_2.2.0/rosparam list # - gnome-terminal -x ~/PerceptionSDK/rs_ws_2.2.0/rosparam get/rosdistro - mv /builds/rs_ws_test/rs_perception ~/PerceptionSDK/rs_ws_2.2.0/src/ - mv ~/PerceptionSDK/rs_ws_2.2.0/src/rs_perception/tensorRT ~/PerceptionSDK/rs_ws_2.2.0/src/rs_perception/tensorRT10 - mv ~/PerceptionSDK/rs_ws_2.2.0/src/rs_perception/tensorRT9 ~/PerceptionSDK/rs_ws_2.2.0/src/rs_perception/tensorRT - cd ~/PerceptionSDK/rs_ws_2.2.0 - catkin_make - echo "hello world!" tags: - perception-runner
3.4、寫完.yaml配置文件后遇到下面這個問題
解決方法:搞定在寫。。。