docker服务器运维

复制代码
使用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