* 以下示例使用 docker-compose 命令,因此需要 Dockerfile 和 docker-compose.yml 文件搭配
* 以下示例假设 Dockerfile 在 python 为文件名的目录下,python目录和 docker-compose.yml 在同一个目录下
* 为了能在 python 容器中使用 git, 在python目录下添加tools目录,并增加 .netrc 和 git-env.sh 文件
* 因为需要通过ssh的方式去链接到python容器,所以在tools目录下,还增加了ssh目录存放自己的ssh公钥
* python 容器需要安装的一下 python 软件,都放在 requirements.txt 文件中
* 因此文件目录结构如下:
- docker-compose.yml
- python
- Dockerfile
- requirements.txt
- tools
- .netrc
- git-env.sh
- ssh
- id_rsa.pub
* 以下内容仅做参考
* python 目录下的 Dockerfile 参考内容:
FROM python:3.10
MAINTAINER demo "[email protected]"
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 创建本地软件目录
COPY tools /var/tools/
#设置镜像的工作目录
WORKDIR /data
COPY requirements.txt /data/
# 更新安装依赖包和核心扩展
RUN apt-get update && \
apt-get install -y --no-install-recommends \
cron \
vim \
telnet git procps telnet \
openssh-server net-tools \
&& cp -rf /var/tools/.netrc /root/ \
&& sh /var/tools/git-env.sh \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean \
&& pip install --upgrade pip \
&& pip install --no-cache-dir wheel \
&& pip install --no-cache-dir -r ./requirements.txt \
&& touch /etc/cron.d/crontab
# ssh
RUN mkdir -p /root/.ssh \
&& touch /root/.ssh/authorized_keys \
&& cat /var/tools/ssh/id_rsa.pub >> /root/.ssh/authorized_keys \
&& chmod 644 ~/.ssh/authorized_keys \
&& cp /var/tools/ssh/ssh-login.conf /etc/ssh/sshd_config.d/ \
&& mkdir -p /var/run/sshd
* 如果使用 python3.8, 通过 ssh 方式进入容器,可能出现 python 环境变量失效的问题,参考以下解决方法:点击跳转
* docker-compose.yml 中 python 的内容段参考:
python-3.10:
build: ./python
links:
- redis-5.0:redis
- mysql-8.0:mysql
volumes:
- ../data/www:/data/www:rw
- ../data/logs/python310:/var/log/python:rw
- ../tools:/data/tools:rw
environment:
- PYTHONIOENCODING=utf-8
ports:
# ssh
- "1026:22"
restart: always
#获取root权限
privileged: true
#使用 root 启动,避免权限问题
user: root
shm_size: "512M"
# tty: true
command: bash -c "/etc/init.d/ssh restart && tail -f /dev/null"
* tools/.netrc 和 tools/git-env.sh 文件内容 参考以下链接: 点击跳转