基於Docker的集成開發環境包含gvim&Emacs

拉取鏡像,docker pull jiftle/dev-env:latest

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

ScreenShot

  • MacOs
  •  

     

  •  

     

     

     

     

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章