11、容器编排

在实际开发环境或者生产环境,容器往往都不是独立运行的,一般来说,如果用到容器的话,大部分情况下,可能都是像微服务这种环境,那如果是这样的环境的话,这个容器一般都是怎么运行呢?就是一个容器只做一件事情,比如这个容器只运行tomcat,那个容器只运行MySQL等等,它们各做各的事情,然后通过容器连接或者端口映射,来把容器暴露出来,进行访问。这样的话,要让多个容器一起运行,就涉及到容器编排的问题,这么多容器,你该如何去管理它,让它统一去运行。

这里我举一个简单例子jpress(GitHub上的开源项目)

准备工作
这里我们一共需要两个容器:

Tomcat
MySQL

然后需要 jpress 的 war 包,war 包地址:https://github.com/JpressProjects/jpress/raw/alpha/wars/jpress-web-newest.war

当然,这里的 jpress 并不是必须的,读者也可以结合自身情况,选择其他的 Java 项目或者自己写一个简单的 Java 项目部署都行。

编写 Dockerfile
Tomcat 容器中,要下载相关的 war 等,因此我这里编写一个 Dockerfile 来做这个事。在一个空的文件夹下创建 Dockerfile ,内容如下:

FROM tomcat
ADD https://github.com/JpressProjects/jpress/raw/alpha/wars/jpress-web-newest.war /usr/local/tomcat/webapps/
RUN cd /usr/local/tomcat/webapps/ \
    && mv jpress-web-newest.war jpress.war

解释:

1、FROM tomcat:容器基于 Tomcat 创建。
2、ADD https://github.com/JpressProjects/jpress/raw/alpha/wars/jpress-web-newest.war /usr/local/tomcat/webapps/:下载 jpress 项目的 war 包到 tomcat 的 webapps 目录下。
3、RUN cd /usr/local/tomcat/webapps/
&& mv jpress-web-newest.war jpress.war:进入保存文件的那个目录,并且给 jpress 项目重命名。

首先创建一个jpress文件夹,使用vi Dockerfile创建一个Dockerfile文件,内容如下(即上面那一段):
在这里插入图片描述编写 docker-compose.yml
在相同的目录下编写 docker-compose.yml ,内容如下:

version: "3.1"
services:
  web:
    build: .
    container_name: jpress
    ports:
      - "8080:8080"
    volumes:
      - /usr/local/tomcat/
    depends_on:
      - db
  db:
    image: mysql
    container_name: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 123
      MYSQL_DATABASE: jpress

在这里插入图片描述解释:
1、version: “3.1”:首先指定 docker-compose的版本
2、services:就是定义这里面一个一个的服务,这里面定义了两个服务,一个叫web,一个叫db(服务的名字可以随意取)。
3、services中首先声明了一个 web 容器:
build . 一会儿根据当前目录下的Dockerfile构建这个web容器。
container_name 表示给容器取名字。
ports 是指容器的端口映射。其中 - "8080:8080"中使用“-”,这是yaml文件中注入数组的使用的,说明配置这个端口可以暴露多个。
volumes 表示配置容器的数据卷(虚拟目录)。
depends_on 表示该容器依赖于 db 容器,在启动时,db 容器将先启动,web 容器后启动,这只是启动时机的先后问题,并不是说 web 容器会等 db 容器完全启动了才会启动。
4、然后声明db容器。
image :mysql表示根据MySQL镜像来构建db容器
command:command命令
restart 描述了容器的重启策略。这里是always,把db管理,下次只要dockers一启动,这个db也会自动启动。
environment 则是启动容器时的环境变量,这里配置了数据库 root 用户的密码以及在启动时创建一个名为 jpress 的库,environment 的配置可以使用字典和数组两种形式。

OK,经过如上步骤,docker-compose.yml 就算配置成功了

安装docker-compose:

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

运行
运行的方式有好几种,但是建议使用 up 这个终极命令,up 命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。对于大部分应用都可以直接通过该命令来启动。默认情况下, docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试,通过 Ctrl-C 停止命令时,所有容器将会停止,而如果使用 docker-compose up -d 命令,则将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。

因此,这里进入到 docker-compose.yml 所在目录下,执行如下命令:

docker-compose up -d

执行后,通过 docker-compose ps 命令可以看到容器已经启动了。

初始化配置
接下来,浏览器中输入 http://192.168.78.4:8080/jpress/install ,就可以看到 jpress 的配置页面,如下:
在这里插入图片描述
根据引导页面配置数据库的连接信息以及网站的基本信息
在这里插入图片描述在这里插入图片描述注意:由于 mysql 和 web 都运行在容器中,因此在配置数据库地址时,不能写回环地址,否则就去 web 所在的容器里找数据库了。

配置完成后,运行如下命令,重启 web 容器:

docker restart jpress

测试
浏览器中分别查看博客首页以及后台管理页,如下图:
在这里插入图片描述 其他
如果想要停止容器的运行,可以执行如下命令:

docker-compose down

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值