mac Docker 部署Python和web app服务 5 分钟最佳指南

[!TOC]

mac Docker 部署Python和web app服务

部署Python 后端服务

部署python 服务

  1. 拉取python镜像
docker pull python:3.9.13
  1. 查看镜像
docker images
  1. 运行容器
docker run -p 9000:8080 -it --name pytest -v ~/PycharmProjects/text_similar:/root/text_similar python:3.9.13 bash

it:-i和-t的结合,感觉就是如下图,直接进入容器的命令行模式。

–name:自定义容器名称,不用的话会自动分配一个名称。

-v: 将本地文件夹~/PycharmProjects/text_similar与容器文件夹/root/text_similar共享。

-p 9000:本机端口 8000 docker 端口

  1. 删除镜像
docker rmi image_id_or_name

#如果你想要强制删除一个镜像,即使它被其他容器使用,你可以添加 `-f` 或 `--force` 参数:
docker rmi -f image_id_or_name
  1. 查看运行的container
docker ps 
  1. 停止运行的container
docker stop  0befb5fec9e7(container Id)  

最佳实践

  1. 在程序的根目录新建Dockerfile
FROM python:3.9.13

WORKDIR /root/adhd

COPY . .

RUN pip3 install -r requirements.txt

CMD ["python3", "server.py"]
  • FROM python:3.9.13: 这条指令告诉 Docker,你想要基于的镜像是 Python 官方镜像,版本是 3.9.13。Docker 会从 Docker Hub(默认的 Docker 镜像仓库)下载这个镜像(如果本地没有的话)并用它作为后续步骤的基础。

  • WORKDIR /root/adhd: 这条指令设置了 Docker 容器中的工作目录。后续的指令(如 COPY 和 RUN)都会在这个目录下执行。

  • COPY . .: 这条指令将当前目录(即你的 Python 应用的源代码所在的目录)下的所有文件和文件夹复制到 Docker 容器的工作目录。

  • RUN pip3 install -r requirements.txt: 这条指令在 Docker 容器中运行 pip3 install -r requirements.txt 命令,安装你的 Python 应用所需的依赖包。

    #首先,你需要安装 pipreqs:
    pip install pipreqs
    pipreqs .  #在项目的根目录中运行以下命令来生成 requirements.txt
    
  • CMD ["python3", "server.py"]: 这条指令设置了 Docker 容器启动时要运行的命令。在这个例子中,容器启动时会运行 python3 server.py 命令,启动你的 Python 应用。
  1. 然后你可以使用以下命令来构建和运行你的 Docker 镜像:my-python-app 镜像名称
docker build -t my-python-app .
--tag, -t: 镜像的名字及标签
  1. 运行容器
docker run -d -p 9000:8080 --name container_name  my-python-app
  • docker run: 这是 Docker 的基本命令,用于运行 Docker 容器。
  • -d: 这个选项告诉 Docker 在后台模式下运行容器(也就是说,不会占用你的命令行窗口)。
  • -p 9000:8080: 这个选项告诉 Docker 将容器的 8080 端口映射到宿主机的 9000 端口。这意味着你可以通过访问宿主机的 9000 端口来访问在容器的 8080 端口上运行的应用。
  • --name container_name: 这个选项给你的 Docker 容器命名为 "container_name"。如果你不指定名字,Docker 会自动生成一个名字。
  • my-python-app: 这是你要运行的 Docker 镜像的名字。在这个例子中,镜像名为 "my-python-app"。

部署 web 前端应用

  1. 拉取镜像 使用docker官方的nginx镜像
docker pull nginx:1.14
  1. 查看镜像
docker images 
  1. 修改nginx配置文件

在当前目录(docker-vue)下创建nginx配置文件 nginx.conf 配置文件代码如下:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen 80 default_server;
        server_name _;

        location  / {
        root /usr/share/nginx/html;
        index  index.html ;
        try_files $uri $uri/ /index.html;
        }
    }

}

  1. Dockerfile文件修改

在当前目录(docker-vue)下,创建Dockerfile文件,Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

FROM nginx:1.14
LABEL maintainer "dale_na@163.com"
ADD ./dist/ /usr/share/nginx/html
ADD nginx.conf /etc/nginx/
EXPOSE 80
  1. 构建自定义镜像
docker build -t dale_docker .
# --tag, -t: 镜像的名字及标签
  1. 启动自定义镜像
docker run -d -p 8080:80 dale_docker
-d: 后台运行容器,并返回容器ID
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

如果以上配置都操作正确的话,此时打开本地浏览器,输入 http://localhost:8080/ 就会看到刚刚自己新建的vue项目!

Docker同步到另一台设备

Docker 提供了导出和导入镜像的功能,你可以通过以下步骤将 Docker 镜像从一台设备导出并在另一台设备上部署:

  1. 在原设备上,使用 docker save 命令导出 Docker 镜像到一个 tar 文件。例如,如果你的镜像名为 my-python-app,你可以运行以下命令:

    docker save -o my-python-app.tar my-python-app
    

    这会创建一个名为 my-python-app.tar 的文件。

  2. 将这个 tar 文件复制到你的目标设备。你可以使用 scprsync 或者其他你喜欢的文件传输工具。

  3. 在目标设备上,使用 docker load 命令从 tar 文件导入 Docker 镜像:

    docker load -i my-python-app.tar
    

    这会导入名为 my-python-app 的 Docker 镜像。

  4. 现在你可以在目标设备上运行这个 Docker 镜像了。例如,你可以运行以下命令启动一个新的 Docker 容器:

    docker run -d -p 80:80 my-python-app
    

以上就是将 Docker 镜像从一台设备导出并在另一台设备上部署的步骤。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容