前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker从入门到精通(八)——Docker Compose

Docker从入门到精通(八)——Docker Compose

作者头像
IT可乐
发布2021-12-27 09:39:38
6880
发布2021-12-27 09:39:38
举报
文章被收录于专栏:IT可乐

恭喜大家,学到这里,对于 docker 的基础玩法大家应该都会了,下面会介绍 docker的一些编排工具。

1、为什么需要 Docker Compose?

官网镇楼:https://www.runoob.com/docker/docker-compose.html

一句话概括:

帮助我们批量有规则的管理容器。

前面基础教程,我们介绍了 Dockerfile ,启动服务都是通过 Dockerfile 构建镜像,启动容器,对于几个服务,我们一个一个的build,run 还能接收,但是实际生产环境是有几百上千个的,这个时候难道我们还有手动一个一个启动吗?

另外,服务与服务之间是有依赖关系的,比如一个 Tomcat 部署的服务依赖MySQL,依赖Redis,我们启动 Tomcat 服务时,需要先启动MySQL和Redis,这个顺序也是很重要的。

有了 Docker Compose ,那我们就可以告别手动繁琐的步骤,提前定义好规则,统一管理即可。

2、Docker Compose 局限性

首先说明,Docker Compose 虽然是官方提供的容器编排工具,但是实际生产环境是不用的(用什么?比如Swarm、K8S,后面会介绍),因为其局限性很大,这里介绍大家了解即可。

只支持单机多容器,不支持集群环境管理。

3、安装

参考官方文档即可:https://docs.docker.com/compose/install/

Mac/Windows 安装docker默认提供了 Docker Compose,所以不需要我们安装,但是Linux环境需要手动安装。

3.1 下载
代码语言:javascript
复制
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

上面是官方提供的,但是下载会比较慢,可以使用国内的下载地址:

代码语言:javascript
复制
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
3.2 授权
代码语言:javascript
复制
sudo chmod +x /usr/local/bin/docker-compose
3.3 验证安装
代码语言:javascript
复制
docker-compose version
3.4 卸载
代码语言:javascript
复制
sudo rm /usr/local/bin/docker-compose

4、用法

根据官方提示,使用 Docker Compose 分为三个步骤:

  • 第一步:使用 Dockerfile 定义应用程序的环境。
  • 第二步:使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 第三步:执行 docker-compose up 命令来启动并运行整个应用程序。

具体如何用,下面我通过两个小例子来演示说明。

5、部署WP博客

这也是官方提供的实例:https://docs.docker.com/samples/wordpress/

WordPress是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP语言和MySQL数据库开发的,用户可以在支持 PHP 和 MySQL数据库的服务器上使用自己的博客。

5.1 创建项目目录

名称任意,用来存放 docker-compose.yml 文件

代码语言:javascript
复制
mkdir my_wordpress

我们按照官方创建一个名为 my_wordpress 目录。

5.2 创建 docker-compose.yml

新建一个 docker-compose.yml 文件,内容如下:

代码语言:javascript
复制
version: "3.9"
    
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}
5.3 构建项目
代码语言:javascript
复制
docker-compose up -d

注意要切换到my_wordpress 目录,否则要增加 -f 参数指定 docker-compose.yml 文件。

看到上面截图即表示启动成功。

5.4 访问页面

http://宿主机IP:8000

另外,我们通过 docker ps 命令,也能看到启动了两个容器。

6、docker-compose.yml 规则

上面的例子很简单,但是里面有一个核心就是 docker-compsoe.yml 文件的编写,下面我们就来详细介绍这个文件的编写规则。

官方规则介绍:

https://docs.docker.com/compose/compose-file/

代码语言:javascript
复制
# 第一层:版本
version: "3.9" 
# 第二层:服务    
services:
	# 服务名称
  db:
  	# 镜像名称
    image: mysql:5.7
    # 挂载的容器卷
    volumes:
      - db_data:/var/lib/mysql
    # 服务挂掉是否自动重启
    restart: always
    # 环境变量设置
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  # 服务名称  
  wordpress:
  	# 依赖的服务
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
# 第三层:其他配置,包括网络,容器卷等等
volumes:
  db_data: {}
  wordpress_data: {}

其实主要就是三层配置,具体的每个配置项,大家可以看名知意,然后不懂的官网其实也有很详细的说明。

7、Docker Comopose 部署自定义服务

下面我们自己写一个服务,不用官方服务,带着大家手动玩一遍。

每次访问 Tomcat的服务,Redis计数器加1

7.1 编写 Tomcat服务

新建一个springboot项目,然后新建一个controller类:

代码语言:javascript
复制
package com.itcoke.counter.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;

@RestController
public class CounterController {

    @Autowired
    StringRedisTemplate redisTemplate;

    @GetMapping("/visit")
    public String count(HttpServletRequest request){
        String remoteHost = request.getRemoteHost();
        Long increment = redisTemplate.opsForValue().increment(remoteHost);
        return remoteHost +"访问次数"+increment.toString();
    }
}

Springboot 服务的配置文件 application.yml:

代码语言:javascript
复制
server:
  port: 8080
  servlet:
    context-path: /counter
spring:
  redis:
    host: counterRedis
7.2 Dockerfile
代码语言:javascript
复制
FROM openjdk:8-jdk

COPY *.jar /counter.jar

CMD ["--server.port=8080"]

EXPOSE 8080

ENTRYPOINT ["java","-jar","/counter.jar"]
7.3 docker-compose.yml
代码语言:javascript
复制
version: "3.8"
services:
  itcokecounter:
    build: .
    image: itcokecounter
    depends_on:
      - counterRedis
    ports:
      - "8080:8080"
  counterRedis:
    image: "redis:6.0-alpine"
7.4 测试

在Linux服务器新建 counter 文件夹,把下面三个文件拷贝到其中。

然后执行如下命令构建:

docker-compose up

执行完成便会出现如下启动成功界面:

然后,我们在浏览器输入网址:

http://{ip}:8080/counter/visit

每刷新一次,还会增加一次。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、为什么需要 Docker Compose?
  • 2、Docker Compose 局限性
  • 3、安装
    • 3.1 下载
      • 3.2 授权
        • 3.3 验证安装
          • 3.4 卸载
          • 4、用法
          • 5、部署WP博客
            • 5.1 创建项目目录
              • 5.2 创建 docker-compose.yml
                • 5.3 构建项目
                  • 5.4 访问页面
                  • 6、docker-compose.yml 规则
                  • 7、Docker Comopose 部署自定义服务
                    • 7.1 编写 Tomcat服务
                      • 7.2 Dockerfile
                        • 7.3 docker-compose.yml
                          • 7.4 测试
                          相关产品与服务
                          容器镜像服务
                          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档