使用docker的目的:避免python环境被污染,也避免本项目的包版本影响其他服务。起到隔离的作用。
以python docker为例
目录结构:
your---project/
|---- app/
|---- main.py
|---- requirements.txt
|---- data/
|---- logs/
|---- deploy/
|---- dockerfile
docker build时的目录 your—project/
目的制作新镜像,避免每次重复安装python package,持久化data和logs文件避免文件丢失
国内的镜像建议在轩辕上下载
一、创建dockerfile
#从哪个镜像基础上制作新镜像
from your_image:tag1
#设置环境
ENV LOG_DIR=/app/logs
ENV DATA_DIR=/app/data
#设置python的源为阿里云
run pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
run pip config set install.trusted-host mirrors.aliyun.com
#创建docker内的目录
run mkdir -p $DATA_DIR $LOG_DIR
#切换工作目录
WORKDIR /app #声明持久化 VOLUME ["/app/data","/app/logs"] COPY ./app/ . COPY requirements.txt run pip install --no-cache-dir -r requirements.txt CMD ["python","main.py"]
二、制作镜像
docker build -t my_image_name:tag_version -f ./deploy/dockerfile .
执行完后,使用images命令显示已经创建好的镜像
docker images
docker rmi my_image_name:tag_version #可以删除这个镜像
docker rmi id123 # ID的前3个字母 删除镜像
三、创建容器
docker build --name my_container_name --add-host=host.docker.internal:host-gateway -v ./app/data:/app/data -v ./app/logs:/app/logs my_images_name:tag_version
--name 是容器命名
也可以事后改名
docker rename old_container_name new_container_name
显示全部容器
docker ps -a
删除容器
docker rm my_contrainer_name
docker rm 容器的前3个id字母
--add-host 的目的是为了在容器内访问 localhost的时候,能访问到宿主机
-v 是挂载目录 格式 宿主机目录:docker内目录。 避免文件丢失。实际文件存放位置是宿主机目录。docker容器删除后,文件仍然保存着。
四、docker的启动和使用
docker start my_container_name
也可以在cron计划任务里启用
sudo crontab -e
0 2 * * MON-FRI docker start my_container_name