【成果展示】基于Docker的集成开发环境包含gvim&Emacs
缘起缘落
来源一个梦想,随身携带的开发环境,docker是个合适的工具,把开发环境和软件安装到docker内,到一个新的电脑只需要拉取docker镜像,就可以具有完整的开发环境了。
花落,实践证明,这只是个梦,docker开发者、开源大佬,包括我都是这个梦想的实践者,放弃者。
体验
拉取镜像,docker pull jiftle/dev-env:latest
ScreenShot
- MacOs
-
-
README
Intr
Dev-Env is Develop Envir with vim & emacs, golang & node. It soupport x11 gui apps, contain gvim ,emacs ,eclipse.
Include
base apps
- xz-utils
- tree
- curl
- wget
- htop
- nmap
- git
- tig
build-env
- build-essential
- gcc
- g++
- make
- cmake
lang-dev
- golang 1.14.2
- node 14.1.0
x11 gui apps
- gvim 8.2
- emacs 26.3
- eclipse 4.15.0 (2020-03)
How To Use
MacOS 10.15.4
% cat conf.cnf
#!/bin/bash
# -----------------------------------------------------------------
# FileName: conf.cnf
# Date: 2020-01-09
# Author: jiftle
# Description:
# -----------------------------------------------------------------
DockerKey="jiftle/dev-env"
DockerVer="1.0"
DockerName="dev-env"
# ------- 处理GUI显示的问题,原理:x11共享 -------
IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
% cat run.sh
#!/bin/bash
# -----------------------------------------------------------------
# FileName: run.sh
# Date: 2020-01-09
# Author: jiftle
# Description:
# -----------------------------------------------------------------
. ./conf.cnf
echo " |--> 当前主机IP: $IP"
# --------------- 定义变量 ------------------
GitPath="${HOME}/tg-git"
HostIp="$IP"
echo "------------- 运行[${DockerKey}:${DockerVer}]镜像的容器 ------------"
echo "---> 开始启动[${DockerKey}:${DockerVer}] Docker"
# -e GDK_SCALE \
# -e GDK_DPI_SCALE \
# ----------- 运行容器 ------------
docker run -itd \
`# 注释请忽略,----------- 设置名称 -------------` \
--name="${DockerName}" \
`# 注释请忽略,----------- 工作目录映射 -------------` \
-w /root `# 默认工作目录` \
-v ${HOME}:/home/john `# 默认工作目录,映射` \
-v ${GitPath}:/home/john/git `# git仓库目录` \
`# 注释请忽略,----------- 用户密钥 -------------` \
-v ${HOME}/.ssh:/root/.ssh `# .ssh密钥` \
`# 注释请忽略,----------- 端口映射 -------------` \
-p 8022:22 `# ssh端口` \
-p 8001:8001 `# 日志仓库,预览服务` \
-p 8080:8080 `# web程序调试端口` \
-h "${DockerName}" `# 机器名` \
--restart=always `# 自启动,容易导致挂载的分区,晚于docker` \
`# 注释请忽略,----------- 图形界面 -------------` \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=${HostIp}:0 \
`# 镜像名` \
${DockerKey}:${DockerVer}
echo "---> 启动[${DockerKey}:${DockerVer}] Docker完毕"
% cat exec.sh
#!/bin/bash
# -----------------------------------------------------------------
# FileName: exec.sh
# Date: 2020-01-09
# Author: jiftle
# Description:
# -----------------------------------------------------------------
. ./conf.cnf
# echo " |--> 当前主机IP: $IP"
# xhost + $IP
# docker exec -it -e DISPLAY=$IP:0 dev-env bash
echo " |--> 当前主机IP: $IP"
xhost + $IP
docker exec -it -e DISPLAY=$IP:0 ${DockerName} bash
# ------------ 不显示IP地址
# xhost +
# docker exec -it -e DISPLAY=:0 dev-env bash
# xhost +
# docker exec -it dev-env bash
# docker exec -it ${DockerKey} bash
Deepin linux 15.11
% cat config.cnf
#!/bin/bash
# -----------------------------------------------------------------
# FileName: commit.sh
# Date: 2020-01-17
# Author: jiftle
# Description: 提交当前镜像
# -----------------------------------------------------------------
DockerKey="dev-env"
# DockerVer="0.1"
# DockerVer="latest"
DockerVer="eclipse3.8"
DockerName="开发环境"
% cat run.sh
#!/bin/bash
# -----------------------------------------------------------------
# FileName: run.sh
# Date: 2020-01-09
# Author: jiftle
# Description:
# -----------------------------------------------------------------
. config.cnf
# --------------- 定义变量 ------------------
GitPath="/usrlocal/git"
MavenPath="/usrlocal/maven"
echo "================= [${DockerName}(${DockerKey}:${DockerVer}] ===================="
echo "---> 设置x11访问控制"
xhost +
echo " |--> [${DockerName}(${DockerKey}:${DockerVer}] 开始启动..."
# ----------- 运行容器 ------------
docker run -it \
`# 注释请忽略,----------- 设置容器实例名称 -------------` \
--name="${DockerKey}" \
`# 注释请忽略,----------- 工作目录映射 -------------` \
-w /root `# 默认工作目录` \
-v ${HOME}:/home/john `# 默认工作目录,映射` \
-v ${GitPath}:/home/john/git `# git仓库目录` \
-v ${MavenPath}:/home/john/maven `# maven仓库目录` \
`# 注释请忽略,----------- 用户密钥 -------------` \
-v ${HOME}/.ssh:/root/.ssh `# .ssh密钥,需要具有写权限` \
`# 注释请忽略,----------- 端口映射 -------------` \
-p 8001:8001 `# 日志仓库,预览服务` \
-p 8080:8080 `# web程序调试端口` \
`# 注释请忽略,----------- 解决时区问题 -------------` \
-v /etc/localtime:/etc/localtime:ro \
-h "${DockerKey}" `# 机器名` \
`# --cpuset-cpus="0" # 指定使用CPU的编号` \
`# -m 2G # 限制最大内存占用` \
--privileged \
`# --memory-swap=4G # 交换内存` \
--restart=always `# 自启动,容易导致挂载的分区,晚于docker,使用时做好磁盘挂载,建议修改/etc/fstab` \
`# -------------- GUI程序设置 ----------------` \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined `# 解决dlv调试附加失败的问题` \
`# 镜像名` \
${DockerKey}:${DockerVer} \
/sbin/init
echo " |--> [${DockerName}(${DockerKey}:${DockerVer}] 启动成功. ^-^"
% cat exec.sh
#!/bin/bash
# -----------------------------------------------------------------
# FileName: exec.sh
# Date: 2020-01-09
# Author: jiftle
# Description:
# -----------------------------------------------------------------
. config.cnf
docker exec -it ${DockerKey} bash
-
仓库 地址: https://hub.docker.com/r/jiftle/dev-env