Docker容器化【开发环境构建与配置】

目的 🎯:

基于Docker容器实现代码的远程开发,规避本地环境无网络、无依赖场景下开发问题。

示例附件 📎:

前提准备 ⚠️:

目标环境已有Docker

一、构建远程开发环境

(一) 前端

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会自动上传同步到远程容器,服务也会自动更新变动内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值