【nginx】我的docker和nginx笔记-20220412

lab0. 变动nginx.conf的注意事项

  • 与本机nginx不同,nginx编辑default.conf就可以完成nginx配置。
    在这里插入图片描述
  • default.conf的位置:etc/nginx/conf.d/default.conf
  • 重启:记得更改nginx配置后需要重启container!记得更改nginx配置后需要重启container!记得更改nginx配置后需要重启container!

lab1:HTTP服务器访问本地的资源

Nginx超级简单入门:https://blog.csdn.net/huangliequan/article/details/77214595
效果:访问http://localhost:8020/显示d:images/index.html

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8020;
        server_name  localhost;

        location / {
            root   d:images;
            index  index.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}

在这里插入图片描述

lab2:反向代理

Nginx超级简单入门:https://blog.csdn.net/huangliequan/article/details/77214595
效果:当我们访问localhost:8020的时候,就相当于访问localhost:8000

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8020;
        server_name  localhost;

        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header host $host;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}

在这里插入图片描述

lab3:静态服务器

Nginx超级简单入门:https://blog.csdn.net/huangliequan/article/details/77214595
效果:文件会从不同的目录中映射(取决于请求):/data/www(放置 HTML 文件)和 /data/images(放置图片)。当接收到 http://localhost/images/example.png 的请求响应时,nginx 会返回 d:/data/images/example.png 文件。


worker_processes  1;

events {
    worker_connections  1024;
}


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


    sendfile        on;

    keepalive_timeout  65;

    server {
            listen       8020;
            server_name  localhost;
   
            location / {       
                    root d:/data/www;   
            }   
            location /images/ {
                    root d:/data/;   
            }
    }


}

在这里插入图片描述

lab4:搭建一个简易的代理服务

Nginx超级简单入门:https://blog.csdn.net/huangliequan/article/details/77214595
效果1:访问localhost:8020,nginx 相当于访问localhost:8000。
效果2:当接收到后缀为png、gif、jpg时,nginx 会映射到d:/data/images/。


worker_processes  1;

events {
    worker_connections  1024;
}


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


    sendfile        on;

    keepalive_timeout  65;

    server {
            listen       8020;
            server_name  localhost;
   
            location / {       
                    proxy_pass http://localhost:8000;
            }   
            location ~ \.(gif|jpg|png)$ {
                    root d:/data/images; 
            }
    }

}

效果1截图
在这里插入图片描述
效果2截图

在这里插入图片描述

lab5:location基本语法

nginx系列之五: 负载均衡:https://blog.csdn.net/qq_29677867/article/details/90114076
效果1:访问http://localhost:8020/index.html,显示401
效果2:访问http://localhost:8020/,显示402
效果3:访问http://localhost:8020/documents/document.html,显示403
效果4:访问http://localhost:8020/images/1.gif,显示404
效果5:访问http://localhost:8020/dddd/1.gif,显示500

= 精确匹配,如果找到匹配=号的内容,立即停止搜索,并立即处理请求(优先级最高)
区分大小写
~* 不区分大小写
^~ 只匹配字符串,不匹配正则表达式
@ 指定一个命名的location,一般用于内部重定义请求,location @name {…}
worker_processes  1;

events {
    worker_connections  1024;
}

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

    sendfile        on;

    keepalive_timeout  65;

    server {
            listen       8020;
            server_name  localhost;
   
        location / {
           return 401;
        }
        location = / {
            return 402;
        }
        location /documents/ {
            return 403;
        }
        location ^~ /images/ {
            return 404;
        }
        location ~* \.(gif|jpg|png|jpeg)$ {
            return 500;
        }
    }

}

lab6:负载均衡

nginx系列之五: 负载均衡:https://blog.csdn.net/qq_29677867/article/details/90114076

负载均衡依赖于upstream模块来实现。upstream来定义虚拟主机static_pools,并可定义多个server(下方只显示一个server localhost:8000)。
同时注意添加proxy_set_header host $host; 这是节点服务器多虚拟主机时的关键配置。


worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream static_pools {
      server localhost:8000;
    }

    server {
       listen       8020;
       server_name  localhost;
       
        location / {
        proxy_pass http://static_pools;
        proxy_set_header host $host;#在代理向后端服务器发送的http请求头中加入host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点服务器多虚拟主机时的关键配置    }  }}注:这里是代理服务器
       }

        location /images/ {
                root d:/data/;
        }
       
    }
}

效果:访问动态网站时的截图
在这里插入图片描述

效果:访问静态图片时的截图
在这里插入图片描述

lab7:反向代理实现使用域名访问本地项目

nginx_反向代理实现使用域名访问本地项目:https://blog.csdn.net/qq3399013670/article/details/100971283
效果:访问manage.enjoyment.com:80,可以转发给127.0.0.1:8000


worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
       listen       8020;
       server_name  manage.enjoyment.com;
       
        location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header host $host;#在代理向后端服务器发送的http请求头中加入host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点服务器多虚拟主机时的关键配置    }  }}注:这里是代理服务器
       }

        location /images/ {
                root d:/data/;
        }
       
    }
}

在这里插入图片描述

lab8:将docker container的nginx的文件拷贝到windows桌面

docker 文件操作:https://blog.csdn.net/henryhu712/article/details/82084160
以管理员权限来执行cp命令。docker cp :/file/path/within/container /host/path/target
效果:windows桌面可以看到docker container的nginx的文件

docker cp 30455a37c745:/ C:/Users/Z13073219/Desktop/new

在这里插入图片描述

lab9:将windows桌面txt文件拷贝到docker container中

docker 文件操作:https://blog.csdn.net/henryhu712/article/details/82084160
以管理员权限来执行cp命令。docker cp filename :/file/path/within/container
效果:docker container可以看到test.txt

docker cp C:/Users/Z13073219/Desktop/new/test.txt 30455a37c745:/ 

在这里插入图片描述

lab10:nginx安装到docker

效果:打开localhost:81,默认链接到容器的80端口,从而打开nginx默认页面。
注意-p 81:80是关键点,80不能更改,81可以更改。

docker pull nginx
docker run --name nginx-test81 -p 81:80 -d nginx

在这里插入图片描述

lab11:nginx在docker中设置反向代理成功(可使用vscode IDE来直接修改docker中的文件)

记得更改nginx配置后需要重启container!记得更改nginx配置后需要重启container!记得更改nginx配置后需要重启container!
效果:打开宿主机的IP:端口(http://192.168.1.5:81/),就可以打开反向代理的网址(http://192.168.1.5:8095/)。
docker 安装 nginx 并配置反向代理https://blog.csdn.net/weixin_40461281/article/details/92586378
nginx反向代理–以docker容器为例:https://blog.csdn.net/weixin_43283513/article/details/112724535
关键:以下设定的反向代理无法成功。proxy_pass http://127.0.0.1:8095;
这是错误写法,使用docker容器反向代理的时候,proxy_pass中不能使用127.0.0.1和localhost,因为实际要指向宿主机的8095端口,但是这里使用127.0.0.1和localhost指向的是容器内的8095,故此无法代理。如果不使用docker而是直接安装的,可以使用127.0.0.1或localhost

server {
    listen       80;
    listen  [::]:80;
    server_name  192.168.1.5;

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

    location / {
          proxy_pass http://192.168.1.5:8095;
          proxy_redirect default;
    }

    #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;
    }

在这里插入图片描述

  • 打开http://192.168.1.5:81/相当于打开http://192.168.1.5:8095/
    在这里插入图片描述
    在这里插入图片描述

lab12:nginx在docker中设置反向代理(运用命令行cp操作)

效果:打开宿主机的IP:端口(http://192.168.50.124:81/),就可以打开反向代理的网址(http://localhost:8000/)。
很多时候没有vscode的IDE,所以必须通过命令行来启动nignx,并nginx容器中设定lab11的反向代理。
nginx反向代理–以docker容器为例:https://blog.csdn.net/weixin_43283513/article/details/112724535

关键:命令行的语句要熟悉。尽量以文件取代文件避免位置错误。以文件夹取代文件夹容易出现位置错误。

过程如下:

docker run --name nignx82 -p 82:80 -d nginx   #启动容器
docker container exec -it nignx82 /bin/bash   #进入容器内部查看结构
docker container cp nignx82:/ C:/Users/Z13073219/Desktop/nginx82   #copy容器的文件夹到指定路径
docker container cp C:/Users/Z13073219/Desktop/nginx82/etc/nginx/conf.d/default.conf nignx82:/etc/nginx/conf.d/default.conf # 将修改后的文件copy回容器里面 
docker restart nignx82  # 重启容器

其他可能用到的命令行语句

docker stop nignx82
docker start nignx82

删除文件夹:
例如:删除/etc/nginx/log目录以及其下所有文件、文件夹
rm -rf /etc/nginx/log

删除文件:
例如:强制删除/etc/nginx/log/access.log文件
rm -f /etc/nginx/log/access.log

呈现效果类似于lab11。
在这里插入图片描述

lab13:利用commit来生成属于自己的images(以lab12的nignx82为基础)

效果:lab12已在docker内部修改完default.conf,为了便于迁移,我生成一个新的images来保存这次修改。
https://blog.csdn.net/leo15561050003/article/details/71274718

docker commit -m "nginx82_modified_ip" nignx82 nignx:v2  #利用commit生成新的images
docker run --name nignx82_v2 -p 83:80 -d nignx:v2  #利用新的images来生成容器

这次生成容器后,就可以直接访问代理的网址了。
在这里插入图片描述

lab14:django项目生成属于自己的images

效果:编写dockerfile来生成属于自己的images,并成功运行。
【Docker】第一次用docker来部署django项目-20220209:https://blog.csdn.net/m0_46629123/article/details/122848644

lab15:在nginx中建立挂volume

效果:创建数据卷container-vol,并挂在nginx容器的volume_opt路径下。
06-Docker数据管理实践:https://yutian.blog.csdn.net/article/details/119707376

#建立数据卷
docker volume create container-vol

#查看数据卷位置方便挂靠到容器
docker volume ls
docker volume inspect container-vol
[
    {
        "CreatedAt": "2022-02-24T23:18:29Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/container-vol/_data",
        "Name": "container-vol",
        "Options": {},
        "Scope": "local"
    }
]

#将数据卷挂靠到容器
docker run --name nginx_vol_container -dit -p 82:80 -v container-vol:/volume_opt/vol  nginx bash

#进入容器进行查看
docker exec -it 8a16339b66e3 bin/bash
ls

最后可以看到volume_opt被挂靠进来
在这里插入图片描述

lab16:本机文件夹运用-v参数挂给container(bind mount)

效果:桌面的test_vol可以在nginx container中找到。
docker $PWD路径_Docker常用操作:https://blog.csdn.net/weixin_39681058/article/details/110088896
Docker Data Volume 之 bind mount:https://blog.csdn.net/qq_34556414/article/details/109298133

docker run -p 89:80 --name test89 -d -v C:/Users/Z13073219/Desktop/test_vol:/usr/share/nginx/html nginx

本机的文件夹:
在这里插入图片描述
容器中的文件夹:
在这里插入图片描述

lab17:通过volume来持久化保存数据

volume更像是一种对应关系,不是一个文件夹。
效果:test90(container)的html文件夹保存在container-vol2(volume)中,然后test91(container)也是挂container-vol2(volume),你就会发现html文件夹被同步过来。

  • 新建container-vol2(volume)
docker volume create container-vol
  • 将container-vol2(volume)挂到test90(container)中
docker run -p 90:80 --name test90 -d -v container-vol2:/usr/share/nginx/html nginx
  • 用vscode修改html文件夹的文件
    在这里插入图片描述
  • 将container-vol2(volume)挂到test91(container)中
docker run -p 91:80 --name test91 -d -v container-vol2:/usr/share/nginx/html nginx
  • 查看test91(container)的html文件夹是否被同步过来
    在这里插入图片描述

lab18:持久化保存django的SQLite数据库(bind mount -v)

效果:A网站维护的信息,通过bind mount存在C盘,B网站可以读取。
Docker Data Volume 之 bind mount:https://blog.csdn.net/qq_34556414/article/details/109298133

  • 建立A网站localhosts:8000,B网站localhosts:8002
docker run -p 8000:8000 --name pp_test_for_bind_mount -d -v C:/Users/Z13073219/Desktop/SQL/db.sqlite3:/code/package/db.sqlite3 pp4_slim
docker run -p 8002:8000 --name pp_test_for_bind_mount2 -d -v C:/Users/Z13073219/Desktop/SQL/db.sqlite3:/code/package/db.sqlite3 pp4_slim

在这里插入图片描述
在这里插入图片描述

  • 在A网站中修改Z13的数据。
    在这里插入图片描述

  • 在B网站上查看Z13数据是否被修改。
    在这里插入图片描述

  • 在C盘上看SQLite。
    在这里插入图片描述

lab19:保存volume的办法

最有效的办法,是通过cp来拷贝容器的内容,从而将容器中被volume挂的数据卷一并保存。

docker cp nginx_vol_container:\ C:\Users\Z13073219\Desktop\test1234

在这里插入图片描述

lab20:如何在容器启动后再挂volume(暂时找不到策略)

建议是容器启动run时就挂好了volume。

docker run -p 8000:8000 --name pp_test_for_bind_mount -d -v C:/Users/Z13073219/Desktop/SQL/db.sqlite3:/code/package/db.sqlite3 pp4_slim

lab21:volume抓文件,也可以抓文件夹

参考前面lab

lab22:容器内部启动测试服务器python manage.py runserver

container启动后,可以exec进入容器,输入python manage.py runserver启动测试服务器

lab23:单容器部署Django + Uwsgi

请见我的文章https://blog.csdn.net/m0_46629123/article/details/123607272
效果:出现“getting INI configuration from uwsgi.ini”—读取到配置文件。
做法:启动容器后,在bash中运用copy指令,将uwsgi.ini拷贝到容器文件夹中(也可以在封装容器时候就提前将uwsgi.ini拷贝进去)。使用uwsgi --ini uwsgi.ini来读取uwsgi.ini的配置。

参考文档如下:

  • Docker-compose 八步部署Django + Uwsgi + Nginx + MySQL + Redis升级篇链接
  • 如何在阿里云Ubuntu服务器通过uWSGI和Nginx部署Django项目教程-大江狗原创出品链接
  • 解决“The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting”:STATIC_ROOT=os.path.join(BASE_DIR,“/static/”)#正确
    链接
  • getting INI configuration from uwsgi.ini:是正常的日志输出呀,意思是读取到这个配置文件里面的信息了
    链接

lab23:双容器部署Django + Uwsgi + Nginx(不用docker-compose)

先完成lab23:单容器部署Django + Uwsgi
再完成lab11:nginx在docker中设置反向代理成功

lab24:uwsgi配置好后,出现Internal Server Error(还没解决)

uwsgi配置好后,浏览器输入自己设置的IP地址加端口号出现Internal Server Error
https://blog.csdn.net/m0_46077151/article/details/108071004

lab25:单容器部署Django (python manage.py runserver)

效果:安装必要的linux环境后,打包进镜像,然后用runserver来启动服务。其实也可以不安装linux必要环境的,练习打包也是目标之一。

  • dockerfile
FROM python:3.8-slim

RUN apt-get update -y && apt-get install gcc -y

COPY ./Django /code
WORKDIR /code/package


RUN pip install -r requirements.txt
RUN pip install uwsgi
EXPOSE 8000

RUN chmod 777 /code/package/runserver-docker.sh
RUN chmod 777 /code/package/start.sh


# Windows环境下编写的start.sh每行命令结尾有多余的\r字符,需移除。
RUN sed -i 's/\r//' ./start.sh
 
# 设置start.sh文件可执行权限
RUN chmod +x ./start.sh

CMD ["/bin/sh","/code/package/start.sh"]
  • settings.py注意变动STATIC_ROO
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)
STATIC_ROOT = os.path.join(BASE_DIR, "/static/")
  • start.sh
 #!/bin/bash
 # 从第一行到最后一行分别表示:
 # 0. 收集静态文件
 # 1. 生成数据库迁移文件
 # 2. 根据数据库迁移文件来修改数据库
 # 3. 用 uwsgi启动 django 服务, 不再使用python manage.py runserver
python manage.py collectstatic --noinput&&
python manage.py makemigrations&&
python manage.py migrate&&
#uwsgi --ini /code/package/uwsgi.ini
#uwsgi --ini uwsgi.ini
python manage.py runserver 0.0.0.0:8000
  • requirements.txt
Django==3.2.7
django-bootstrap4==21.2
django-grappelli==2.15.3
djangorestframework==3.12.4
openpyxl==3.0.9
matplotlib==3.4.3
matplotlib-inline==0.1.3
pyecharts==1.9.0
pandas==1.3.3
simplejson==3.17.5
  • 文件大致结构
    在这里插入图片描述
  • 打包镜像images
docker build -t training_dashboard_v1b_auto_runserver .

在这里插入图片描述

lab26:docker-compose

docker-compose 配置参数:https://blog.csdn.net/qq_38829069/article/details/120145269

services:
#服务名称,不可重复
  web:
#服务的镜像名称或镜像 ID,如果镜像在本地不存在,Compose 将会尝试拉取这个镜像
    image: dockercloud/hello-world
#基于一份 Dockerfile构建镜像,指定 Dockerfile 所在文件夹的路径 
#如果你同时指定了 image 和 build 两个标签,那么 Compose 会构建镜像并且把镜像命名为 image 后面的那个名字
    #build: /path/to/build/dir
#也可以是相对路径,建议使用
    #build: ./dir
#设定上下文根目录,然后以该目录为准指定 Dockerfile,不建议用
    build:
      context: ../
      dockerfile: path/of/Dockerfile
#Dockerfile 中的 ARG 指令,和ENV不同,ARG允许空值
      args:
      - buildno=
      - password=secret
#不建议这种写法
      #args:
      #   buildno: 1
      #   password: secret
#command 可以覆盖容器启动后默认执行的命令
       command: bundle exec thin -p 3000
#也可以写成类似 Dockerfile 中的格式:
#     command: [bundle, exec, thin, -p, 3000]
#容器名称,不写则默认为 项目名称_服务名称_序号
    container_name: app
#控制容器启动的顺序,先启动 redis 和 db 两个服务,最后才启动 web 服务:
    depends_on:
      - db
      - redis
#和docker的启动参数 --dns 一样用途
    dns: 8.8.8.8
#多个配置
    #dns:
    # - 8.8.8.8
    # - 9.9.9.9
#同理搜索域 dns_search
#挂载临时目录到容器内部的tmpfs
#env_file可以定义一个专门存放变量的文件
#expose与Dockerfile中的EXPOSE指令一样,用于指定暴露的端口,没啥用
#都是类似的语法
    dns_search: example.com
    tmpfs: /run
    env_file: .env
    expose: 3000
#ENTRYPOINT 指令,用于指定接入点
    entrypoint: /code/entrypoint.sh
#同样可以写成这样,注意参数 -d 是另起一行
    #entrypoint:
    #   - php
    #    - -d
    #    - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
    #   - -d
    #   - memory_limit=-1
    #    - vendor/bin/phpunit
#env_file可以定义一个专门存放变量的文件
#arg 标签的变量仅用在构建过程中。而 environment 和 Dockerfile 中的 ENV 指令一样会把变量一直保存在镜像、容器中    
#    environment:
#      RACK_ENV: development
#      SHOW: 'true'
#      SESSION_SECRET:
#建议写法
    environment:
      - RACK_ENV=development
      - SHOW=true
      - SESSION_SECRET
#external_links,它可以让Compose项目里面的容器连接到那些项目配置外部的容器(前提是外部容器中必须至少有一个容器是连接到与项目内的服务的同一个网络里面)
    external_links:
     - redis_1
#冒号后面是别名
     - project_db_1:mysql
     - project_db_1:postgresql
#extra_hosts就是往容器/etc/hosts文件中添加一些记录,与Docker client的--add-host类似:
    extra_hosts:
     - "somehost:162.242.195.82"
     - "otherhost:50.31.209.229"
#labels向容器添加元数据,和Dockerfile的LABEL指令一个意思
    #labels:
    #  com.example.description: "Accounting webapp"
    #  com.example.department: "Finance"
    #  com.example.label-with-empty-value: ""
    labels:
      - "com.example.description=Accounting webapp"
      - "com.example.department=Finance"
      - "com.example.label-with-empty-value"
#links标签解决的是容器连接问题,与Docker client的--link一样效果,会连接到其它服务中的容器。使用的别名将会自动在容器中的/etc/hosts里创建
    links:
     - db
     - db:database
     - redis
#logging这个标签用于配置日志服务
    logging:
      driver: syslog
      options:
        syslog-address: "tcp://192.168.0.42:123"
#pid 容器使用这个标签将能够访问和操纵其他容器和宿主机的名称空间。不建议使用
    pid: "host"
#ports映射端口的标签
    ports:
     - "3000"
     - "8000:8000"
     - "49100:22"
     - "127.0.0.1:8001:8001"
#security_opt为每个容器覆盖默认的标签
    security_opt:
      - label:user:USER
      - label:role:ROLE
#stop_signal设置另一个信号来停止容器。在默认情况下使用的是SIGTERM停止容器。设置另一个信号可以使用stop_signal标签。
    stop_signal: SIGUSR1
#volumes挂载一个目录或者一个已存在的数据卷容器
    volumes:
#只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
      - /var/lib/mysql
#使用绝对路径挂载数据卷
      - /opt/data:/var/lib/mysql
#以docker-compose.yml配置文件为中心的相对路径作为数据卷挂载到容器。
      - ./cache:/tmp/cache
#使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。不建议使用,大坑。:ro代表只读,默认为读写:rw
      - ~/configs:/etc/configs/:ro
# 已经存在的命名的数据卷。
      - datavolume:/var/lib/mysql
# volumes_from从其它容器或者服务挂载数据卷,可选的参数是 :ro或者 :rw,
    volumes_from:
      - service_name
      - service_name:ro
      - container:container_name
      - container:container_name:rw
#devices设备映射列表。与Docker client的--device参数类似。
    devices:
      - "/dev/ttyUSB0:/dev/ttyUSB0"

docker-compose up -d

sample如下:非完整

version: '3.3'
  services:
   db:
      image: mysql:5.7    
      ports:
        - "4000:3306"       
      environment:
        MYSQL_ROOT_PASSWORD: Password@123
        MYSQL_DATABASE: wordpress
        MYSQL_USER: wordpress
        MYSQL_PASSWORD: wordpress     
      restart: always
      volumes:
        - db_data:/var/lib/mysql
      networks:
        - my_bridge_network

   wordpress:
      image: wordpress:latest    
      ports:
        - "8000:80"  
      environment:
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_USER: wordpress
        WORDPRESS_DB_PASSWORD: wordpress
      restart: always
      depends_on:
        - db       
      networks:
        - my_bridge_network

volumes:
    db_data: {}

networks:
    my_bridge_network:

第二个sample如下:

version: '3.2'

services:
  mysql:
 	#如果你同时指定了 image 和 build 两个标签,那么 Compose 会构建镜像并且把镜像命名为 image 后面的那个名字
    image: mysql:5.7
    container_name: mysql    
    environment:
      - "MYSQL_ROOT_PASSWORD=password"
    ports:
      - "3306:3306"          

  redis:
    image: redis
    container_name: redis    
    ports:
      - "6379:6379"   

  web:
    image: py-red-sql
    container_name: web       
    build:
      context: .
    ports:
    - "5000:5000"
    restart: unless-stopped    
    depends_on: 
    - mysql 
    - redis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值