【Docker学习笔记 七】深入理解Docker网络配置及微服务部署(下)

简介: 【Docker学习笔记 七】深入理解Docker网络配置及微服务部署(下)

Docker微服务部署

接下来进入网络的实战内容,分别部署下redis集群和springboot服务。

Redis集群实战部署

下面部署如图所示的三主三从的Redis集群,其实质就是启动六个容器,并将他们连接到同一自定义网络上

1 创建自定义网络

首先创建网络名为redis-tml的自定义网络:docker network create redis-tml --subnet 172.38.0.0/16

[root@192 ~]# docker network create redis-tml --subnet 172.38.0.0/16
80fcee363b04bdb8f2d6296fe4b5863d83900edfc42ff7fdf28c581b8b843ee9
[root@192 ~]# docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
173795075c5b   bridge      bridge    local
fcddcee8a2d1   host        host      local
a2b305685ea4   mynet       bridge    local
9efbda880fae   none        null      local
80fcee363b04   redis-tml   bridge    local
[root@192 ~]# docker inspect redis-tml
[
    {
        "Name": "redis-tml",
        "Id": "80fcee363b04bdb8f2d6296fe4b5863d83900edfc42ff7fdf28c581b8b843ee9",
        "Created": "2022-03-06T11:20:45.767528371+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.38.0.0/16"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
[root@192 ~]#

2 编写容器所需的redis配置文件

通过以下脚本创建六个Redis 的配置信息:

for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379 
bind 0.0.0.0
cluster-enabled yes 
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

创建节点并进入查看节点配置信息:

[root@192 ~]# for port in $(seq 1 6); \
> do \
> mkdir -p /mydata/redis/node-${port}/conf
> touch /mydata/redis/node-${port}/conf/redis.conf
> cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
> port 6379 
> bind 0.0.0.0
> cluster-enabled yes 
> cluster-config-file nodes.conf
> cluster-node-timeout 5000
> cluster-announce-ip 172.38.0.1${port}
> cluster-announce-port 6379
> cluster-announce-bus-port 16379
> appendonly yes
> EOF
> done
[root@192 ~]# cd /mydata/redis
[root@192 redis]# ls
node-1  node-2  node-3  node-4  node-5  node-6
[root@192 redis]# cd node-1
[root@192 node-1]# ls
conf
[root@192 node-1]# cd conf
[root@192 conf]# ls
redis.conf
[root@192 conf]# cat redis.conf
port 6379 
bind 0.0.0.0
cluster-enabled yes 
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.11
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
[root@192 conf]#

3 启动所有容器并设置挂载目录

接下来启动容器并设置容器挂载目录:

for port in $(seq 1 6); \
do
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-tml-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis-tml --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
done

执行容器创建命令并查看结果:

[root@192 /]# for port in $(seq 1 6); \
> do
> docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-tml-${port} \
> -v /mydata/redis/node-${port}/data:/data \
> -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
> -d --net redis-tml --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
> done
4e2fbf58e42a91c9da043358a60dfe96c67d758d6bd92d0058e797bb0fe64891
21817e4511e25c2df2e8c461e3b287d092049f04bb6580ceb5c0ffcaa2ff638b
a70476765adf8e9f4bb544ddaf3ce5aa8519f15056a46be8cbb48dbe025c0e9a
497dc6d028a4d03df7184f2f99e619c071ee38f5ed3ccc697cf406ea020f17db
e61d6e975db74423253f2f9abcbeb34a4383439cbff7a55120692136dfa3c87a
c81b1d29ea56a79d251c337d3cd6b6d4564a5935ac1ecc2d1389475fe91d1c8f
[root@192 /]# docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED             STATUS             PORTS                                                                                      NAMES
c81b1d29ea56   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   10 seconds ago      Up 3 seconds       0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16376->16379/tcp, :::16376->16379/tcp   redis-tml-6
e61d6e975db7   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   11 seconds ago      Up 9 seconds       0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16375->16379/tcp, :::16375->16379/tcp   redis-tml-5
497dc6d028a4   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   13 seconds ago      Up 10 seconds      0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16374->16379/tcp, :::16374->16379/tcp   redis-tml-4
a70476765adf   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   14 seconds ago      Up 12 seconds      0.0.0.0:6373->6379/tcp, :::6373->6379/tcp, 0.0.0.0:16373->16379/tcp, :::16373->16379/tcp   redis-tml-3
21817e4511e2   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   20 seconds ago      Up 13 seconds      0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16372->16379/tcp, :::16372->16379/tcp   redis-tml-2
4e2fbf58e42a   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   21 seconds ago      Up 19 seconds      0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16371->16379/tcp, :::16371->16379/tcp   redis-tml-1
650925c833ed   tomcat:8.0                               "catalina.sh run"        About an hour ago   Up About an hour   0.0.0.0:49158->8080/tcp, :::49158->8080/tcp                                                tomcat-tml-net-02
b9e24d2619cb   tomcat:8.0                               "catalina.sh run"        About an hour ago   Up About an hour   0.0.0.0:49157->8080/tcp, :::49157->8080/tcp                                                tomcat-tml-net-01
3e862598e630   tomcat:8.0                               "catalina.sh run"        About an hour ago   Up About an hour   0.0.0.0:49156->8080/tcp, :::49156->8080/tcp                                                tomcat02
6cd417097796   tomcat:8.0                               "catalina.sh run"        2 hours ago         Up 2 hours         0.0.0.0:49155->8080/tcp, :::49155->8080/tcp                                                tomcat01
50b626fc91d2   tianmaolin/tml-mydockerfile-tomcat:1.0   "/bin/sh -c '/usr/lo…"   13 hours ago        Up 13 hours        0.0.0.0:49154->8080/tcp, :::49154->8080/tcp                                                tomcat-tml
[root@192 /]#

4 构建Redis容器集群

下面进入到redis-tml-1容器中创建集群redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1,使用该命令构建集群:

[root@192 ~]# docker exec -it redis-tml-1 /bin/sh
/data # pwd
/data # ls
appendonly.aof  nodes.conf
/data # redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.38.0.15:6379 to 172.38.0.11:6379
Adding replica 172.38.0.16:6379 to 172.38.0.12:6379
Adding replica 172.38.0.14:6379 to 172.38.0.13:6379
M: b1fc3e1075f55e7e7d0fb6051afbacbe5e5aaead 172.38.0.11:6379
   slots:[0-5460] (5461 slots) master
M: 3726bd8feb6f538db1299121f1b99e1fe06db0b0 172.38.0.12:6379
   slots:[5461-10922] (5462 slots) master
M: 69f5719cfe395e4a28874840560a2064b14d7468 172.38.0.13:6379
   slots:[10923-16383] (5461 slots) master
S: 07f17e5e4dc68d988d12ab42754ebb13bea28969 172.38.0.14:6379
   replicates 69f5719cfe395e4a28874840560a2064b14d7468
S: d47804444b5abe6a8e8d9f2637be06d37f7a6cd5 172.38.0.15:6379
   replicates b1fc3e1075f55e7e7d0fb6051afbacbe5e5aaead
S: dbd9154bd598b6af1ece5e3b567c04b96989f93c 172.38.0.16:6379
   replicates 3726bd8feb6f538db1299121f1b99e1fe06db0b0
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
...
>>> Performing Cluster Check (using node 172.38.0.11:6379)
M: b1fc3e1075f55e7e7d0fb6051afbacbe5e5aaead 172.38.0.11:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 3726bd8feb6f538db1299121f1b99e1fe06db0b0 172.38.0.12:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 07f17e5e4dc68d988d12ab42754ebb13bea28969 172.38.0.14:6379
   slots: (0 slots) slave
   replicates 69f5719cfe395e4a28874840560a2064b14d7468
S: dbd9154bd598b6af1ece5e3b567c04b96989f93c 172.38.0.16:6379
   slots: (0 slots) slave
   replicates 3726bd8feb6f538db1299121f1b99e1fe06db0b0
S: d47804444b5abe6a8e8d9f2637be06d37f7a6cd5 172.38.0.15:6379
   slots: (0 slots) slave
   replicates b1fc3e1075f55e7e7d0fb6051afbacbe5e5aaead
M: 69f5719cfe395e4a28874840560a2064b14d7468 172.38.0.13:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
/data #

查看集群信息:

/data # redis-cli -c
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:164
cluster_stats_messages_pong_sent:157
cluster_stats_messages_sent:321
cluster_stats_messages_ping_received:152
cluster_stats_messages_pong_received:164
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:321
127.0.0.1:6379>

查看节点信息cluster nodes,可以清楚的看到Redis节点的主从关系。

127.0.0.1:6379> cluster nodes
3726bd8feb6f538db1299121f1b99e1fe06db0b0 172.38.0.12:6379@16379 master - 0 1646540001511 2 connected 5461-10922
07f17e5e4dc68d988d12ab42754ebb13bea28969 172.38.0.14:6379@16379 slave 69f5719cfe395e4a28874840560a2064b14d7468 0 1646540000503 4 connected
dbd9154bd598b6af1ece5e3b567c04b96989f93c 172.38.0.16:6379@16379 slave 3726bd8feb6f538db1299121f1b99e1fe06db0b0 0 1646540001000 6 connected
d47804444b5abe6a8e8d9f2637be06d37f7a6cd5 172.38.0.15:6379@16379 slave b1fc3e1075f55e7e7d0fb6051afbacbe5e5aaead 0 1646540001000 5 connected
69f5719cfe395e4a28874840560a2064b14d7468 172.38.0.13:6379@16379 master - 0 1646540001511 3 connected 10923-16383
b1fc3e1075f55e7e7d0fb6051afbacbe5e5aaead 172.38.0.11:6379@16379 myself,master - 0 1646539999000 1 connected 0-5460
127.0.0.1:6379>

5 测试集群功能

测试主从复制是否生效,设置一个key,然后获取一下这个key

/data # redis-cli -c
172.38.0.15:6379> set ttt shuai
-> Redirected to slot [15942] located at 172.38.0.13:6379
OK
172.38.0.13:6379> get ttt
"shuai"
172.38.0.13:6379>

可以看到:172.38.0.13 存了这个key,对应的容器是redis-tml-3:新建一个会话,停止redis-tml-3容器服务,

[root@192 ~]# docker stop redis-tml-3
redis-tml-3
[root@192 ~]#

此时重新连接Redis-cli客户端,再次获取ttt,重定向到了redis-tml-3节点的从节点redis-tml-4中处理

/data # redis-cli -c
127.0.0.1:6379> get ttt
-> Redirected to slot [15942] located at 172.38.0.14:6379
"shuai"
172.38.0.14:6379>

再次查看节点信息,可以看到13master的redis服务down了,14的当选为新的master:

172.38.0.14:6379> cluster nodes
dbd9154bd598b6af1ece5e3b567c04b96989f93c 172.38.0.16:6379@16379 slave 3726bd8feb6f538db1299121f1b99e1fe06db0b0 0 1646540807043 6 connected
07f17e5e4dc68d988d12ab42754ebb13bea28969 172.38.0.14:6379@16379 myself,master - 0 1646540806000 8 connected 10923-16383
3726bd8feb6f538db1299121f1b99e1fe06db0b0 172.38.0.12:6379@16379 master - 0 1646540809055 2 connected 5461-10922
69f5719cfe395e4a28874840560a2064b14d7468 172.38.0.13:6379@16379 master,fail - 1646540720260 1646540719000 3 connected
b1fc3e1075f55e7e7d0fb6051afbacbe5e5aaead 172.38.0.11:6379@16379 slave d47804444b5abe6a8e8d9f2637be06d37f7a6cd5 0 1646540808000 7 connected
d47804444b5abe6a8e8d9f2637be06d37f7a6cd5 172.38.0.15:6379@16379 master - 0 1646540808047 7 connected 0-5460
172.38.0.14:6379>

SpirngBoot项目打包部署

SpringBoot项目打包镜像分为以下五个步骤

1 构建SpringBoot项目

在idea中构建一个最简单的Spring Boot项目,写一个接口,启动项目本地测试能否正常调用。

内容如下:

package com.example.dockerspringboottest.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author tianmaolin
 * @since 2022-03-06 12:40:31
 */
@RestController
public class DockerController {
    @GetMapping("/hello-docker")
    public String hello(){
        return "我是通过docker容器启动的springboot项目";
    }
}

本地测试如下:

2 打包springboot项目

使用Maven的package打包Spring Boot项目,生成jar包:

打包完成可以在输出目录找到jar包:

3 编写Dockerfile镜像文件

在idea编写一个Dockerfile镜像文件

文件内容如下:

FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

4 将Dockerfile与jar包发布到宿主机

将打包生成的jar包和编写的Dockerfile文件发送到服务器(在这里也就是虚拟机TML-2)上,这里我通过appNode处理:

5 在宿主机中构建镜像

接下来我们直接构建镜像即可:

[root@192 ~]# cd /home
[root@192 home]# ls
idea  tml-1
[root@192 home]# cd idea
[root@192 idea]# ls
Dockerfile  docker-springboot-test-0.0.1-SNAPSHOT.jar
[root@192 idea]# docker build -f Dockerfile -t tml-docker-idea-springboot .
Sending build context to Docker daemon  17.56MB
Step 1/5 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete 
fce5728aad85: Pull complete 
76610ec20bf5: Pull complete 
60170fec2151: Pull complete 
e98f73de8f0d: Pull complete 
11f7af24ed9c: Pull complete 
49e2d6393f32: Pull complete 
bb9cdec9c7f3: Pull complete 
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
 ---> d23bdf5b1b1b
Step 2/5 : COPY *.jar /app.jar
 ---> 4e40af50856c
Step 3/5 : CMD ["--server.port=8080"]
 ---> Running in 547d61b06081
Removing intermediate container 547d61b06081
 ---> ab4113f7fc6e
Step 4/5 : EXPOSE 8080
 ---> Running in 1dc2de8fbcce
Removing intermediate container 1dc2de8fbcce
 ---> 5f464a63a577
Step 5/5 : ENTRYPOINT ["java","-jar","/app.jar"]
 ---> Running in c0d55c04b170
Removing intermediate container c0d55c04b170
 ---> 60803e8e55e4
Successfully built 60803e8e55e4
Successfully tagged tml-docker-idea-springboot:latest
[root@192 idea]# docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED             STATUS             PORTS                                                                                      NAMES
c81b1d29ea56   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16376->16379/tcp, :::16376->16379/tcp   redis-tml-6
e61d6e975db7   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16375->16379/tcp, :::16375->16379/tcp   redis-tml-5
497dc6d028a4   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16374->16379/tcp, :::16374->16379/tcp   redis-tml-4
21817e4511e2   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16372->16379/tcp, :::16372->16379/tcp   redis-tml-2
4e2fbf58e42a   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   About an hour ago   Up 48 minutes      0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16371->16379/tcp, :::16371->16379/tcp   redis-tml-1
650925c833ed   tomcat:8.0                               "catalina.sh run"        2 hours ago         Up 2 hours         0.0.0.0:49158->8080/tcp, :::49158->8080/tcp                                                tomcat-tml-net-02
b9e24d2619cb   tomcat:8.0                               "catalina.sh run"        2 hours ago         Up 2 hours         0.0.0.0:49157->8080/tcp, :::49157->8080/tcp                                                tomcat-tml-net-01
3e862598e630   tomcat:8.0                               "catalina.sh run"        2 hours ago         Up 2 hours         0.0.0.0:49156->8080/tcp, :::49156->8080/tcp                                                tomcat02
6cd417097796   tomcat:8.0                               "catalina.sh run"        3 hours ago         Up 3 hours         0.0.0.0:49155->8080/tcp, :::49155->8080/tcp                                                tomcat01
50b626fc91d2   tianmaolin/tml-mydockerfile-tomcat:1.0   "/bin/sh -c '/usr/lo…"   14 hours ago        Up 14 hours        0.0.0.0:49154->8080/tcp, :::49154->8080/tcp                                                tomcat-tml
[root@192 idea]# docker images
REPOSITORY                           TAG                IMAGE ID       CREATED          SIZE
tml-docker-idea-springboot           latest             60803e8e55e4   17 seconds ago   661MB
tianmaolin/tml-mydockerfile-tomcat   1.0                94dbe2d0cb91   6 days ago       799MB
redis                                5.0.9-alpine3.11   3661c84ee9d0   22 months ago    29.8MB
tomcat                               8.0                ef6a7c98d192   3 years ago      356MB
java                                 8                  d23bdf5b1b1b   5 years ago      643MB
[root@192 idea]#

6 运行镜像启动容器

运行镜像启动容器查看:

[root@192 idea]# docker run -d -P tml-docker-idea-springboot 
37a22cf636f20e025383bea3c73d16b023ed87480f8324e9397ac6fd2230823d
[root@192 idea]# docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED             STATUS             PORTS                                                                                      NAMES
37a22cf636f2   tml-docker-idea-springboot               "java -jar /app.jar …"   3 seconds ago       Up 1 second        0.0.0.0:49159->8080/tcp, :::49159->8080/tcp                                                elegant_mendel
c81b1d29ea56   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16376->16379/tcp, :::16376->16379/tcp   redis-tml-6
e61d6e975db7   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16375->16379/tcp, :::16375->16379/tcp   redis-tml-5
497dc6d028a4   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16374->16379/tcp, :::16374->16379/tcp   redis-tml-4
21817e4511e2   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16372->16379/tcp, :::16372->16379/tcp   redis-tml-2
4e2fbf58e42a   redis:5.0.9-alpine3.11                   "docker-entrypoint.s…"   About an hour ago   Up 51 minutes      0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16371->16379/tcp, :::16371->16379/tcp   redis-tml-1
650925c833ed   tomcat:8.0                               "catalina.sh run"        2 hours ago         Up 2 hours         0.0.0.0:49158->8080/tcp, :::49158->8080/tcp                                                tomcat-tml-net-02
b9e24d2619cb   tomcat:8.0                               "catalina.sh run"        2 hours ago         Up 2 hours         0.0.0.0:49157->8080/tcp, :::49157->8080/tcp                                                tomcat-tml-net-01
3e862598e630   tomcat:8.0                               "catalina.sh run"        2 hours ago         Up 2 hours         0.0.0.0:49156->8080/tcp, :::49156->8080/tcp                                                tomcat02
6cd417097796   tomcat:8.0                               "catalina.sh run"        3 hours ago         Up 3 hours         0.0.0.0:49155->8080/tcp, :::49155->8080/tcp                                                tomcat01
50b626fc91d2   tianmaolin/tml-mydockerfile-tomcat:1.0   "/bin/sh -c '/usr/lo…"   14 hours ago        Up 14 hours        0.0.0.0:49154->8080/tcp, :::49154->8080/tcp                                                tomcat-tml
[root@192 idea]#

7 请求测试查看结果

我们从页面上进行一下请求测试:

可以发现请求成功

总结一下

本篇Blog为Docker基础及原理部分的最终篇,未学docker之前以为docker会将一个项目所需环境都放到一个容器里,例如springboot、mysql等,开始学之后发现一个容器只放置一个中间件又奇怪这些容器是怎么组合起来工作的,今天学习了网络之后才了解docker是通过网络配置可以构建集群、支持容器之间的相互访问,所以说【确立观点-提出疑问-学习-解决疑问-确立新观点-提出新疑问-再学习】似乎是一个正常的学习链路,在不断打到重建中螺旋向上的加深对事物的认知。

相关文章
|
6月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
2097 10
|
6月前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
741 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
9月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
1446 39
|
8月前
|
存储 监控 Shell
SkyWalking微服务监控部署与优化全攻略
综上所述,虽然SkyWalking的初始部署流程相对复杂,但通过一步步的准备和配置,可以充分发挥其作为可观测平台的强大功能,实现对微服务架构的高效监控和治理。尽管未亲临,心已向往。将一件事做到极致,便是天分的展现。
|
10月前
|
传感器 算法 数据安全/隐私保护
基于GA遗传优化的三维空间WSN网络最优节点部署算法matlab仿真
本程序基于遗传算法(GA)优化三维空间无线传感网络(WSN)的节点部署,通过MATLAB2022A实现仿真。算法旨在以最少的节点实现最大覆盖度,综合考虑空间覆盖、连通性、能耗管理及成本控制等关键问题。核心思想包括染色体编码节点位置、适应度函数评估性能,并采用网格填充法近似计算覆盖率。该方法可显著提升WSN在三维空间中的部署效率与经济性,为实际应用提供有力支持。
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
482 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
供应链 监控 安全
网络安全中的零信任架构:从概念到部署
网络安全中的零信任架构:从概念到部署
1170 75
|
11月前
|
存储 运维 监控
2025年4月深度评测:10款最值得部署的网络监控软件
真正卓越的运维不仅仅是对当前问题的解决,更在于对未来的预测和防范。 OpManager 的预测报表功能可以为用户提供有关未来存储需求增长方式的直观展示,帮助用户进行基于需求的容量规划,从而避免成本浪费。
509 0
|
传感器 算法 物联网
基于粒子群算法的网络最优节点部署优化matlab仿真
本项目基于粒子群优化(PSO)算法,实现WSN网络节点的最优部署,以最大化节点覆盖范围。使用MATLAB2022A进行开发与测试,展示了优化后的节点分布及其覆盖范围。核心代码通过定义目标函数和约束条件,利用PSO算法迭代搜索最佳节点位置,并绘制优化结果图。PSO算法灵感源于鸟群觅食行为,适用于连续和离散空间的优化问题,在通信网络、物联网等领域有广泛应用。该算法通过模拟粒子群体智慧,高效逼近最优解,提升网络性能。
457 16