• 以clion为例记录一次基于docker环境配置开发


             docker系列介绍到这一篇,想要以一次实战案例来进行阐述,于是产生了这篇文章。

    (1)简单介绍

           clion作为jetbrains家族一款强劲的ide,多见于c++开发,而docker又是一个环境管理的利器,两者结合起来使用,在实际开发过程中往往可以做到事半功倍的效果,尤其是在一些多环境多版本控制开发中。那具体怎么结合呢,废话不多说,直接上干货。

    (2)具体配置

    》docker

    至于docker的基本安装和使用,这里不再赘述,可以去查我看前面的文章。这里默认拉取的是一个ubuntu环境镜像(默认已经安装gcc g++ cmake这些等),接下来需要安装配置的是ssh,ubuntu下在docker里面安装ssh

    apt install openssl openssh-server

    然后修改ssh配置允许root登录,在docker容器内,编辑文件/etc/ssh/sshd_config,添加一行PermitRootLogin yes表示ssh允许root登录。

    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config # 或者 vim /etc/ssh/sshd_config 并手敲一行PermitRootLogin yes

    随后一定要重启ssh服务

    service ssh restart

    至于在docker容器内,初始化root密码,用于下一步的登录,则具体操作如下,

    passwd root

    根据提示输入初始密码。然后可以在本地测试链接一下

    ssh root@localhost -p  xx  ###容器22端口映射的本地端口

    上面的开启方法只能在终端一直开启 状态下使用,一旦终端关闭重新打开就失效,如果想要开机自启动则需要进行下面操作。

          正常我们在linux操作系统内设置服务自启动的方法一般都是使用systemctl。

    systemctl enable ssh

    但是,一般在docker容器内我们一般不这么干,因为容器内没有systemctl权限……,我们依然还是使用脚本的形式将ssh设为自启,只不过这个的这个脚本和我们使用Dockerfile的脚本不一样。具体步骤如下:

    • 在 /root 目录下新建一个 start_ssh.sh文件,并给予该文件可执行权限。
    touch /root/start_ssh.sh  vim /root/start_ssh.sh chmod +x /root/start_ssh.sh

    而start_ssh.sh 脚本的内容,如下:

    1. #!/bin/bash
    2. LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
    3. echo "[$LOGTIME] startup run..." >>/root/start_ssh.log
    4. service ssh start >>/root/start_ssh.log ###其他服务也可这么实现
    • 将start_ssh.sh脚本添加到启动文件中
    vim /root/.bashrc
    •  在 .bashrc 文件末尾加入如下内容:
    1. # startup run
    2. if [ -f /root/start_ssh.sh ]; then
    3. . /root/start_ssh.sh
    4. fi
    •  保存后,可以source一下看看有没有问题,等下次重启容器的时候,添加的服务也就跟着重启了。

    至此docker内的配置完成了。

    》clion

    对于clion的用户,如果习惯pycharm的使用,相信不会太陌生,这里主要操作如下

    1、首先在CLion中添加SSH

    在设置中的 工具 —>  SSH配置  —>  点击+号添加

    注意这里的端口和本地端口是针对你在启动docker时做的端口映射,根据自己的情况进行修改。

    2. 在Clion 添加工具链

    在设置中的 构建、执行、部署  —>  工具链  —>  点击+号添加

     3. 在Clion 添加远程cmake

    • 构建、执行、部署 
    • cmake
    • 点击+号添加
    • 修改名称为自己需要的名称
    • 构建类型选择自己需要的类型
    • 工具链选择刚刚创建的工具链
    • 其他选项看情况修改

     Toolchian选择配置好的远程服务器。如果是cuda编程CMake options需要配置:

    -DCMAKE_CUDA_COMPILER:PATH=/usr/local/cuda/bin/nvcc

    否则会报“No CMAKE_CUDA_COMPILER could be found.”错误。点击ok确认保存后CLion就会进行连接加载,再次打开Preference可看到Deployment会自动增加部署文件。

    在配置基于docker的ros环境时,按照上面的步骤配置完成后,如果还报找不到“catkin”错误,这还需要在clion的cmake里配置一下环境

    至于怎么找到docker里面ros相关的一些环境变量信息,可以运行下面sh脚本,然后复制即可

    1. ros_env="AMENT_PREFIX_PATH CMAKE_PREFIX_PATH COLCON_PREFIX_PATH PKG_CONFIG_PATH PYTHONPATH LD_LIBRARY_PATH PATH ROS_DISTRO ROS_PYTHON_VERSION ROS_LOCALHOST_ONLY ROS_VERSION"
    2. env_string=""
    3. for e in ${ros_env}; do
    4. env_string+="$e=${!e};"
    5. done
    6. echo "$env_string"

    4.重新载入cmake项目

    点击主界面上栏的文件中的重新加载cmake项目。

    5.查看、设置构建项

    把构建配置选为刚刚设置的配置

     6、运行、调试

    运行可以看到在生成的目录是远程的目录

     调试,调试也正常

           上面的远程链接方式没有涉及到本地文件和远程服务器映射,如果需要做文件映射,则还可以采用如下的方式进行配置:

    1、打开CLion -> 选择文件 -> 设置 -> 构建、执行、部署 -> 部署 -> 点击加号(添加一个远程配置) -> 设置为SFTP协议(默认)

     2、点击SSH配置后三点 -> 输入远程主机(IP)、端口、用户名(root)、密码 -> 点击测试链接(确定是否能成功连接到远程机)

     3、连接选项中的根路径和Web服务器URL不用管 -> 点击映射 -> 设置本地路径 -> 设置部署路径

    本地路径:本地项目代码的根目录

    部署路径:远程项目代码的根目录

     4、一开始本地没有项目代码则右键本地项目目录 -> 点击部署 -> 点击下载(将远程代码同步到本地)

     5、后面如果在本地修改代码之后需要同步到远程 -> 右键选择部署 -> 点击上传(可以开启自动上传,即本地代码修改之后自动同步到远程)

     6、本地使用远程环境编译代码:点击终端 -> 点击下三角 -> 选择远程服务器地址

     不过上面这种远程文件映射我觉得麻烦,还是比较喜欢在docker启动时直接利用-v做好文件挂载即可,这里看自己的使用习惯啦!

    》配置关联

    想要将上面的配置关联起来,其实就是在启动镜像时做好这俩点即可

    docker run -it -p xxx:xx -v xxx:xxx image

    设置好对应的端口和挂载的文件路径即可。

    (3)使用体验

           当一切都配置好了,尤其是远程环境,就像正常本地运行脚本一样,这里就不放图啦,今天就记录到这吧!

  • 相关阅读:
    200+ Java常见面试题总结《最少必要面试题》
    面试面经|java面试异常面试题
    android 全屏FullScreen的配置
    MySQL常见面试题(四)
    激光雷达技术详解:MATLAB代码实践与遥感测距原理通俗解析
    Qt-OpenCV学习笔记--图像边界处理--copyMakeBorder()
    P4068 [SDOI2016]数字配对
    分享一个基于微信小程序的社区生活小助手源码调试和lw,有java+python双版本
    乐观锁和悲观锁
    你知道Spring使如何实现事务管理的?
  • 原文地址:https://blog.csdn.net/xiaomu_347/article/details/126762754