目的 🎯:
基于Docker容器实现代码的远程开发,规避本地环境无网络、无依赖场景下开发问题。
示例附件 📎:
前提准备 ⚠️:
目标环境已有Docker
- Docker安装详见:【Docker笔记】Docker安装及配置_docker安装和配置csdn-优快云博客
一、构建远程开发环境
(一) 前端
1. 编写DockerFile
打包代码结构如下:
.
├── Dockerfile
├── code
│ ├── package-lock.json
│ └── package.json
⚠️ 安装依赖 需依据实际情况动态修改,确保依赖安装完整
FROM docker.fxxk.dedyn.io/node:18.20
# 设置镜像的时区为上海
ENV TZ=Asia/Shanghai \
LANG=C.UTF-8 \
LC_ALL=C.UTF-8 \
LANGUAGE=C.UTF-8 \
SHELL=/bin/bash
# 安装软件
RUN apt update && apt install -y vim && apt install -y openssh-server
# 设置ssh
RUN mkdir /var/run/sshd
RUN echo 'root:123456' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# npm 换源
RUN npm config set registry https://registry.npmmirror.com
COPY ./code /code/
WORKDIR /code
# 安装依赖
RUN npm i --force
RUN pnpm i
# 暴露SSH端口
EXPOSE 22
# 启动SSH服务
CMD ["/usr/sbin/sshd", "-D"]
2. 打包开发镜像
# 在Dockerfile所在目录执行以下命令
docker build -t {image_name} .
# 例
docker build -t node_dev:v1 .
3. 启动开发容器
docker run -d --name node_dev --restart=always -p 30022:22 -p 38080-38090:8080-8090 -v {dev_code_path}:/code node_dev:v1 /usr/sbin/sshd -D
-p 30022:22:映射容器22端口到30022
-p 38080-38090:8080-8090:开发时所用端口区间
-v {dev_code_path}:/code:{dev_code_path}需替换为实际本地代码位置
(二) 后端(Python)
1. 编写DockerFile
打包代码结构如下:
.
├── Dockerfile
├── gconfig.py
├── main.py
├── requirements.txt
└── start_server.sh
⚠️ 安装依赖 需依据实际情况动态修改,确保依赖安装完整
FROM docker.fxxk.dedyn.io/python:3.8.5
# 设置镜像的时区为上海
ENV TZ=Asia/Shanghai \
DM_HOME=/code/libs/dpi \
LD_LIBRARY_PATH=/code/libs/dpi
## 安装软件
RUN apt update && apt install -y vim && apt install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:123456' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# 开放22端口
EXPOSE 22
COPY . /code/
WORKDIR /code
# 安装python环境依赖包
RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
#RUN cd hnswlib && pip3 install .
RUN pip install gunicorn==20.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install --no-cache-dir -r /code/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
WORKDIR /code
# 启动命令
CMD sh /code/start_server.sh
#!/bin/bash
/usr/sbin/sshd &
/usr/local/bin/gunicorn main:app -c ./gconfig.py --preload --access-logfile -
import multiprocessing
debug = True
# //绑定与Nginx通信的端口
bind = '0.0.0.0:8009'
workers = 4 # 进程数
worker_class = 'uvicorn.workers.UvicornWorker' # 默认为阻塞模式,最好选择gevent模式,默认的是sync模式
loglevel = 'debug'
2. 打包开发镜像
# 在Dockerfile所在目录执行以下命令
docker build -t {image_name} .
# 例
docker build -t python_dev:v1 .
3. 启动开发容器
docker run -d --name python_dev --restart=always -p 30022:22 -p 38080-38090:8080-8090 -v {dev_code_path}:/code python_dev:v1 /usr/sbin/sshd & python main.py
-p 30022:22:映射容器22端口到30022
-p 38080-38090:8080-8090:开发时所用端口区间
-v {dev_code_path}:/code:{dev_code_path}需替换为实际本地代码位置
二、IDE连接远程环境
(一) JetBrains全家桶
1. 使用JetBrains IDE打开本地代码
2. SSH配置
Settings -> Tools -> SSH,点击➕,输入开发容器 IP、端口、SSH相关配置【上方Dockerfile中设置】
点击测试连接 并提示成功。
3. SFTP自动同步
Tools -> Deployment -> Config...
点击➕,选择 SFTP
,在右侧连接项中选择已配置的 SSH配置项,点击测试连接 并提示成功。
在右侧映射项中,配置本地代码和容器代码的映射路径,随后点击确定。
Tools -> Deployment -> Config...,勾选自动上传。
4. 开发使用
进入开发容器
docker exec -it {container_name} bash
# 例
docker exec -it node_dev bash
启动前端服务
# 进入映射代码位置
cd /code
# 启动服务
npm run dev
⚠️ 容器中启动服务的端口需指定为 docker run 时指定的端口映射
本地访问开发容器服务,访问IP地址为容器宿主机IP,端口为映射后的端口
本地开发代码变动后,IDE会自动上传同步到远程容器,服务也会自动更新变动内容