把Python容器化运行
背景:
写了python,想移动到VPS上面去。这里简单记录小白操作
步骤
wsl调试
- py脚本正常运行
import time
import schedule
def runApp():
print("hello")
schedule.every(10).seconds.do(runApp)
while True:
schedule.run_pending()
time.sleep(1)
- 导出
requirements.txt
pipreqs > requirements.txt --force
docker init
创建Dockerfile
和compose.yaml
参考了官方文档
dyq@DESKTOP-R6TRIIR:~/code/python/easypy$ ls
hello.py requirements.txt
dyq@DESKTOP-R6TRIIR:~/code/python/easypy$ docker init
Welcome to the Docker Init CLI!
This utility will walk you through creating the following files with sensible defaults for your project:
- .dockerignore
- Dockerfile
- compose.yaml
- README.Docker.md
Let's get started!
? What application platform does your project use? Python
? What version of Python do you want to use? 3
? What port do you want your app to listen on? 8000
? What is the command you use to run your app (e.g., gunicorn 'myapp.example:app' --bind=0.0.0.0:8000)? python hello.py
CREATED: .dockerignore
CREATED: Dockerfile
CREATED: compose.yaml
CREATED: README.Docker.md
✔ Your Docker files are ready!
Take a moment to review them and tailor them to your application.
When you're ready, start your application by running: docker compose up --build
Your application will be available at http://localhost:8000
Consult README.Docker.md for more information about using the generated files.
dyq@DESKTOP-R6TRIIR:~/code/python/easypy$
dyq@DESKTOP-R6TRIIR:~/code/python/easypy$ ls
Dockerfile README.Docker.md compose.yaml hello.py requirements.txt
dyq@DESKTOP-R6TRIIR:~/code/python/easypy$
Dockerfile
:负责镜像的构建
有空可以看看dockerfile 里面会使用appuser
启动程序,并做一些优化pip install -r requirements.txt
也会给我们添加好
compose.yaml
:负责容器编排
.dockerignore
: 不会被拷贝到容器里的文件
- 运行
docker compose up --build
运行 加-d
后台运行
dyq@DESKTOP-R6TRIIR:~/code/python/easypy$ docker compose up --build
[+] Building 52.4s (12/12) FINISHED docker:default
=> [server internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.65kB 0.0s
=> [server] resolve image config for docker.io/docker/dockerfile:1 9.3s
=> CACHED [server] docker-image://docker.io/docker/dockerfile:1@sha256:ac85f380a63b13dfcefa89046420e1781752bab202122f8f50032edf31be0021 0.0s
=> [server internal] load metadata for docker.io/library/python:3-slim 30.9s
=> [server internal] load .dockerignore 0.0s
=> => transferring context: 667B 0.0s
=> [server base 1/5] FROM docker.io/library/python:3-slim@sha256:eb53cb99a609b86da6e239b16e1f2aed5e10cfbc538671fc4631093a00f133f2 6.3s
=> => resolve docker.io/library/python:3-slim@sha256:eb53cb99a609b86da6e239b16e1f2aed5e10cfbc538671fc4631093a00f133f2 0.0s
=> => sha256:eb53cb99a609b86da6e239b16e1f2aed5e10cfbc538671fc4631093a00f133f2 1.65kB / 1.65kB 0.0s
=> => sha256:4e7d6f2672bd4a834eac99973679c7e73fbcd475d439b7569512bf478ed39c78 1.37kB / 1.37kB 0.0s
=> => sha256:24c52ee82b5c06944b91a17133f852a1e4dd2c8654c21c63f0c81d78f3a06479 6.71kB / 6.71kB 0.0s
=> => sha256:ac473e395e82d4ac7ff77e21e9b2ea066318bce5143d194983002e3eb1309628 12.00MB / 12.00MB 4.8s
=> => sha256:7bc5f799438a7eefb6d9adc60bc9205512b71ba2f9bb999fd1ff5f31791cdce7 244B / 244B 1.9s
=> => sha256:8731b1ec3f6b5f8205bb728c5af8284aab5d9ffe1c4288d0c26ca39cc30e48ab 2.98MB / 2.98MB 3.2s
=> => extracting sha256:ac473e395e82d4ac7ff77e21e9b2ea066318bce5143d194983002e3eb1309628 0.7s
=> => extracting sha256:7bc5f799438a7eefb6d9adc60bc9205512b71ba2f9bb999fd1ff5f31791cdce7 0.0s
=> => extracting sha256:8731b1ec3f6b5f8205bb728c5af8284aab5d9ffe1c4288d0c26ca39cc30e48ab 0.4s
=> [server internal] load build context 0.0s
=> => transferring context: 1.13kB 0.0s
=> [server base 2/5] WORKDIR /app 0.2s
=> [server base 3/5] RUN adduser --disabled-password --gecos "" --home "/nonexistent" --shell "/sbin/nologin" --no-create-home --uid "10001 0.6s
=> [server base 4/5] RUN --mount=type=cache,target=/root/.cache/pip --mount=type=bind,source=requirements.txt,target=requirements.txt python -m pip install 4.7s
=> [server base 5/5] COPY . . 0.0s
=> [server] exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:1bd5a39bb2934f021bc82fe7815bc36e5aca23c972adb7f219311e500dd2b699 0.0s
=> => naming to docker.io/library/easypy-server 0.0s
[+] Running 2/2
✔ Network easypy_default Created 0.1s
✔ Container easypy-server-1 Created 0.1s
Attaching to server-1
server-1 | hello
server-1 | hello
server-1 | hello
正常运行了
上传到VPS使用
本地打一个tar到vps上面,直接压直接运行用即可
其他
参考了官方文档