手把手教你用 Docker 部署网站[Docker 系列-8](上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 在实际的开发环境或者生产环境,容器往往都不是独立运行的,经常需要多个容器一起运行,此时,如果继续使用 run 命令启动容器,就会非常不便,在这种情况下,docker-compose 是一个不错的选择,使用 docker-compose 可以实现简单的容器编排,本文就来看看 docker-compose 的使用。本文是 Docker 系列第八篇,阅读前面的文章,有助于更好的理解本文:
  1. Docker 入门及安装[Docker 系列-1]
  2. Docker 容器基本操作[Docker 系列-2]
  3. Docker 容器高级操作[Docker 系列-3]
  4. Docker 镜像基本操作[Docker 系列-4]
  5. DockerHub 与容器网络[Docker 系列-5]
  6. Docker 数据卷操作[Docker 系列-6]
  7. 容器连接[Docker 系列-7]

本文以 jpress 这样一个开源网站的部署为例,向读者介绍 docker-compose 的使用。jpress 是 Java 版的 wordPress ,不过我们不必关注 jpress 的实现,在这里我们只需要将之当作一个普通的应用即可,完成该项目的部署工作。

准备工作

这里我们一共需要两个容器:

  • Tomcat
  • MySQL

然后需要 jpress 的 war 包,war 包地址:jpress

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

编写 Dockerfile

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

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

解释:

  1. 容器基于 Tomcat 创建。
  2. 下载 jpress 项目的 war 包到 tomcat 的 webapps 目录下。
  3. 给 jpress 项目重命名。

编写 docker-compose.yml

在相同的目录下编写 docker-compose.yml ,内容如下(关于 yml 的基础知识,这里不做介绍,读者可以自行查找了解):

  1. "3.1"
  2. services:
  3.  web:
  4.    build: .
  5.    container_name: jpress
  6.    ports:
  7.      - "8080:8080"
  8.    volumes:
  9.      - /usr/local/tomcat/
  10.    depends_on:
  11.      - db
  12.  db:
  13.    image: mysql
  14.    container_name: mysql
  15.    command: --default-authentication-plugin=mysql_native_password
  16.    restart: always
  17.    ports:
  18.      - "3306:3306"
  19.    environment:
  20.      MYSQL_ROOT_PASSWORD: 123
  21.      MYSQL_DATABASE: jpress

解释:

  1. 首先声明了 web 容器,然后声明db容器。
  2. build. 表示 web 容器项目构建上下文为 . ,即,将在当前目录下查找 Dockerfile 构建 web 容器。
  3. container_name 表示容器的名字。
  4. ports 是指容器的端口映射。
  5. volumes 表示配置容器的数据卷。
  6. depends_on 表示该容器依赖于 db 容器,在启动时,db 容器将先启动,web 容器后启动,这只是启动时机的先后问题,并不是说 web 容器会等 db 容器完全启动了才会启动。
  7. 对于 db 容器,则使用 image 来构建,没有使用 Dockerfile 。
  8. restart 描述了容器的重启策略。
  9. environment 则是启动容器时的环境变量,这里配置了数据库 root 用户的密码以及在启动时创建一个名为 jpress 的库,environment 的配置可以使用字典和数组两种形式。

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

运行

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

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

  1. docker-compose up -d

执行结果如下:

38.jpg

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


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
2月前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
225 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
2月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
1177 12
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
1月前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
38 2
|
2月前
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
51 3
|
2月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
2月前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
2月前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
84 1
|
2月前
|
持续交付 开发者 Docker
掌握Docker容器化技术,加速软件开发与部署
掌握Docker容器化技术,加速软件开发与部署
58 0
|
2月前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
104 0

热门文章

最新文章