Docker学习笔记11-----使用Docker部署Nginx+SpringBoot+MySQL项目

本文详细介绍如何使用Docker进行网络规划、部署MySQL容器及SpringBoot应用,并实现Nginx反向代理,涵盖容器创建、网络配置、权限设置等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、网络规划

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yMkKljG0-1615220558148)(73CC2A01526C43589E9ED6E7A8F35950)]

1.1、配置网络
docker network create --subnet=172.16.0.0/24 demo-net
1.2、查看网络
NETWORK ID          NAME                DRIVER              SCOPE
da64fc1be0e9        bridge              bridge              local
1f34f85f1160        demo-net            bridge              local
e0d2d5bc89a7        host                host                local
0623f41d9d52        none                null                local
2、创建MySQL容器
2.1、创建MySQL的Volume
[root@localhost test]# docker volume create my-mysql-volume
my-mysql-volume
[root@localhost test]# docker volume ls
DRIVER              VOLUME NAME
local               my-mysql-volume
2.2、创建MySQL容器
docker run -d --name my-mysql -p 3306:3306 -v my-mysql-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --network demo-net --ip 172.16.0.11 mysql:5.7
2.3、检查MySQL容器的命名、volume、网络IP是否正确
  • 容器名称
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
b6a67493996e        mysql:5.7           "docker-entrypoint.s…"   3 seconds ago       Up 3 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   my-mysql
  • volume
[root@localhost _data]# docker volume ls
DRIVER              VOLUME NAME
local               my-mysql-volume
[root@localhost _data]# docker volume inspect my-mysql-volume 
[
    {
        "CreatedAt": "2021-03-07T12:53:52Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-mysql-volume/_data",
        "Name": "my-mysql-volume",
        "Options": {},
        "Scope": "local"
    }
]
[root@localhost ~]# ls /var/lib/docker/volumes/my-mysql-volume/_data
auto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  mysql               private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       performance_schema  public_key.pem   server-key.pem
2.4、配置访问权限

进入容器

docker exec -it my-mysql /bin/bash

登录MySQL

root@3db857a0f6c3:/# mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.23 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

授权root远程访问

mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.00 sec)

修改密码

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

刷新权限

FLUSH PRIVILEGES;
2.5、通过Navicat for MySQL访问并创建数据库、表结构
3、部署SpringBoot项目
3.1、打包
maven clean package
3.2、制作Dockerfile文件
FROM java:8
MAINTAINER itmrl
LABEL name="demo" version="1.0.0" author="itmrl"
COPY demo.jar demo.jar
EXPOSE 8080
CMD ["java","-jar","-Dfile.encoding=UTF-8","-Xms1024m","-Xmx1024m","demo.jar"]
3.3、构建镜像
[root@localhost demo]# docker build -t demo:1.0 .
Sending build context to Docker daemon  19.86MB
Step 1/6 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/6 : MAINTAINER itmrl
 ---> Running in 8f0e66b0a555
Removing intermediate container 8f0e66b0a555
 ---> 1160a059ddcb
Step 3/6 : LABEL name="demo" version="1.0.0" author="itmrl"
 ---> Running in c0fa3e0aab5e
Removing intermediate container c0fa3e0aab5e
 ---> 0a7b8839130a
Step 4/6 : COPY demo.jar demo.jar
 ---> acbe71ed5013
Step 5/6 : EXPOSE 8080
 ---> Running in 81070e5afc2c
Removing intermediate container 81070e5afc2c
 ---> 75d0f60230ba
Step 6/6 : CMD ["java","-jar","-Dfile.encoding=UTF-8","-Xms1024m","-Xmx1024m","demo.jar"]
 ---> Running in aad2c8d8ad8f
Removing intermediate container aad2c8d8ad8f
 ---> 53b900ec786d
Successfully built 53b900ec786d
Successfully tagged demo:1.0
3.4、查看镜像
[root@localhost demo]# docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
demo                                            1.0                 53b900ec786d        44 seconds ago      663MB
3.5、创建容器
  • demo01
docker run -d --name demo01 -p 8081:8080 --network demo-net --ip 172.16.0.12 demo:1.0
  • demo02
docker run -d --name demo02 -p 8082:8080 --network demo-net --ip 172.16.0.13 demo:1.0
  • demo03
docker run -d --name demo03 -p 8083:8080 --network demo-net --ip 172.16.0.14 demo:1.0
3.6、检查demo01、demo02、demo03容器的命名、volume、网络IP是否正确
  • 容器名称
[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
ed37f2df5c8a        demo:1.0            "java -jar -Dfile.en…"   2 minutes ago       Up 2 minutes        0.0.0.0:8083->8080/tcp              demo03
f998ac6855de        demo:1.0            "java -jar -Dfile.en…"   2 minutes ago       Up 2 minutes        0.0.0.0:8082->8080/tcp              demo02
297de318ce45        demo:1.0            "java -jar -Dfile.en…"   3 minutes ago       Up 3 minutes        0.0.0.0:8081->8080/tcp              demo01
b6a67493996e        mysql:5.7           "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:3306->3306/tcp, 33060/tcp   my-mysql
  • 网络IP
[root@localhost ~]# docker exec -it demo01 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:10:00:0c brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.12/24 brd 172.16.0.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@localhost ~]# docker exec -it demo02 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
28: eth0@if29: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:10:00:0d brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.13/24 brd 172.16.0.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@localhost ~]# docker exec -it demo03 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
30: eth0@if31: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:10:00:0e brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.14/24 brd 172.16.0.255 scope global eth0
       valid_lft forever preferred_lft forever
3.7、测试程序
  • demo01

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QWRdjfrp-1615220558150)(CD2FCAA0667E4F3E8D40FE0791DDEE90)]

  • demo02

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HhxBmKNC-1615220558152)(F9405EDDC27448259DA8421C764B3DC0)]

  • demo03

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Z9USgV5-1615220558157)(69CCBFB5DC1C41C4B9509A57B41225D7)]

4、部署Nginx反向代理
4.1、在Linux上创建/tmp/nginx/nginx.conf文件
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    upstream backend{
       server 172.16.0.12:8080;
       server 172.16.0.13:8080;
       server 172.16.0.14:8080;
    }

    server {
       listen 80;
       location / {
          proxy_pass http://backend;
       }
  
    }
    

    include /etc/nginx/conf.d/*.conf;
}

4.2、创建nginx容器
docker run -d --name my-ngx -p 80:80 -v /tmp/nginx/nginx.conf:/etc/nginx/nginx.conf --network demo-net --ip 172.16.0.15 nginx
4.3、测试程序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cRcFY70u-1615220558159)(8AE10C18555F48BD9C6FEBAB6642D721)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itmrl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值