基于docker搭建开发环境

作者: 业翔 | 来源:发表于2019-11-10 22:26 被阅读0次

    我每次在换电脑的时候,总是不可避免地部署自己的开发环境,而开发环境的安装和配置往往是非常耗时的。于是我想了一个办法,让自己减轻这类烦恼,这篇文章主要是总结如何配置我的开发环境。

    不管新电脑是windows还是mac,我都必须需要进入Linux开发,而且我已经习惯了在Linux下使用emacs进行开发,所以我打算把尽可能多的环境都放入Linux中。由于docker已经很成熟,其配套设施也很完善,所以使用docker来封装自己的Linux环境,并把对应的镜像上传到服务器。这样,不管换什么电脑,我都能够快速安装自己的环境了。对于寄主电脑,只需要安装docker, git,浏览器,通讯工具,shell终端等少量软件,所以寄主电脑将会非常简洁,而且由于有内置系统,对里面的文件保密性会很好。

    这里我使用的是windows10,docker和git使用最新版。

    构建Docker实例在于编写Dockerfile。这里有个小技巧,尽量别在Dockerfile中执行太多Linux命令,一方面是由于Docker在构建的时候会给每一步都生成镜像,另一方面由于构建开发环境过程中,经常需要修改构建脚本,如果把脚本写在Dockerfile,而脚本运行前需要修改内核的参数,则很有可能会出现异常。取而代之,在Docker容器中进行各种安装操作才是比较合理的。
    由于我使用Docker封装自己的开发环境,所以在Dockerfile中,只包含一些简单的配置,比如使用什么镜像,暴露什么端口,复制什么文件等。以下是Dockerfile配置:

    FROM centos:7
    
    COPY ./workspace /home/
    
    EXPOSE 8080
    EXPOSE 8888
    EXPOSE 80
    EXPOSE 443
    EXPOSE 20-22
    EXPOSE 9000-9015
    

    编写好Dockerfile之后,就可以使用docker构建和实例化容器了。以下是相关命令:

    docker build -t work:v1 . # 构建镜像
    docker run -d -i -t -p 9000:9000 -p 9001:9001 -p 8080:8080 -p 800:80 -p 8888:8888 -p 4433:443 -p 8022:22 -p 8020:20 -p 8021:21 --privileged --mount type=bind,source=E:/project/work/v1,target=/root/workspace work:v1 /usr/sbin/init    #启动容器
    docker exec -it 8f94432c2f43c2eaa /bin/bash    #进入容器
    

    这里需要注意的是要配置好自己的目录,以便能够正常挂载卷,以及复制内容到镜像里。

    而要封装自己的开发环境,则需要编写脚本来自动安装各种自己所需的软件,自动配置各类参数。因此需要认真编写自己的shell了。以下是shell实例:

    #!/bin/bash
    
    # 换yum源,使得安装软件速度加快
    yum install -y wget
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    yum makecache
    
    # 各种软件或扩展
    yum install -y vim
    yum install -y unzip gcc make ncurses-devel ncurses zlib-devel libuuid-devel libX11-devel
    yum install -y libXpm-devel libjpeg-devel libgif-devel libungif-devel libtiff-devel gnutls-devel libpng-devel openjpeg-devel gtk2-devel giflib-devel openssl-devel curl-devel
    
    # 我使用ssh来操控docker系统
    yum -y install openssh-server openssh-clients sudo
    
    # 编译安装最新版git
    cd ${TOOLS_PATH}
    wget https://gitee.com/dasheng523/git/repository/archive/master.zip
    unzip master.zip
    rm -rf master.zip
    cd git
    make
    make install prefix=/usr/local
    
    # spacemacs -- 我的主要开发工具,根据自己喜好选择自己的编辑器
    sysctl -w kernel.randomize_va_space=0    # 由于安装emacs可能会报错,先禁用这个内核配置
    cd ${TOOLS_PATH}
    emacs_version=emacs-26.3
    wget https://mirrors.tuna.tsinghua.edu.cn/gnu/emacs/${emacs_version}.tar.gz
    tar zxvf ${emacs_version}.tar.gz
    rm -rf ${emacs_version}.tar.gz
    cd ${emacs_version}
    ./configure --with-mailutils --with-pop
    make && make install prefix=/usr/local
    cd ${TOOLS_PATH}
    git clone git@gitee.com:dasheng523/spacemacs.git ~/.emacs.d
    ln -s ${WORKSPACE_PATH}/.spacemacs /root/.spacemacs
    sysctl -w kernel.randomize_va_space=2   # 恢复配置
    
    # 其他配置......
    

    在安装脚本里,我安装了ssh和spacemacs。这样我就可以在寄主电脑中使用ssh来操控容器了,而不需要每次都exec进入容器。spacemacs是我的主要开发工具,它是一个强大的IDE,能够编辑几乎所有的编程语言,我也将在容器里使用它来进行开发。这个脚本是简陋的,如果直接运行可能会报错,所以具体配置时需要根据自己的情况来编写。

    安装完之后,还需要在windows10配置一下终端,毕竟windows终端实在太烂了。这里我使用的是wsl 和 wsl-terminal 。
    以下是安装方法:
    wsl 安装
    wsl-terminal安装

    以前总是碰到在SSH中运行emacs的文本复制不出来的问题,其实只要禁用emacs的鼠标功能就可以了。
    禁用emacs鼠标功能

    # 第一种方法
    安装 disable-mouse packages
    init.el 文件中加入一行
    (global-disable-mouse-mode)
    
    # 我使用的配置
    (xterm-mouse-mode -1 )
    

    相关文章

      网友评论

        本文标题:基于docker搭建开发环境

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