基于docker搭建开发环境

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

不管新电脑是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 [email protected]: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搭建开发环境)