Docker Compose(九)

一、背景:

        对于现代应用来说,大多数都是通过很多的微服务互相协同组成一个完整的应用。例如,订单管理、用户管理、品类管理、缓存服务、数据库服务等,他们构成了一个电商平台的应用。而部署和管理大量的服务容器是一件非常繁琐的事情,而 Docker Compose 就是解决这类问题的。

        Docker Compose 是一个需要在 Docker 主机上进行安装的 Docker 容器编排外部工具。其并不是通过脚本或各种冗长的 Docker 命令来将应用组件组织起来,而是通过一个声明式的配置文件来描述整个应用,然后通过一条命令来完成应用的部署。部署成功后,还可以通过一系列简单命令实现对其完整生命周期的管理。

二、Compose 文件

2.1 文件简介

        Docker Compose 使用 YAML 文件来定义服务。官方推荐的默认文件名为 compose.yml ,但同时也支持 docker-compose.yml。

        由于一个 compose 文件定义的为一个项目所有的服务,所以一般在创建 compose 文件之前先新建一个目录,目录名称一般为项目名称,然后再将项目所需的所有镜像和微服务的 Dockerfile 放入该目录,并在此目录中新建 compose 文件。

        compose 文件包含 6 个顶级属性:versionservicesnetworksvolumesconfigs secrets,以及很多的他们下面包含的属性,下面简单介绍下常用的属性。

2.2 version

        version 是一个顶级属性,但已经过时,不再需要在 compose 文件中出现了,从以下官网中可以看出。

2.3 networks

        networks 作为一个顶级属性,用于定义和创建应用中所使用到的所有网络。其下包含的第一级属性即为网络属性,这个网络名称可以随意命名。而在网络名称下还可以包含很多的属性,常用属性如下:

services:app:networks:-app_bridge:  # 这里使用的并不是网络名称
networks:app_bridge:name:appBGnet    # 这才是网络名称driver:bridge

2.3.1 name

        networks 下的第一级属性一网络名称,并不是真正的网络名称,而仅仅是网终名称的一部分。在真正生成网络后,其真正的网络名称格式为:当前 compose 文件所在目录名_networks 下的第一级属性

        但如果设置了 name 属性,则网络名称即为这里指定的名称,不会出现名称再合成情况。

2.3.2 driver

        用于指定网络驱动,缺省驱动为 Bridge

2.3.3 attachable

        如果该属性设置为 true,则除了当前 compose 中定义的服务外,其它独立容器也可以连接到此网络,并能与该网络中的服务及也连接到该网络的其它独立容器通信。缺省状态为 false

2.4 volumes

        volumes 作为一个顶级属性,用于定义和创建应用中所用到的所有 volume 。其下包含的第一级属性即为 volume 的卷标,这个卷标可以随意命名。这个卷标所代表的是当前 Docker 主机中的目录,至于该目录的具体位置,是由系统自动分配的。

        在网络名称下还可包含很多的属性,但这些属性并不常用,所以这里就不进行介绍了。

2.5 services

        services 是一个顶级属性,用于定义一个应用中所包含的服务。Docker Compose 会将每个服务部署在各自的容器中。其下包含的第一级的属性即为服务名称,这个名称可以根据服务内容随意命名。而在服务名称下还可包含很多的属性,常用属性如下:

2.5.1 build

        用于指定一个 Dockerfile 的路径。而该 Dockerfile 则是用于创建当前服务镜像的。这个路径可以是以斜杠(/)开头的绝对路径,也可以是相对于当前 compose 文件的以点(.)号开头的相对路径。

        如果 Dockerfile 文件名不是默认名称,则需要通过 build 下的 context 属性指定路径,dockerfile 属性指定文件名。

build:context: ./dockerfile: myDockerfile

2.5.2 image

        用户指定当前服务所需要使用的镜像,这个镜像可以是本地镜像,也可以是远程镜像仓库中的镜像(会自动 pull)。

        如果设置了 build,此时再设置的 image 属性即为构建出的镜像的名称与 Tag

2.5.3 container_name

        该属性用于设置容器名称,但并不是必须的。如果没有设置该属性,容器名称则会采用“合成方式”。而合成时需要用到 services 下的第一级属性。

        在 services 下存在一级属性,称为服务名称。该级属性是作为 services 下的第一级属性出现的。服务名称将来会作为容器名称的一部分出现。容器的名称格式为:当前 compose文件所在目录名_服务名称

        如果在 services 下没有指定 image 属性,而是使用 build 属性,即没有现成的镜像,而是根据 build 下指定的 Dockerfile 生成镜像,此时生成的镜像名称格式为:当前 compose 文件所在目录名_服务名称

2.5.4 ports

        一个列表。前面为暴露出的端口号,后面为容器中应用的端口号。如果仅设置了一个端口号,那么这个端口号是容器中应用的端口号,其暴露到宿主机的端口号会被随机分配。

ports:- 80:80      # 绑定容器的 80 端口到主机的 80 端口- 9000:80	   # 绑定容器的 80 端口到主机的 9000 端口- 443        # 绑定容器的 443 端口到主机的任意端口,容器启动时随机分配绑定的主机端口号

2.5.5 command

        用于覆盖 Dockerfile 中的 CMD 指令内容,即启动该服务容器后立即运行的命令。如果直接按照 Dockerfile 中的 CMD 指令内容执行,则 compose 文件中无需该 command 属性。

2.5.6 depends_on

        一个列表。用于指定当前服务的启动所依赖的应用名称。即列表中指定的服务会先于当前服务启动。

2.5.7 deploy

        用于指定当前服务容器的部署设置。其下有一个常用属性 replicas,用于指定该服务启动的容器的数量。即实现一个服务多个容器。一旦指定了 deploy:replicas,就不能再指定 container name 属性了。因为各个启动的容器名称不能相同,而只能由系统自动生成。

services:frontend:image: awesome/webappdeploy:mode: replicatedreplicas: 6

2.5.8 networks

        用于指定当前服务容器要连接到的网络。该网络必须是已经存在的,或通过顶级属性networks 创建的网络。

2.5.9 volumes

        用于指定当前服务容器所使用到的所有 volume。这些 volume 可以使用路径与卷标两种方式。

        例如,下面是路径方式,非常直观,易于查看,但需要管理本地路径。

mysql:image: mysql:5.6ports:- 3306:3306volumes:- /etc/mysql:/var/lib/mysql

        再如,下面是卷标方式,backend backup 两个服务共享了 db-data 的卷,逻辑简洁明了,且无需管理本地路径。但具体卷标所代表的是 Docker 主机的哪个路径,并不能直观的看到。需要通过 docker volume inspect [卷标] 来查看。 

services:backend:image: awesome/databasevolumes:- db-data:/etc/databackup:image: backup-servicevolumes:- db-data:/var/lib/backup/data
volumes:db-data:

三、常用命令

3.1 docker-compose pull

        拉取 compose 中服务以来的全部镜像或指定镜像。通过在命令后添加服务名称来指定。

# 1、首先查看当前的所有镜像
[root@localhost xhf_test]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE# 2、必须切换到有 compose.yml 的目录下
[root@localhost xhf_test]# ls
com.DockerTestOne-0.0.1-SNAPSHOT.jar  compose.yml  Dockerfile# 3、拉取 compose.yml 文件中涉及到的镜像
[root@localhost xhf_test]# docker-compose pull
[+] Pulling 20/20✔ app Skipped - No image to be pulled                                                                                                                            0.0s ✔ mysql 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                          33.2s ✔ 35b2232c987e Pull complete                                                                                                                                   7.8s ✔ fc55c00e48f2 Pull complete                                                                                                                                   7.8s ✔ 0030405130e3 Pull complete                                                                                                                                   8.3s ✔ e1fef7f6a8d1 Pull complete                                                                                                                                   8.4s ✔ 1c76272398bb Pull complete                                                                                                                                   8.5s ✔ f57e698171b6 Pull complete                                                                                                                                  11.3s ✔ f5b825b269c0 Pull complete                                                                                                                                  11.4s ✔ dcb0af686073 Pull complete                                                                                                                                  11.5s ✔ 27bbfeb886d1 Pull complete                                                                                                                                  15.4s ✔ 6f70cc868145 Pull complete                                                                                                                                  15.7s ✔ 1f6637f4600d Pull complete                                                                                                                                  15.9s ✔ redis 6 layers [⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                                 8.6s ✔ 065132d9f705 Pull complete                                                                                                                                   5.4s ✔ be9835c27852 Pull complete                                                                                                                                   5.4s ✔ f4a0d1212c38 Pull complete                                                                                                                                   5.5s ✔ ea1f878b621a Pull complete                                                                                                                                   5.9s ✔ 7a838393b4b9 Pull complete                                                                                                                                   5.9s ✔ 9f48e489da12 Pull complete                                                                                                                                   6.0s # 4、查看镜像是否拉取成功
[root@localhost xhf_test]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        5.6       dd3b2a5dcb48   19 months ago   303MB
redis        4.0.1     aaf79d45ddb1   5 years ago     107MB

3.2 docker-compose config

        检查 compose 文件是否正确。可添加选项 -q,表示只有存在问题时才有输出。

# 1、检查编写的 compose 文件是否有问题
[root@localhost xhf_test]# docker-compose config -q# 2、输出的就是错误的信息
parsing /root/xhf_test/compose.yml: yaml: line 4: could not find expected ':'# 3、改正错误
[root@localhost xhf_test]# vi compose.yml# 4、再次检查
[root@localhost xhf_test]# docker-compose config -q# 5、这种输出就没有问题了
[root@localhost xhf_test]#

3.3 docker-compose up

        启动 compose 中所有的容器。-d 选项表示后台启动

# 1、后台的方式启动服务
[root@localhost xhf_test]# docker-compose up -d
[+] Building 16.3s (7/7) FINISHED                                                                                            => [app internal] load build definition from Dockerfile                                                                0.2s=> => transferring dockerfile: 209B                                                                                    0.0s=> [app internal] load .dockerignore                                                                                   0.1s=> => transferring context: 2B                                                                                         0.0s=> [app internal] load metadata for docker.io/library/java:8                                                          15.6s=> [app internal] load build context                                                                                   0.2s=> => transferring context: 21.12MB                                                                                    0.2s=> CACHED [app 1/2] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c  0.0s=> [app 2/2] COPY *.jar /app.jar                                                                                       0.2s=> [app] exporting to image                                                                                            0.1s=> => exporting layers                                                                                                 0.1s=> => writing image sha256:02f0a157ab34f13ef6847060a96acf94b3f3903d0c0d409b969254126da44e1c                            0.0s=> => naming to docker.io/library/xhf_test-app                                                                         0.0s
[+] Running 4/4✔ Network xhf_test_default    Created                                                                                  0.3s ✔ Container xhf_test-mysql-1  Started                                                                                  0.9s ✔ Container xhf_test-redis-1  Started                                                                                  0.8s ✔ Container xhf-project02     Started                                                                                  1.2s # 2、查看启动的容器是否成功
[root@localhost xhf_test]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
712b7474b78c   xhf_test-app   "java -jar /app.jar …"   58 seconds ago   Up 57 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              xhf-project02
454c684d4f7a   mysql:5.7      "docker-entrypoint.s…"   58 seconds ago   Up 57 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   xhf_test-mysql-1
45f5d1589c71   redis:4.0.1    "docker-entrypoint.s…"   58 seconds ago   Up 57 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              xhf_test-redis-1

3.4 docker-compose logs

        查看 compose 中所有服务或指定服务的运行日志。通过命令后添加服务名称来指定。默认情况下,将对不同的服务日志使用不同的颜色来区分。

 3.5 docker-compose ps

        列出 compose 中所有服务或指定服务。通过在命令后添加服务名称来指定

# 1、显示当前 compose 中的服务信息
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               2 minutes ago       Up 2 minutes        0.0.0.0:6379->6379/tcp, :::6379->6379/tcp# 2、显示当前运行的容器信息
[root@localhost xhf_test]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                       NAMES
06d6ad97781c   xhf_test-app   "java -jar /app.jar …"   3 minutes ago   Up 3 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   xhf-project02
a41c89cde090   mysql:5.6      "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   xhf_test-mysql-1
02324ae92687   redis:4.0.1    "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   xhf_test-redis-1

3.6 docker-compose top

        列出 compose 中当前正在运行的所有或指定服务。通过在命令后添加服务名称来指定

[root@localhost xhf_test]# docker-compose top
xhf-project02
UID    PID     PPID    C    STIME   TTY   TIME       CMD
root   18670   18642   9    18:15   ?     00:00:29   java -jar /app.jar -server.port=8080   xhf_test-mysql-1
UID       PID     PPID    C    STIME   TTY   TIME       CMD
polkitd   18516   18489   0    18:15   ?     00:00:02   mysqld   xhf_test-redis-1
UID       PID     PPID    C    STIME   TTY   TIME       CMD
polkitd   18515   18445   0    18:15   ?     00:00:00   redis-server *:6379  

3.7 docker-compose images

        列出 compose 中所有服务或指定服务对应的镜像。通过在命令后添加服务名称来指定

[root@localhost xhf_test]# docker-compose images
CONTAINER           REPOSITORY          TAG                 IMAGE ID            SIZE
xhf-project02       xhf_test-app        latest              02f0a157ab34        664MB
xhf_test-mysql-1    mysql               5.6                 dd3b2a5dcb48        303MB
xhf_test-redis-1    redis               4.0.1               aaf79d45ddb1        107MB

3.8 docker-compose port

        显示某个容器端口所映射的宿主机端口。

[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 32 minutes ago      Up 13 minutes       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               32 minutes ago      Up 13 minutes       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               32 minutes ago      Up 13 minutes       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp# 查看公网的映射端口
[root@localhost xhf_test]# docker-compose port mysql 3306
0.0.0.0:3306

3.9  docker-compose run

        在指定服务上执行一条命令

[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 45 minutes ago      Up 26 minutes       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               45 minutes ago      Up 26 minutes       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               45 minutes ago      Up 26 minutes       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp# 执行 ping 的命令,发现 redis 里面没有安装 network 工具
[root@localhost xhf_test]# docker-compose run redis ping www.baidu.com
/usr/local/bin/docker-entrypoint.sh: 16: exec: ping: not found

3.10 docker-compose exec

        进入指定服务容器。通过在命令后添加服务名称来指定

# 1、查看 service 的名字
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 26 minutes ago      Up 8 minutes        0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               26 minutes ago      Up 8 minutes        0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               26 minutes ago      Up 8 minutes        0.0.0.0:6379->6379/tcp, :::6379->6379/tcp# 2、进入 compose 的容器里面,记得是 service 的名字
[root@localhost xhf_test]# docker-compose exec -it app bash
root@06d6ad97781c:/# ls
app.jar  bin  boot  dev  etc  home  lib  lib64	media  mnt  opt  proc  root  run  sbin	srv  sys  tmp  usr  var
root@06d6ad97781c:/# exit
exit

3.11 docker-compose pause

        暂停 compose 中所有服务容器或指定服务容器。通过在命令后添加服务名称来指定

# 1、执行暂停命令
[root@localhost xhf_test]# docker-compose pause
[+] Pausing 3/0✔ Container xhf_test-redis-1  Paused                                                                                                                                0.0s ✔ Container xhf_test-mysql-1  Paused                                                                                                                                0.0s ✔ Container xhf-project02     Paused                                                                                                                                0.0s # 2、查看 compose 中的容器状态,发现处于暂停状态
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS                  PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 21 minutes ago      Up 3 minutes (Paused)   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               21 minutes ago      Up 3 minutes (Paused)   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               21 minutes ago      Up 3 minutes (Paused)   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp

3.12 docker-compose unpause

        恢复 compose 中处于暂停状态的所有服务容器或指定服务器。通过在命令后添加服务名称来指定。

# 1、解除暂停状态
[root@localhost xhf_test]# docker-compose unpause
[+] Running 3/0✔ Container xhf-project02     Unpaused                                                                                                                              0.0s ✔ Container xhf_test-redis-1  Unpaused                                                                                                                              0.0s ✔ Container xhf_test-mysql-1  Unpaused                                                                                                                              0.0s 
[root@localhost xhf_test]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS         PORTS                                       NAMES
06d6ad97781c   xhf_test-app   "java -jar /app.jar …"   23 minutes ago   Up 4 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   xhf-project02
a41c89cde090   mysql:5.6      "docker-entrypoint.s…"   23 minutes ago   Up 4 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   xhf_test-mysql-1
02324ae92687   redis:4.0.1    "docker-entrypoint.s…"   23 minutes ago   Up 4 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   xhf_test-redis-1
[

3.13 docker-compose stop

        停止 compose 中所有服务容器或指定服务容器。通过在命令后添加服务名称来指定

# 1、先查看
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 16 minutes ago      Up 2 seconds        0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               16 minutes ago      Up 2 seconds        0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               16 minutes ago      Up 2 seconds        0.0.0.0:6379->6379/tcp, :::6379->6379/tcp# 2、再停止
[root@localhost xhf_test]# docker-compose stop
[+] Stopping 3/3✔ Container xhf-project02     Stopped                                                                                                                               0.3s ✔ Container xhf_test-redis-1  Stopped                                                                                                                               0.2s ✔ Container xhf_test-mysql-1  Stopped                                                                                                                               1.8s 
# 3、再查看,发现都关掉了
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND             SERVICE             CREATED             STATUS              PORTS# 4、再启动
[root@localhost xhf_test]# docker-compose start
[+] Running 3/3✔ Container xhf_test-redis-1  Started                                                                                                                               0.3s ✔ Container xhf_test-mysql-1  Started                                                                                                                               0.4s ✔ Container xhf-project02     Started                                                                                                                               0.4s # 5、又都成功启动了
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 17 minutes ago      Up 2 seconds        0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               17 minutes ago      Up 3 seconds        0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               17 minutes ago      Up 3 seconds        0.0.0.0:6379->6379/tcp, :::6379->6379/tcp

3.14 docker-compose restart

        重启 compose 中所有服务容器或指定服务容器。通过在命令后添加服务名称来指定

# 1、执行重启的命令
[root@localhost xhf_test]# docker-compose restart
[+] Restarting 3/3✔ Container xhf-project02     Started                                                                                                                               0.7s ✔ Container xhf_test-mysql-1  Started                                                                                                                               2.8s ✔ Container xhf_test-redis-1  Started                                                                                                                               0.7s # 2、再次查看
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 18 minutes ago      Up 12 seconds       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               18 minutes ago      Up 10 seconds       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               18 minutes ago      Up 12 seconds       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp

3.15 docker-compose start

        启动 compose 中所有服务容器或指定服务容器。通过在命令后添加服务名称来指定

# 1、先查看
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 16 minutes ago      Up 2 seconds        0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               16 minutes ago      Up 2 seconds        0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               16 minutes ago      Up 2 seconds        0.0.0.0:6379->6379/tcp, :::6379->6379/tcp# 2、再停止
[root@localhost xhf_test]# docker-compose stop
[+] Stopping 3/3✔ Container xhf-project02     Stopped                                                                                                                               0.3s ✔ Container xhf_test-redis-1  Stopped                                                                                                                               0.2s ✔ Container xhf_test-mysql-1  Stopped                                                                                                                               1.8s 
# 3、再查看,发现都关掉了
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND             SERVICE             CREATED             STATUS              PORTS# 4、再启动
[root@localhost xhf_test]# docker-compose start
[+] Running 3/3✔ Container xhf_test-redis-1  Started                                                                                                                               0.3s ✔ Container xhf_test-mysql-1  Started                                                                                                                               0.4s ✔ Container xhf-project02     Started                                                                                                                               0.4s # 5、又都成功启动了
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 17 minutes ago      Up 2 seconds        0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               17 minutes ago      Up 3 seconds        0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               17 minutes ago      Up 3 seconds        0.0.0.0:6379->6379/tcp, :::6379->6379/tcp

3.16 docker-compose kill

        通过发送 SIGKILL 信号停止指定服务的容器。

[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 47 minutes ago      Up 28 minutes       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               47 minutes ago      Up 28 minutes       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               47 minutes ago      Up 28 minutes       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp# 杀掉 mysql 容器
[root@localhost xhf_test]# docker-compose kill mysql
[+] Killing 1/1✔ Container xhf_test-mysql-1  Killed                                                                                                                                0.3s 
[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 47 minutes ago      Up 28 minutes       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               47 minutes ago      Up 28 minutes       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp

3.17 docker-compose rm

        删除 compose 中的处于停止状态的所有容器或指定服务容器。通过在命令后添加服务名称来指定

[root@localhost xhf_test]# docker-compose ps
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
xhf-project02       xhf_test-app        "java -jar /app.jar …"   app                 48 minutes ago      Up 29 minutes       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
xhf_test-mysql-1    mysql:5.6           "docker-entrypoint.s…"   mysql               48 minutes ago      Up 1 second         0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
xhf_test-redis-1    redis:4.0.1         "docker-entrypoint.s…"   redis               48 minutes ago      Up 29 minutes       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp# 正在运行的是无法删除的
[root@localhost xhf_test]# docker-compose rm mysql
No stopped containers# 关掉
[root@localhost xhf_test]# docker-compose stop  mysql
[+] Stopping 1/1✔ Container xhf_test-mysql-1  Stopped                                                                                                                               2.0s # 再次删除
[root@localhost xhf_test]# docker-compose rm mysql
? Going to remove xhf_test-mysql-1 Yes
[+] Removing 1/0✔ Container xhf_test-mysql-1  Removed                                                                                                                               0.0s 
[root@localhost xhf_test]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
06d6ad97781c   xhf_test-app   "java -jar /app.jar …"   49 minutes ago   Up 30 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   xhf-project02
02324ae92687   redis:4.0.1    "docker-entrypoint.s…"   49 minutes ago   Up 30 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   xhf_test-redis-1

四、安装

[root@localhost ~]# cd /usr/local/bin/
[root@localhost bin]# ls
[root@localhost bin]# ls# 1、官方推荐的下载地址
[root@localhost bin]# curl -SL https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 57.6M  100 57.6M    0     0  12.4M      0  0:00:04  0:00:04 --:--:-- 20.7M
[root@localhost bin]# ls
docker-compose# 2、增加可执行属性
[root@localhost bin]# chmod +x docker-compose 
[root@localhost bin]# ls
docker-compose# 3、检测是否安装成功
[root@localhost bin]# docker-compose version
Docker Compose version v2.20.0# 不需要开启 docker,因为他是一个独立的组件
[root@localhost bin]# docker version
Client: Docker Engine - CommunityVersion:           24.0.4API version:       1.43Go version:        go1.20.5Git commit:        3713ee1Built:             Fri Jul  7 14:54:21 2023OS/Arch:           linux/amd64Context:           default
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

五、项目构建

5.1 工程构建打包

        首先,根据 文章1和 文章2 创建一个 spring boot 的项目,项目不用很复杂和完全照搬,只是让这个工程用到了 mysql redis 就好,因为我们后面的操作,需要涉及到多个组件。

        特别需要注意的地方是下面这块,mysql redis IP,目前使用的是宿主机上的 ip,因为要打包部署到 Docker 容器上。 

        构建版本,此时我们得到了一个可执行的 jar 包文件:com.docker_compose-0.0.1-SNAPSHOT.jar

5.2 定义 Dockerfile 

        在 /root 目录中 mkdir 一个名称为 xhf_test 的目录,然后在该目录下新建一个 Dockerfile 文件,并把上一步骤的 jar 包文件也拷贝进去,Dockerfile 文件的内容如下:

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

六、手工启动项目

        为了与使用 Docker Compose 编排项目进行对比,体现 Docker Compose 的方便快捷,这里先使用纯手动方式启动项目。

6.1 启动 mysql 容器

# 1、启动 mysql 容器并挂载相应的目录
[root@localhost xhf_test]# docker run -d --name mysql5.6 -p 3306:3306 -e MYSQL_ROOT_PASSWORD='Rfid123456' -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql mysql:5.6
Unable to find image 'mysql:5.6' locally
5.6: Pulling from library/mysql
35b2232c987e: Pull complete 
fc55c00e48f2: Pull complete 
0030405130e3: Pull complete 
e1fef7f6a8d1: Pull complete 
1c76272398bb: Pull complete 
f57e698171b6: Pull complete 
f5b825b269c0: Pull complete 
dcb0af686073: Pull complete 
27bbfeb886d1: Pull complete 
6f70cc868145: Pull complete 
1f6637f4600d: Pull complete 
Digest: sha256:20575ecebe6216036d25dab5903808211f1e9ba63dc7825ac20cb975e34cfcae
Status: Downloaded newer image for mysql:5.6
9c63331ae947627fef7d84bd4027b724db528645ce5bcd2518a13409a45d0f96# 2、看下容器是否启动成功
[root@localhost xhf_test]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                       NAMES
9c63331ae947   mysql:5.6   "docker-entrypoint.s…"   8 seconds ago   Up 5 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql5.6# 3、进入到 mysql 的容器里面
[root@localhost xhf_test]# docker exec -it mysql5.6 bash# 4、使用 root 账号登录
root@9c63331ae947:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.51 MySQL Community Server (GPL)Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.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.# 5、执行我们的建表语句
mysql> DROP DATABASE IF EXISTS zlits_user;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> CREATE DATABASE zlits_user;
Query OK, 1 row affected (0.00 sec)mysql> USE zlits_user;
Database changed
mysql> SET FOREIGN_KEY_CHECKS=0;
Query OK, 0 rows affected (0.00 sec)mysql> DROP TABLE IF EXISTS `user`;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> CREATE TABLE `user` (->   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',->   `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '',->   `password` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '',->   `age` bigint(20)  DEFAULT NULL  COMMENT '',->   PRIMARY KEY (`id`)-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='';
Query OK, 0 rows affected (0.00 sec)# 6、查看表是否创建成功
mysql> show tables;
+----------------------+
| Tables_in_zlits_user |
+----------------------+
| user                 |
+----------------------+
1 row in set (0.01 sec)

 6.2 启动 redis 容器

# 1、启动 redis ,并挂载相关目录
[root@localhost xhf_test]# docker run --name redis -p 6379:6379 -v /usr/local/redis/data:/data -v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf -d redis:4.0.1 redis-server /etc/redis/redis.conf
Unable to find image 'redis:4.0.1' locally
4.0.1: Pulling from library/redis
065132d9f705: Pull complete 
be9835c27852: Pull complete 
f4a0d1212c38: Pull complete 
ea1f878b621a: Pull complete 
7a838393b4b9: Pull complete 
9f48e489da12: Pull complete 
Digest: sha256:8a54dcc711406447b3631a81ef929f500e6836b43e7d61005fa27057882159da
Status: Downloaded newer image for redis:4.0.1
8c8b70174812a1d6cac7b2dfd9ff4e1fc24f25455ce4f095866174041d3d7061# 2、查看容器是否启动成功
[root@localhost xhf_test]# docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                                       NAMES
8c8b70174812   redis:4.0.1   "docker-entrypoint.s…"   5 seconds ago    Up 3 seconds    0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis
9c63331ae947   mysql:5.6     "docker-entrypoint.s…"   15 minutes ago   Up 15 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql5.6

6.3 启动应用容器

        在构建应用镜像之前,打开项目的配置文件,再次确认配置文件中指定的 mysql redis 主机的 IP 地址是否为 Docker 主机的 IP。如果不是宿主机的 IP 的话,在修改地址后记得重新进行 package 打包,并且重新上传。

# 1、构建版本
[root@localhost xhf_test]# docker build -t xhf-demo:1.0 .
[+] Building 16.3s (7/7) FINISHED                                                                             docker:default=> [internal] load build definition from Dockerfile                                                                    0.0s=> => transferring dockerfile: 209B                                                                                    0.0s=> [internal] load .dockerignore                                                                                       0.0s=> => transferring context: 2B                                                                                         0.0s=> [internal] load metadata for docker.io/library/java:8                                                              15.8s=> [internal] load build context                                                                                       0.2s=> => transferring context: 21.12MB                                                                                    0.2s=> CACHED [1/2] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d  0.0s=> [2/2] COPY *.jar /app.jar                                                                                           0.1s=> exporting to image                                                                                                  0.1s=> => exporting layers                                                                                                 0.1s=> => writing image sha256:c66050a07984686596109ef53a40ac5a54b68458eafe5bf938bc0abf443956a1                            0.0s=> => naming to docker.io/library/xhf-demo:1.0                                                                         0.0s# 2、查看构建的镜像是否成功
[root@localhost xhf_test]# docker images
REPOSITORY                                                                 TAG                IMAGE ID       CREATED          SIZE
xhf-demo                                                                   1.0                c66050a07984   13 seconds ago   664MB
tomcat                                                                     8.0                ef6a7c98d192   4 years ago      356MB
redis                                                                      4.0.1              aaf79d45ddb1   5 years ago      107MB# 3、启动我们的容器
[root@localhost xhf_test]# docker run --name xhf-project01 -dp 8080:8080 xhf-demo:1.0
4216f5485110634ee5b71d9ae0213d767b1d2dac602efa43c0717ae9cc44a9c3# 4、查看容器是否启动成功,此时我们已经启动了三个容器了
[root@localhost xhf_test]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
4216f5485110   xhf-demo:1.0   "java -jar /app.jar …"   5 seconds ago    Up 3 seconds    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   xhf-project01
8c8b70174812   redis:4.0.1    "docker-entrypoint.s…"   8 minutes ago    Up 8 minutes    0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis
9c63331ae947   mysql:5.6      "docker-entrypoint.s…"   23 minutes ago   Up 23 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql5.6

6.4 验证

        参考刚才在 eclipse 的验证方式进行验证,查看 mysql 里面是否存储了数据,再查看 redis 里面是否进行了缓存,如下图所示,我们可以看到,mysql 存储了数据,redis 添加了缓存。

七、Compose 编排启动项目

        手工启动项目不仅繁琐易错,而且还存在一个致命问题:当前应用访问的 mysql redis 只能是运行在当前 Docker 宿主机之上的,否则将无法访问它们。因为在应用的配置文件中已经将 mysql redis IP 进行了硬编码。而使用 Docker Compose 可以解决所有的问题。

7.1 定义 compose.yml

        在 xhf_test 目录下新建一个文件 compose.yml,内容如下所示:

# 一级标签,里面定义了所有的服务
services:# 这个是服务的名称,叫什么都可以app:# 构建 dockerfile,如果你的名称不是dockerfile,那么就需要在./ 后面添加文件的名字build: ./# 容器的名称container_name: xhf-project02# 暴露的端口号ports:- 8080:8080# 容器的启动是有先后顺序的,这里先启动下面的那两个服务depends_on:- mysql- redis mysql:image: mysql:5.6# 环境配置environment:MYSQL_ROOT_PASSWORD: Rfid123456ports:- 3306:3306# 暴露的文件挂载volumes:- /usr/local/mysql/conf:/etc/mysql/conf.d- /usr/local/mysql/data:/var/lib/mysqlredis:image: redis:4.0.1ports:- 6379:6379volumes:- /usr/local/redis/data:/data- /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf# 执行命令command: redis-server /etc/redis/redis.conf

        编写完文件之后,输入命令  docker-compose config -q 来检查上面的文件里面是否存在格式的错误,如下所示,如果没有任何输出就证明没有问题了:

7.2 修改应用

        对于应用服务,需要修改其配置文件 application.properties,将 mysql redis 的主机名修改为它们相应服务的名称。如下图所示:

        由于应用程序的配置文件发生了变化,所以需要对应用程序重新进行 package 打包,并将新的 jar 包上传到 Linux 系统的 /root/xhf_test 目录中。

7.3 启动所有容器

[root@localhost xhf_test]# docker-compose up -d
[+] Building 16.3s (7/7) FINISHED                                                                                            => [app internal] load build definition from Dockerfile                                                                0.2s=> => transferring dockerfile: 209B                                                                                    0.0s=> [app internal] load .dockerignore                                                                                   0.1s=> => transferring context: 2B                                                                                         0.0s=> [app internal] load metadata for docker.io/library/java:8                                                          15.6s=> [app internal] load build context                                                                                   0.2s=> => transferring context: 21.12MB                                                                                    0.2s=> CACHED [app 1/2] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c  0.0s=> [app 2/2] COPY *.jar /app.jar                                                                                       0.2s=> [app] exporting to image                                                                                            0.1s=> => exporting layers                                                                                                 0.1s=> => writing image sha256:02f0a157ab34f13ef6847060a96acf94b3f3903d0c0d409b969254126da44e1c                            0.0s=> => naming to docker.io/library/xhf_test-app                                                                         0.0s
[+] Running 4/4✔ Network xhf_test_default    Created                                                                                  0.3s ✔ Container xhf_test-mysql-1  Started                                                                                  0.9s ✔ Container xhf_test-redis-1  Started                                                                                  0.8s ✔ Container xhf-project02     Started                                                                                  1.2s 

7.4 写入 mysql 数据

# 1、查看 mysql 的容器ID
[root@localhost xhf_test]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                       NAMES
d9683f8edb1e   xhf_test-app   "java -jar /app.jar …"   5 seconds ago   Up 3 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   xhf-project02
d38d91c71e4c   mysql:5.6      "docker-entrypoint.s…"   5 seconds ago   Up 3 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   xhf_test-mysql-1
6ed666ea37ab   redis:4.0.1    "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   xhf_test-redis-1# 3、进入到 mysql 的容器里面
[root@localhost xhf_test]# docker exec -it d38d91c71e4c bash# 4、使用 root 账号登录
root@9c63331ae947:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.51 MySQL Community Server (GPL)Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.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.# 5、执行我们的建表语句
mysql> DROP DATABASE IF EXISTS zlits_user;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> CREATE DATABASE zlits_user;
Query OK, 1 row affected (0.00 sec)mysql> USE zlits_user;
Database changed
mysql> SET FOREIGN_KEY_CHECKS=0;
Query OK, 0 rows affected (0.00 sec)mysql> DROP TABLE IF EXISTS `user`;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> CREATE TABLE `user` (->   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',->   `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '',->   `password` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '',->   `age` bigint(20)  DEFAULT NULL  COMMENT '',->   PRIMARY KEY (`id`)-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='';
Query OK, 0 rows affected (0.00 sec)# 6、查看表是否创建成功
mysql> show tables;
+----------------------+
| Tables_in_zlits_user |
+----------------------+
| user                 |
+----------------------+
1 row in set (0.01 sec)

7.5 验证

        参考刚才在 6.4 章节的验证方式进行验证,查看 mysql 里面是否存储了数据,再查看 redis 里面是否进行了缓存,如下图所示,我们可以看到,mysql 存储了数据,redis 添加了缓存。

7.6 指定各组件名称

        前面的 compose.yml 文件中应用生成的镜像采用的是默认名称,mysql redis 生成的容器名称采用的也是默认名称,而生成加入的 bridge 网络也成是默认名称的网络。这些组件的名称也可以被指定的名称所替代。

7.6.1 定义 compose2.yml

[root@localhost xhf_test]# cp compose.yml compose2.yml
[root@localhost xhf_test]# ls
com.DockerTestOne-0.0.1-SNAPSHOT.jar  compose2.yml  compose.yml  Dockerfile
[root@localhost xhf_test]# vi compose2.yml 
[root@localhost xhf_test]# cat compose2.yml 
services:app:build: ./container_name: xhf-project02ports:- 8080:8080depends_on:- mysql- redisnetworks:- abmysql:image: mysql:5.6container_name: xhfmysql     # 设置 mysql 的容器名称为 xhfmysqlenvironment:MYSQL_ROOT_PASSWORD: Rfid123456ports:- 3306:3306volumes:- /usr/local/mysql/conf:/etc/mysql/conf.d- /usr/local/mysql/data:/var/lib/mysqlnetworks:                     # 加入指定网络组- abredis:image: redis:4.0.1container_name: xhfredis      # 设置 redis 的容器名称为 xhfredisports:- 6379:6379volumes:- /usr/local/redis/data:/data- /usr/local/redis/conf/redis.conf:/etc/redis/redis.confnetworks:                     # 加入指定网络组- abcommand: redis-server /etc/redis/redis.conf
networks:                         # 添加网络组信息ab:

7.6.2 启动所有容器

        这里通过 -f 选项指定要使用的 compose 文件,如下所示:

# 验证文件格式,有问题就及时改正
[root@localhost xhf_test]# docker-compose -f compose2.yml config -q
service "redis" refers to undefined network ab: invalid compose project
[root@localhost xhf_test]# vi compose2.yml
[root@localhost xhf_test]# docker-compose -f compose2.yml config -q# 启动
[root@localhost xhf_test]# docker-compose -f compose2.yml up -d
[+] Running 19/19✔ redis 6 layers [⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                18.7s ✔ 065132d9f705 Already exists                                                  0.0s ✔ be9835c27852 Already exists                                                  0.0s ✔ f4a0d1212c38 Already exists                                                  0.0s ✔ ea1f878b621a Already exists                                                  0.0s ✔ 7a838393b4b9 Already exists                                                  0.0s ✔ 9f48e489da12 Already exists                                                  0.0s ✔ mysql 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                          15.5s ✔ 35b2232c987e Pull complete                                                   4.2s ✔ fc55c00e48f2 Pull complete                                                   4.3s ✔ 0030405130e3 Pull complete                                                   4.6s ✔ e1fef7f6a8d1 Pull complete                                                   4.7s ✔ 1c76272398bb Pull complete                                                   4.8s ✔ f57e698171b6 Pull complete                                                   5.8s ✔ f5b825b269c0 Pull complete                                                   5.8s ✔ dcb0af686073 Pull complete                                                   5.9s ✔ 27bbfeb886d1 Pull complete                                                  12.5s ✔ 6f70cc868145 Pull complete                                                  12.6s ✔ 1f6637f4600d Pull complete                                                  12.6s 
[+] Building 15.6s (7/7) FINISHED                                                      => [app internal] load build definition from Dockerfile                          0.0s=> => transferring dockerfile: 209B                                              0.0s=> [app internal] load .dockerignore                                             0.0s=> => transferring context: 2B                                                   0.0s=> [app internal] load metadata for docker.io/library/java:8                    15.6s=> [app internal] load build context                                             0.0s=> => transferring context: 120B                                                 0.0s=> [app 1/2] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940  0.0s=> CACHED [app 2/2] COPY *.jar /app.jar                                          0.0s=> [app] exporting to image                                                      0.0s=> => exporting layers                                                           0.0s=> => writing image sha256:02f0a157ab34f13ef6847060a96acf94b3f3903d0c0d409b9692  0.0s=> => naming to docker.io/library/xhf_test-app                                   0.0s
[+] Running 5/5✔ Network xhf_test_ab         Created                                            0.3s ✔ Container xhfmysql          Started                                            0.7s ✔ Container xhf_test-redis-1  Recreated                                          0.2s ✔ Container xhf-project02     Started                                            0.9s ✔ Container xhfredis          Started                                            0.4s 

7.6.3 查看容器

[root@localhost xhf_test]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
89c90b06bac6   xhf_test-app   "java -jar /app.jar …"   26 seconds ago   Up 24 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   xhf-project02
94e2c98281d7   redis:4.0.1    "docker-entrypoint.s…"   26 seconds ago   Up 25 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   xhfredis
93dbcd634d7e   mysql:5.6      "docker-entrypoint.s…"   26 seconds ago   Up 24 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   xhfmysql

7.6.4 查看网络

        此时查看网络可以看到,又新生成一个网络。对于生成的网络,其生成的名称为"当前compose 文件所在目录名_networks 下的第一级属性”。如下所示:

[root@localhost xhf_test]# docker network ls
NETWORK ID     NAME               DRIVER    SCOPE
ae1e997a44c1   bridge             bridge    local
e2ea71d5a587   host               host      local
33960260d2b0   none               null      local
8dd3b5c5c231   xhf_test_ab        bridge    local
[

7.6.5 查看网络详情

        通过 docker network inspect finance ab 命令,查看该网络的详情,可以看到,compose中定义的三个服务容器都在该网终中。

[root@localhost xhf_test]# docker network inspect xhf_test_ab
[{"Name": "xhf_test_ab","Id": "8dd3b5c5c231298f5fa8a0a6c755d45f19bff626fdc7f789c9ea92eabb66436a","Created": "2023-07-24T20:08:00.415830596-07:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "172.19.0.0/16","Gateway": "172.19.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"89c90b06bac64ee91b5a4175fba43e7efedeb5816f7eff1374b72fcb3d00965b": {"Name": "xhf-project02","EndpointID": "f3867bf727a46e9d49f3e424f8fe1f9bfeb0a6a6e3dfad6e6dd1ff82ede036bc","MacAddress": "02:42:ac:13:00:04","IPv4Address": "172.19.0.4/16","IPv6Address": ""},"93dbcd634d7e47b891c268ee109df5c38fb78e151d61c50c37cc1a9b3ffe2151": {"Name": "xhfmysql","EndpointID": "2c17de705bd077f75bd589bdc2474620a7ba36fafc1aa6423aef81a4e6eda99a","MacAddress": "02:42:ac:13:00:03","IPv4Address": "172.19.0.3/16","IPv6Address": ""},"94e2c98281d7c0200b154afb962e913b06f17dd4f8733614774ff295b4ab1e4e": {"Name": "xhfredis","EndpointID": "f74110c2c78d8d4c12b1b573d731d32f3f38db253e48e69b491cbad3a9769802","MacAddress": "02:42:ac:13:00:02","IPv4Address": "172.19.0.2/16","IPv6Address": ""}},"Options": {},"Labels": {"com.docker.compose.network": "ab","com.docker.compose.project": "xhf_test","com.docker.compose.version": "2.20.0"}}
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/7303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【时间复杂度】

旋转数组 题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 /* 解题思路:使用三次逆转法,让数组旋转k次 1. 先整体逆转 // 1,2,3,4,5,6,7 // 7 6 5 4 3 2 1 2. 逆转子数组[0, k - 1] // 5 6 7 4 3…

疲劳驾驶检测和识别2:Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码)

疲劳驾驶检测和识别2:Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 目录 疲劳驾驶检测和识别2:Pytorch实现疲劳驾驶检测和识别(含疲劳驾驶数据集和训练代码) 1.疲劳驾驶检测和识别方法 2.疲劳驾驶数据集 (1)疲…

MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点6:MySQL Enterprise Monitor之Query Analyzer

文章目录 MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点6:MySQL Enterprise Monitor之Query AnalyzerMySQL Enterprise Monitor之Query AnalyzerQuery Response Time index (QRTi)例题例题1: Query Analyzer答案与解析1 参考 【免责声明】文章仅供学习交流&#x…

vue中如何通过webpack-bundle-analyzer打包分析工具进行配置优化

vue中随着项目的不断功能迭代和开发,项目文件越来越多,项目的打包文件也越来越大。如何对打包文件进行分析优化,减小打包文件大小呢?可以通过webpack-bundle-analyzer 这个打包分析工具进行解决。 1、webpack-bundle-analyzer的安…

Python Flask构建微信小程序订餐系统 (十一)

🔥 已经删除的会员不允许进行编辑昵称 🔥 🔥 已经删除的会员要隐藏掉会员信息的编辑按钮 🔥 🔥 创建商品表 food 🔥 CREATE TABLE `food` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`cat_id` int(11) NOT NULL DEFAULT 0 COMMENT 分类id,`name` varchar…

【算法题解】51. 二叉树的最近公共祖先

这是一道 中等难度 的题 https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/ 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为…

【模型压缩】 LPPN论文阅读笔记

LPPN论文阅读笔记 LPPN: A Lightweight Network for Fast Phase Picking 背景 深度学习模型的问题在于计算复杂度较高,在实际数据处理中需要面临较高的处理代价,且需要专用的加速处理设备,如GPU。随着数据累积,迫切需要设计一种…

【力扣刷题 | 第二十二天】

目录 前言: 63. 不同路径 II - 力扣(LeetCode) 343. 整数拆分 - 力扣(LeetCode) 总结: 前言: 今天我们爆刷动态规划章节的题目,相关的算法理论介绍我也有写过文章:【夜…

深度学习anaconda+pycharm+虚拟环境迁移

一、下载好anaconda和pycharm安装包。 下载anaconda:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror pycharm汉化包 二、安装anaconda 深度学习环境配置-Anaconda以及pytorch1.2.0的环境配置(Bubbliiiing 深度学习 教程&…

Java版本企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…

uniapp小程序跳转其他小程序uni.navigateToMiniProgram效果demo(整理)

放点击事件里面即可 uni.navigateToMiniProgram({appId: , //跳转的小程序的aooIdpath: pages/index/index?id123, //如果这里不填,默认是跳转到对方小程序的主页面extraData: { //需要传给对方小程序的数据data1: test},success(res) {// 打开成功} })

JAVA设计模式——单例模式

单例模式是应用最广的设计模式之一,也是程序员最熟悉的一个设计模式,使用单例模式的类必须保证只能有创建一个对象。 今天主要是回顾一下单例模式,主要是想搞懂以下几个问题 为什么要使用单例? 如何实现一个单例? 单…

c++11/c++98动态规划入门第5课,经典DP问题 --- 区间

第1题 取数问题 查看测评数据信息 有一排N个数,你和小明2个人玩游戏,每个人轮流从2端取数,每次可以从左或右取,不能从中间取。你取的所有的数的和是你的得分,小明取的所有的数的和是小明的得分。如果你先取&#x…

【图像分割】基于蜣螂优化算法DBO的Otsu(大津法)多阈值电表数字图像分割 电表数字识别【Matlab代码#51】

文章目录 【可更换其他算法,获取资源请见文章第5节:资源获取】1. 原始蜣螂优化算法1.1 滚球行为1.2 跳舞行为1.3 繁殖行为1.4 偷窃行为 2. 多阈值Otsu原理3. 部分代码展示4. 仿真结果展示5. 资源获取说明 【可更换其他算法,获取资源请见文章第…

springboot 项目启动不打印spring 启动日志

今天项目遇到一个很奇怪的问题,服务在启动时,不打印spring 的启动日志。经过排查发现是因为其他的依赖引入了 log4j 的依赖,因为我们的项目用的是logback,所以项目中没有log4j 的相关配置,所以干扰到了日志的打印 原因…

Vue入门项目——WebApi

Vue入门——WebApi vue3项目搭建组合式API响应式APIreactive()ref() 生命周期钩子computed计算属性函数watch监听函数父子通信模板引用组合选项 vue3项目搭建 简单看下Vue3的优势吧 下载安装npm及node.js16.0以上版本(确保安装成功可用如下代码检查版本&#xff0…

工厂电能质量治理解决方案

1、概述 谐波的危害十分严重,尤其在工厂这种设备较多的场合。大部分设备都是谐波源,谐波使电能的生产、传输和利用的效率降低,使电气设备过热、产生振动和噪声,并使绝缘老化,使用寿命缩短,甚至发生故障或烧…

RocketMQ 5.0 无状态实时性消费详解

作者:绍舒 背景 RocketMQ 5.0 版本引入了 Proxy 模块、无状态 pop 消费机制和 gRPC 协议等创新功能,同时还推出了一种全新的客户端类型:SimpleConsumer。 SimpleConsumer 客户端采用了无状态的 pop 机制,彻底解决了在客户端发布…

QT字节数组类QByteArray

QT字节数组类QByteArray 初始化访问某个元素截取字符串获取字节数组的大小数据转换与处理Hex转换数值转换与输出 字母大小写转换字符串数值转化为各类数值QBQyteArray和char*互转QByteArray 和std::string互转与字符串QString互转QByteArray和自定义结构体之间的转化判断是否为…

区块链实验室(11) - PBFT耗时与流量特征

以前面仿真程序为例,分析PBFT的耗时与流量特征。实验如下,100个节点构成1个无标度网络,节点最小度为5,最大度为38. 从每个节点发起1次交易共识。统计每次交易的耗时以及流量。本文所述的流量见前述仿真程序的说明:区块链实验室(3)…