美文网首页工作生活
利用Docker和CLion在Mac优雅地开发和调试Linux

利用Docker和CLion在Mac优雅地开发和调试Linux

作者: Fearimdly | 来源:发表于2019-07-04 00:13 被阅读0次

    最近在做一些新的东西,所以学习了一些新的东西,也对旧知识加强了很多,所以终于有东西可以记录一下了。

    今天先更新一篇简单的教程,写个开发的小技巧,工欲善其事必先利其器(嘻嘻)。

    最近的工作主要使用C++进行开发,作为Android开发者,肯定是对JetBrains全家桶情有独钟(不过说实在的JetBrains家的产品确实很好用),所以IDE肯定是首选Clion。

    我现在的开发电脑是Mac,工作需要Linux环境。虽然说Mac和Linux有很多相似的地方,但是对于最近的工作所涉及到的系统机制来说,Mac和Linux还是非常不一样的,并且Clion在Mac和Linux环境中的代码高亮和提示也不一样,除此之外还有诸多限制。最开始的做法是在Mac里装了Ubuntu虚拟机,然后在虚拟机里做开发,但是毕竟是虚拟机,体验还是有些不好。后来发现了Clion的远程开发功能,顾名思义就是在本地写代码,在远程服务器上编译和调试。

    但是,租一台服务器成本太高了,而且如果是真远程的话,调试的速度会受到影响。因此决定在利用Docker“虚拟”一个Ubuntu环境。

    Docker没安装的话搜一下吧,几行命令就可以了

    首先贴上Dockerfile

    FROM ubuntu:16.04
    
    RUN apt-get update
    
    RUN apt-get install -y build-essential
    RUN apt-get install -y cmake
    RUN apt-get install -y gdb
    
    RUN apt-get install -y openssh-server
    RUN mkdir /var/run/sshd
    RUN sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
    RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
    
    RUN apt-get install -y rsync
    RUN sed -ri 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/g' /etc/default/rsync
    COPY rsync.conf /etc
    
    RUN echo 'root:000000' |chpasswd
    
    RUN mkdir /root/sync
    
    COPY entrypoint.sh /sbin
    RUN chmod +x /sbin/entrypoint.sh
    ENTRYPOINT [ "/sbin/entrypoint.sh" ]
    

    稍微解释一下:

    1. 因为ubuntu官方的Docker镜像什么都没有,所以肯定要先把C++开发环境装好
    2. 然后Clion利用SSH来在本地操作远程服务器和上传下载文件,所以ssh server要装一下
    3. 接下来这个rsync也很重要,clion的官方解释是用来同步文件的,一开始我没有装这个,cmake-build文件夹死活同步不下来,这个rsync需要一个配置文件,我等一下贴在下面
    4. 这个之后给root用户设置一个密码
    5. 在创建一个文件夹用来存放代码

    这里还需要说明的是,因为仅仅是一个本地Linux环境而已,所以一切操作都用的是root账户,而没有创建其他账户。

    rsync需要一个配置文件
    rsync.conf很简单

    # 编辑配置信息
    max connections = 8
    log file = /var/log/rsync.log
    timeout = 300
    
    [sync] # 模块名
    comment = sync
    # path为需要同步的文件夹路径
    path = /root/sync
    read only = no
    list = yes
    uid = root
    gid = root
    

    注意path一定要和之后的clion中设置一样

    还有一个entrypoint.sh就两行启动代码:

    #!/bin/bash
    
    /usr/bin/rsync --daemon --config=/etc/rsync.conf
    /usr/sbin/sshd -D
    

    接下来创建好docker镜像之后就可以用docker-compose启动了

    version: "3"
    
    services:
      env:
        image: linux-env:latest
        container_name: linux-env
        ports:
          - "45678:22"
          - "8730:873"
        cap_add:
          - ALL
    

    这里22是ssh端口,873是srync端口,下面这个cap_add一定要写,不然会导致ptrace无法正常调用,导致GDB不工作。

    docker镜像启动之后,需要设置Clion了

    Toolchains
    1. 首先选中Toolchains
    2. 添加一个Toolchains
    3. 选择Remote Host
    4. 点击配置
    5. 根据刚才Docker中的配置填写

    然后切换到Cmake, 点击新建,注意Toolchain一定要选择刚刚创建好的远程Toolchain

    CMake

    接下来切换到Deployment,点击新建,然后按照Docker的配置填写

    Deployment

    接着切换到Mappings选项卡,Local Path就是项目地址,Deployment path就是远程地址,Local Path的文件会上传到Deployment Path,然后在远程编译

    Mappings

    配置完成之后,记得Resync一下项目。

    最后,点击Configurations,选择刚刚创建的cmake环境即可进行切换切换(因为这里只做演示,没有实际再配置一遍,就P了个图)

    Configurations

    现在,就可以愉快地进行Linux C++的开发了。如果把Docker在Windows上生成一遍的话,应该也是没什么问题的。使用下来,可以感觉到确实比开一个虚拟机要节省资源的多。

    相关文章

      网友评论

        本文标题:利用Docker和CLion在Mac优雅地开发和调试Linux

        本文链接:https://www.haomeiwen.com/subject/lytkhctx.html