用容器运行一个服务,需要使用docker run命令。但如果我要运行多个服务呢?
假设我要运行一个web服务,还要运行一个db服务,那么是用一个容器运行,还是用多个容器运行呢?
一个容器运行多个服务会造成镜像的复杂度提高,docker倾向于一个容器运行一个应用。
那么复杂的架构就会需要很多的容器,并且需要它们之间有关联(容器之间的依赖和连接)就更复杂了
这个复杂的问题需要解决,这就涉及到了容器编排的问题了。
编排
是对多个容器进行启动和管理的方法
例如:LNMT,先启动MySQL,再启动Tomcat,最后启动Nginx
单体服务架构
分布式服务架构
微服务架构(容器)
超微服务架构
docker machine
docker compose
docker swarm
mesos+marathon
mesos对计算机计算资源进行管理和调度
marathon服务发现及负载均衡的功能
kubernetes
https://docs.docker.com/compose/
工程(project)
服务(Service)
容器(Container)
1.定义应用的Dockerfile文件,为了任何地方进行构建。
2.使用docker-compose.yaml定义一套服务,这套服务可以一起在一个隔离环境中运行。
3.使用docker-compose up就可以启动整套服务。
https://github.com/docker/compose/releases
nginx下的文件信息
ubuntu@VM-24-12-ubuntu:~/ck14/manual/nginx$ ls
default.conf dist Dockerfile static
default.conf文件
upstream app_server {
server django_app:8000;
}
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main; #访问日志
location /static/ {
root /usr/share/nginx/html; #请求对应配置文件位置(定义服务器的默认网站根目录位置)
index index.html index.htm; #请求对应的文件
}
location / {
# 检查静态文件,如果不是代理到应用
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
#error_page 404 /404.html; #定义错误提示页面
# redirect server error pages to the static page /50x.html #重定向服务器错误页面
error_page 500 502 503 504 /50x.html; #定义错误提示页面
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
server {
listen 81;
location / {
root /usr/share/nginx/html/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
}
dist:前端打包文件
ubuntu@VM-24-12-ubuntu:~/ck14/auto/nginx/dist$ ls
css favicon.ico fonts index.html js
static:后端打包文件
ubuntu@VM-24-12-ubuntu:~/ck14/auto/nginx/static$ ls
admin rest_framework
制作nginx,Dockerfile
将前后端打包文件拷贝到容器中的/usr/share/nginx/html/目录下
暴露80(后端访问)、81(前端访问)端口
FROM nginx:alpine
COPY ./static/ /usr/share/nginx/html/static/
COPY ./dist/ /usr/share/nginx/html/dist/
COPY ./default.conf /etc/nginx/conf.d/
VOLUME /var/log/
EXPOSE 80 81
生成镜像命令
```python
sudo docker build -t ck14_web_nginx .
运行容器
sudo docker run --name ck14_nginx --network ck14 -d -p 5001:80 -p 5002:81 ck14_web_nginx