流程
windows需安装Docker for desktop
已登录docker账号
编写Dockerfile文件
# 使用Python作为基础镜像, slim-buster是一个轻量级的镜像, 适合生产环境使用
FROM python:3.9-slim-buster
# 设置工作目录
WORKDIR /app
# 复制应用代码到容器中
COPY . .
# 安装依赖项
RUN pip install --no-cache-dir --upgrade -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 安装js运行环境
RUN apt-get update && apt-get install -y nodejs npm
# 设置启动命令
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "5000"]
构建镜像
docker build -t 1688-scraper-app . --network host
构建镜像时, 执行
RUN apt-get update && apt-get install -y nodejs npm
这条命令时, 很慢, 不知道为什么, 可能是apt-get
的源是国外的
可以试试这里: https://www.cnblogs.com/chentiao/p/17352748.html
修改Dockerfile
# 使用Python作为基础镜像, slim-buster是一个轻量级的镜像, 适合生产环境使用
FROM python:3.12.3-slim-bullseye
# 设置工作目录
WORKDIR /app
# 复制应用代码到容器中
COPY . .
# 安装依赖项
RUN pip install --no-cache-dir --upgrade -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 设置为中国国内源
RUN sed -i 's@/deb.debian.org/@/mirrors.aliyun.com/@g' /etc/apt/sources.list
RUN apt-get clean
# 安装js运行环境
RUN apt-get update && apt-get install -y nodejs npm
# 设置启动命令
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "5000"]
再次build, 只用了200多s, 快多了
打标签
推送到 dockerhub
在https://hub.docker.com/查看已经存在
在服务器上拉取镜像
运行项目, 查看日志
开放防火墙端口与 安全组 端口, 即可通过 云服务器的公网IP+5000端口访问
云服务器厂商比如阿里云/腾讯云在管理平台上会有安全组端口限制访问, 需要开放对应端口
开放端口
查看服务器系统信息, Linux是有很多个版本的, 不同的版本操作可能会不同
参考: https://blog.csdn.net/qq_31278903/article/details/83146031
[root@VM-0-10-centos ~]# uname -a
Linux VM-0-10-centos 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
[root@VM-0-10-centos ~]# cat /proc/version
Linux version 3.10.0-1160.108.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Jan 25 16:17:31 UTC 2024
[root@VM-0-10-centos ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
使用的就是Centos 7
系统
# 查看防火墙状态(防火墙已关闭)
[root@VM-0-10-centos ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@VM-0-10-centos ~]# firewall-cmd --state
not running
参考:
Linux查看防火墙状态及开启关闭命令
https://blog.csdn.net/qq_36640713/article/details/106553833
Docker 常用命令
基本概念: 容器是镜像的一个实例, 就好比镜像是一个规则, 而容器根据镜像的规则的一个 实际产物
构建镜像: (在项目根目录执行)
docker build
:这是Docker用来构建镜像的命令。-t tiktok-service-app
:这个选项用来给构建的镜像设置一个标签(tag),在这个例子中标签是tiktok-service-app。标签可以帮助你更容易地识别和管理你的Docker镜像。.
:这个点代表当前目录,Docker会在这个目录下查找Dockerfile文件,该文件包含了构建镜像所需的指令。
docker build -t tiktok-service-app .
查看镜像:
docker images
启动容器:
docker run
:这是Docker用来创建并启动新容器的命令。-itd
:这是三个选项的组合:
-i
:交互式,允许你与容器进行交互。-t
:分配一个伪终端,这样你就可以在命令行中与容器进行交互。-d
:以分离模式运行容器,即在后台运行。-p 8888:8080
:这个选项用于端口映射,格式为<主机端口>:<容器端口>
。在这个例子中,它将主机的8888端口映射到容器的8080端口。tiktok-service-app
:这是要运行的Docker镜像的名称。Docker会根据这个名称查找本地的镜像库,如果找到匹配的镜像,就会用它来创建一个新的容器。
docker run -itd -p 8888:8080 tiktok-service-app
查看正在运行的容器(添加-a
参数查看全部容器):
docker ps
进入容器:
docker exec
:这是Docker用来在已经运行的容器中执行命令的命令。-it
:这是两个选项的组合:
-i
:交互式,允许你与容器进行交互。-t
:分配一个伪终端,这样你就可以在命令行中与容器进行交互。<容器名称或ID>
:这是要进入的容器的名称或者ID。/bin/bash
:这是要在容器中运行的命令,这里是启动bash shell。
docker exec -it <容器名称或ID> /bin/bash
查看运行日志:
docker logs
:这是Docker用来获取容器日志的命令。-f
或--follow
:这个选项会让日志输出变成实时的,即你可以即时看到最新的日志输出。58cda55c3cd4
:这是容器的ID。Docker会根据这个ID查找正在运行的容器,并输出该容器的日志。
docker logs -f <容器名称或ID>
停止容器
docker stop <容器名称或ID>
删除容器
docker rm <容器名称或ID>
删除镜像
docker rmi <镜像名称或ID>