我现在做的是 Linux C++ 开发,但手头上没有 Linux 设备。目前的常用的方法有两种:
- 云主机;
- 虚拟机。
但是使用云主机不方便,使用虚拟机对电脑有一定要求。还有第三种方法:Docker。
本文介绍我使用 Docker 搭的一个 Linux C++ 编译环境。以下是我的需求:
- 可远程调试的 C++ 编译环境;
- 远程连接工具:ssh;
- 版本控制工具:git;
- 编辑器:Vim;
- 好用的 shell:zsh 和插件。
系统
常用的 Linux 系统有:CentOS 和 Ubuntu,我选择了Ubuntu。
From ubuntu:latest
换源
由于 Ubuntu 中包管理工具的源的服务器在国外,在国内使用 apt 安装软件,网速经常会很慢。先将源换成国内的源(阿里云)。
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
apt clean && \
apt update
C++编译环境
build-essential
包含了编译所需要的软件,不过cmake
需要另外安装。另外,Clion 需要rsync
来同步数据。
# 编译工具
RUN apt install -y build-essential
RUN apt install -y cmake
RUN apt install -y gdb gdbserver
RUN apt install -y rsync # Clion 需要 rsync 同步数据
RUN apt install -y vim # vim
RUN apt install -y git # git
ssh
参考GitHub。不同 Ubuntu 版本的配置有差异。该仓库中有其他版本的配置信息。
RUN apt install -y openssh-server
RUN mkdir /var/run/sshd && \
mkdir /root/.ssh
# 修改 root 的密码为 123456
RUN echo 'root:123456' | chpasswd
RUN sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
Zsh
参考把zsh放到docker里这篇文章,将 Bash 换成 Zsh。
RUN apt install -y zsh
RUN git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh \
&& cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc \
&& chsh -s /bin/zsh
还安装了一些插件:
# 参考
# https://segmentfault.com/a/1190000015283092
# https://juejin.im/post/5cf34558f265da1b80202d75
# 安装 autojump 插件
RUN apt install -y autojump
# 安装 zsh-syntax-highlighting 插件
RUN git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 安装 zsh-autosuggestions 插件
RUN git clone https://github.com/zsh-users/zsh-autosuggestions \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# 安装 git-open 插件
RUN git clone https://github.com/paulirish/git-open.git \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/git-open
RUN sed -ri 's/^plugins=.*/plugins=(git autojump zsh-syntax-highlighting zsh-autosuggestions git-open)/' ~/.zshrc
Dockerfile
在我的GitHub上有Dockerfile文件。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。