我对容器世界和Docker还是很陌生,但是由于我正在从事的项目的特定基础架构限制,我感到需要利用它的技术。
我正在尝试在Windows 10计算机上构建应用程序,然后将其迁移到另一台Windows 10计算机,该计算机位于无法访问Internet且无法进行通信的另一个网络上(我只能从主计算机上进行推/拉操作)网络)。该应用程序是在uWsgi / nginx服务器上运行的Flask应用程序。
我遵循了一些有关docker和docker compose的教程,并提出了以下应用程序结构:
Application
- flask
- app
- env
- Dockerfile
- app.config
- run.py
- nginx
- Dockerfile
- nginx.conf
- docker-compose.yml
泊坞窗组成文件的内容:
version: "3.7"
services:
nginx:
build: ./nginx
image: nginx
container_name: nginx
restart: always
ports:
- "80:80"
- "443:443"
flask:
build: ./flask
container_name: flask
restart: always
image: trac
environment:
- APP_NAME=Trac
expose:
- 8080
depends_on:
- nginx
烧瓶Dockerfile的内容:
# Use python 3.7 container image
FROM python:3.7.2-stretch
# Set the working directory of the app
WORKDIR /app
# Copy the directory contents into the container at /app
ADD . /app
# Install the dependencies
RUN pip install -r requirements.txt
# run the command to start uWSGI
CMD ["uwsgi", "app.ini"]
app.ini的内容
[uwsgi]
wsgi-file = run.py
callable = app
socket = :8080
processes = 4
threads = 2
master = true
chmod-socket = 660
vacuum = true
die-on-term = true
nginx Dockerfile的内容: 来自nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY crt.crt /etc/nginx/
COPY key.key /etc/nginx/
COPY nginx.conf /etc/nginx/conf.d
nginx.conf的内容
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl http2 default_server;
ssl_certificate crt.crt;
ssl_certificate_key key.key;
location / {
include uwsgi_params;
uwsgi_pass flask:8080;
}
}
使用docker-compose build时,我得到了多个镜像,我认为这不是理想的结果?我想我当时想这将是一个图像,然后可以将其移动并在其他位置运行。
问题是如何移动图像并在没有Internet访问的计算机上运行它们。
我能够在本地构建应用程序,并且一切运行顺利。
任何对此的帮助都会很棒。预先感谢。
答案 0 :(得分:1)
对于第一个问题,您的假设是错误的。没有“一幅图片”涵盖了组合中的所有服务。每个服务都有自己的图像。
对于没有Internet分发的问题...您可以使用本地注册表,以前在其中加载了所有基本依赖项(python,nginx容器...)。
答案 1 :(得分:1)
并非我建议这样做,但是您可以 创建单个docker映像,其中所有服务都在容器内运行,例如,GitLab docker发行版执行相同的操作(它运行所有服务-nginx ,应用程序,postgres等...-单张图片)。您只需要自己在一个容器中配置所有服务,这很繁琐但可行。
还有一个docker-in-docker映像,您可以使用该映像来运行docker-compose文件。