docker-compose

概念

之前运行一个镜像,需要添加大量的参数,可以通过Docker-Compose编写这些参数。而且Docker-Compose可以帮助我们批量的管理容器。这些信息只需要通过一个docker-compose.yml文件去维护即可。

安装

在这里插入图片描述
这个地址比较慢可以使用下面这个下载

# 下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 是否安装
docker-compose --version

可能出现权限不足,解决如下

[root@base bin]# docker-compose --version
-bash: /usr/local/bin/docker-compose: 权限不够
# chmod +x 的意思就是给执行权限
[root@base bin]# chmod +x /usr/local/bin/docker-compose
[root@base bin]# docker-compose --version
docker-compose version 1.24.0, build 0aa59064
#chmod +x 颜色就是普通文本的颜色,+x 之后颜色就是绿色的了。chmod -x 就是普通文本颜色,普通文本颜色是不能执行的,执行会报错;chmod +x 就是绿色的可执行文件了。

图解 chmod +x
在这里插入图片描述

用 docker-compose 编排第一个容器

[root@base bin]# mkdir -p /usr/local/docker/mysql_new
[root@base bin]# cd /usr/local/docker/mysql_new
# 编辑 docker-compose.yaml
[root@base mysql_new]# vi docker-compose.yaml
# 查看 docker-compose.yaml
[root@base mysql_new]# cat docker-compose.yaml 
version: '3.1'
services:
  new_mysql:           # 服务的名称 
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: mysql:5.7  # 指定镜像路径                      
    container_name: new_mysql  # 指定容器名称
    ports:
      - 3308:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - ./data:/var/lib/mysql   # 映射数据卷
# 编排容器
[root@base mysql_new]# docker-compose up -d
Creating network "mysql_new_default" with the default driver
Creating new_mysql ... done
[root@base mysql_new]# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
d2db530fe0a3   mysql:5.7        "docker-entrypoint.s…"   14 seconds ago   Up 12 seconds   33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp   new_mysql
35074a683876   dockerfile:1.0   "java -jar my.jar"       48 minutes ago   Up 48 minutes   0.0.0.0:7777->7777/tcp, :::7777->7777/tcp              dockerfile-test
66d2797cdf06   mysql:5.7        "docker-entrypoint.s…"   21 hours ago     Up 21 hours     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   some-mysql
# 卸载编排的容器
[root@base mysql_new]# docker-compose  down
Stopping new_mysql ... done
Removing new_mysql ... done
Removing network mysql_new_default
[root@base mysql_new]# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
35074a683876   dockerfile:1.0   "java -jar my.jar"       49 minutes ago   Up 49 minutes   0.0.0.0:7777->7777/tcp, :::7777->7777/tcp              dockerfile-test
66d2797cdf06   mysql:5.7        "docker-entrypoint.s…"   21 hours ago     Up 21 hours     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   some-mysql

docker-compose.yaml 可以编排多个容器
linux下,MySQL默认的数据文档存储目录为/var/lib/mysql。

version: '3.1'
services:
  mysql_linux:           # 服务的名称
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: mysql:5.7  # 指定镜像路径
    container_name:  mysql_linux  # 指定容器名称
    ports:
      - 3308:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - ./data:/var/lib/mysql   # 映射数据卷
  springcloud_user:           # 服务的名称
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: myimage:1.0  # 指定镜像路径
    container_name: springcloud_user  # 指定容器名称
    ports:
      - 7001:7001   #  指定端口号的映射
    environment:
      profile: prod
      TZ: Asia/Shanghai        # 指定时区
  springcloud_share:           # 服务的名称
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: myimage:1.0  # 指定镜像路径
    container_name: springcloud_share  # 指定容器名称
    ports:
      - 7002:7002   #  指定端口号的映射
    environment:
      profile: prod
      TZ: Asia/Shanghai        # 指定时区
  springcloud_right:           # 服务的名称
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: myimage:1.0  # 指定镜像路径
    container_name: springcloud_right  # 指定容器名称
    ports:
      - 7003:7003   #  指定端口号的映射
    environment:
      profile: prod
      TZ: Asia/Shanghai        # 指定时区

其他docker-compose 命令

在使用docker-compose的命令时,默认会在当前目录下找docker-compose.yml文件
基于docker-compose.ym1启动管理的容器

docker-compose up -d

关闭并删除容器

docker-compose down

开启|关闭|重启已经存在的由docker-compose维护的容器

docker-compose start| stop | restart

查看由docker-compose管理的容器

docker-compose ps

查看日志

docker-compose logs -f

docker-compose 和 Dockerfile 连用

在这里插入图片描述

容器间的网络通信

准备一个项目
在这里插入图片描述
jar中没有主清单属性
解决链接:https://blog.csdn.net/weixin_56219549/article/details/122123158.
提交gitee

[root@base /]# mkdir -p  /usr/project

[root@base /]# cd /usr/project

[root@base project]# git clone git@gitee.com:lht1999/dockercomposedemo.git

[root@base dockerfile]# cd dockercomposedemo/

[root@base dockerfile]# mvn clean package -Dmaven.test.skip=true

[root@base dockercomposedemo]# cp springcloud_user_6001/target/user.jar /usr/project/dockerfile/user.jar

[root@base dockercomposedemo]# cd /usr/project/dockerfile/

[root@base dockerfile]# ls
user.jar  

[root@base dockerfile]# vim Dockerfile 

[root@base dockerfile]# cat Dockerfile 
FROM openjdk:8-jre
ENV HOME /home
run mkdir HOME
COPY ./user.jar HOME/user_image.jar
WORKDIR HOME
ENTRYPOINT ["java", "-jar", "user_image.jar"]

[root@base dockerfile]# docker build -t image:1.0 .

[root@base dockerfile]# vim docker-compose.yaml

[root@base dockerfile]# cat docker-compose.yaml 
version: '3.1'
services:
  mysql_linux:           # 服务的名称 
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: mysql:5.7  # 指定镜像路径                      
    container_name: mysql_linux  # 指定容器名称
    ports:
      - 3308:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root  # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - ./data:/var/lib/mysql   # 映射数据卷
  springcloud_user:           # 服务的名称
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: image:1.0  # 指定镜像路径
    container_name: springcloud_user  # 指定容器名称
    ports:
      - 7001:6001   #  指定端口号的映射
    environment:
      profiles: prod                                                                                     
      TZ: Asia/Shanghai        # 指定时区
    volumes:
          - /logs:/logs # 创建容器数据卷

[root@base dockerfile]# docker-compose up -d

测试
在这里插入图片描述

[root@base dockerfile]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
0458ea31025a   mysql:5.7   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp   mysql_linux
84f2ff45b302   image:1.0   "java -jar user_imag…"   2 minutes ago   Up 2 minutes   0.0.0.0:7001->6001/tcp, :::7001->6001/tcp              springcloud_user

更改容器id后重新部署

在这里插入图片描述
部署注释ports

[root@base dockerfile]# cat docker-compose.yaml 
version: '3.1'
services:
  mysql_linux:           # 服务的名称 
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: mysql:5.7  # 指定镜像路径                      
    container_name: mysql_linux  # 指定容器名称
#  ports:
#     - 3308:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root  # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - ./data:/var/lib/mysql   # 映射数据卷
  springcloud_user:           # 服务的名称
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: image:1.0  # 指定镜像路径
    container_name: springcloud_user  # 指定容器名称
    ports:
      - 7001:6001   #  指定端口号的映射
    environment:
      profiles: prod                                                                                     
      TZ: Asia/Shanghai        # 指定时区
    volumes:
          - /logs:/logs # 创建容器数据卷

测试结果依旧正常(但是数据库确连不上了)

怎样让不在同一个 docker-compose.yaml 中编排的容器 处于同一网络

首先删除所有容器和镜像

docker-compose  down

重新编排多个容器都需要加上不同内容(举例如下)

# 创建网络名称
Creating network "mysql_default"

查看现在的网络

docker network list

为整个项目新建网络

docker network create my_network

让docker-compose.yaml 中的容器 处于同一网络

networks:
  default:
    external:
      name: my_network
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jsxllht

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

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

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

打赏作者

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

抵扣说明:

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

余额充值