Docker容器编排实现过程解析

在实际的开发环境或者生产环境,容器往往都不是独立运行的,经常需要多个容器一起运行,此时,如果继续使用run命令启动容器,就会非常不便,在这种情况下,docker-compose是一个不错的选择,使用dockercompose可以实现容器编排,本文就来看看docker-compose的使用。本文以jpress这样一个开源网站的部署为例,向读者介绍docker-compose的使用。jpress是Java版的wordPress,不过我们不必关注jpress的实现,在这里我们只需要将之当作一个普通的应用即可,完成该项目的部署工作。

准备工作

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

  • Tomcat
  • MySQL

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

当然,这里的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

解释:

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

编写docker-compose.yml

在相同的目录下编写docker-compose.yml,内容如下(关于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:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123
MYSQL_DATABASE: jpress

解释:

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

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

运行

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

docker-compose up -d

执行结果如下:

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

初始化配置

接下来,浏览器中输入http://localhost:8080/jpress,就可以看到jpress的配置页面,如下:

根据引导页面配置数据库的连接信息以及网站的基本信息:


注意:由于mysql和web都运行在容器中,因此在配置数据库地址时,不能写回环地址,否则就去web所在的容器里找数据库了。

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

docker restart jpress

测试

浏览器中分别查看博客首页以及后台管理页,如下图:


其他

如果想要停止容器的运行,可以执行如下命令:

docker-compose down

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker 最常用的镜像命令和容器命令详解

    本文列出了 Docker 使用过程中最常用的镜像命令和容器命令,以及教大家如何操作容器数据卷,实现容器数据的备份.熟练练习这些命令以后,再来一些简单的应用部署练习,大家就可以学习 Docker 的镜像构建.备份恢复迁移.镜像仓库.网络.集群等等更多的内容. 镜像相关命令 官方文档:https://docs.docker.com/reference/ 查看镜像 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZ

  • spring boot项目生成docker镜像并完成容器部署的方法步骤

    一.问题产生    把spring boot项目生成的jar打成docker镜像并生成docker容器完成部署是比较简单方便的部署方式,而且部署过程很少会出错. 二.部署步骤 1.利用maven或者gradle完成打包工作,打成jar包的形式. 2.在项目中的任意位置创建Dockerfile文件,本人的文件如下: FROM java:8 VOLUME /tmp ADD front-1.0-SNAPSHOT.jar front.jar RUN bash -c 'touch /front.jar'

  • Docker数据卷容器创建及使用方法解析

    数据卷容器是一个专门用来挂载数据卷的容器,该容器主要是供其他容器引用和使用.所谓的数据卷容器,实际上就是一个普通的容器,举例如下: 创建数据卷容器 使用如下方式创建数据卷容器: docker run -itd -v /usr/share/nginx/html/ --name mydata ubuntu 命令执行效果如下图: 引用容器 使用如下命令引用数据卷容器: docker run -itd --volumes-from mydata -p 80:80 --name nginx1 nginx

  • Docker容器搭建并运行实现过程详解

    直接拉取镜像,创建容器并运行容器一把梭哈: docker run -d --restart=always \ --privileged=true \ --net=host \ --name=fastdfs \ -e IP=192.168.149.128 \ -e WEB_PORT=80 \ -v ${HOME}/fastdfs:/var/local/fdfs registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs 其中-v ${HOME}/fastdfs

  • Docker容器的应用中,10个要不得的坏习惯

    毋庸置疑,容器已经成为企业IT基础设施中必不可少的部分,它具有许多的优点,比如: 第一:容器是不可变的--操作系统,库版本,配置,文件夹和应用程序都包装在容器内.你保证在质量检查中测试过的同一镜像将以相同的行为到达生产环境. 第二:容器很轻--容器的内存占用量很小.容器将只为主要进程分配内存,而不是数百或数千MB. 第三:容器非常快--可以像启动典型Linux进程一样快地启动容器.你可以在几秒钟内启动一个新容器,而不是几分钟. 但是,许多用户仍然像对待典型虚拟机一样对待容器,而忘记了容器具有重要

  • Docker容器网络端口配置过程详解

    暴露网络端口 实际上,Docker中涉及暴露网络端口的参数有两个,分别是-p和-P.下面分别来介绍. -P 使用-P,Docker会在宿主机上随机为应用分配一个未被使用的端口,并将其映射到容器开放的端口,以Nginx 为例,如下: 可以看到,Docker为应用分配了一个随机端口32768,使用该端口即可访问容器中的 nginx(http://lcalhost:32768). -p -p参数则有几种不同的用法: hostPort:containerPort 这种用法是将宿主机端口和容器端口绑定起来

  • 如何在docker容器内部安装kibana分词器

    步骤: 1.在虚拟机目录下新建docker-compose.yml文件,然后进入yml文件编辑 vi docker-compose.yml 2.在yml文件中添加如下代码: version: "3.1" services: elasticsearch: image: daocloud.io/library/elasticsearch:6.5.4 restart: always container_name: elasticsearch ports: - 9200:9200 #将分词器映

  • 详解Docker容器数据卷

    是什么 先来看看Docker的理念: 将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了. 为了能保存数据在docker中我们使用卷. 一句话:有点类似我们Redis里面的RDB和AOF 能干嘛 卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系

  • Docker容器编排实现过程解析

    在实际的开发环境或者生产环境,容器往往都不是独立运行的,经常需要多个容器一起运行,此时,如果继续使用run命令启动容器,就会非常不便,在这种情况下,docker-compose是一个不错的选择,使用dockercompose可以实现容器编排,本文就来看看docker-compose的使用.本文以jpress这样一个开源网站的部署为例,向读者介绍docker-compose的使用.jpress是Java版的wordPress,不过我们不必关注jpress的实现,在这里我们只需要将之当作一个普通的应

  • Docker 容器编排利器Compose(起步篇)

    一个大型的Docker组成的微服务应用中,容器的数量是非常庞大的,如果依赖传统的人工配置方式进行维护,对于开发和运维来说简直就是噩梦.Compose的出现正是为了解决这个问题. Compose简介 Compose的前身是Fig,Fig被Docker收购之后正式更名为Compose,Compose向下兼容Fig.Compose是一个用于定义和运行多容器Docker应用的工具,只需要一个Compose的配置文件和一个简单的命令就可以创建并运行应用所需的所有容器.在配置文件中,所有容器通过servic

  • Docker容器连接实现步骤解析

    一般来说,容器启动后,我们都是通过端口映射来使用容器提供的服务,实际上,端口映射只是使用容器服务的一种方式,除了这种方式外,还可以使用容器连接的方式来使用容器服务. 例如,有两个容器,一个容器运行一个SpringBoot项目,另一个容器运行着mysql数据库,可以通过容器连接使SpringBoot直接访问到Mysql数据库,而不必通过端口映射来访问mysql服务. 为了案例简单,我这里举另外一个例子: 有两个容器,一个nginx容器,另一个ubuntu,我启动nginx容器,但是并不分配端口映射

  • 基于docker安装mariadb配置过程解析

    一.安装通过dockerhub搜索要安装的mariadb版本.执行docker pull将镜像拉取到本地. 启动mariadb docker run --name mariadb-prod -p 3306:3306 -e MYSQL_ROOT_PASSWORD=QBdata@1017 -v /data/software_docker/mariadb_test/data:/var/lib/mysql -d mariadb:10.5.6 --name启动容器设置容器名称为mariadb-prod -

  • Docker部署Consul配置过程解析

    执行命令 docker run -d --name consul -p 8500:8500 consul 端口说明 https://www.consul.io/docs/install/ports.html 挂载说明 /consul/data:持久化数据存储 /consul/config:配置文件 Consul 配置 https://www.consul.io/docs/agent/options.html 注意:浏览器打开 http://公网ip:8500 集群部署 启动4个Consul Ag

  • Docker容器服务编排利器详解

    目录 一.使用Docker Compose必要性及定义 二.Docker Compose应用参考资料 三.Docker Compose应用最佳实践步骤 3.1 概念 3.2 步骤 四.Docker Compose安装 五.Docker Compose应用案例 5.1 网站文件准备 5.2 Dockerfile文件准备 5.3 Compose文件准备 5.4 使用docker-compose up启动容器 5.5 访问 一.使用Docker Compose必要性及定义 用容器运行一个服务,需要使用

  • Docker数据卷和容器编排的使用

    前言 Docker 数据卷和容器编排,记录下来! 数据卷 数据卷可以绕过拷贝系统,在多个容器之间.容器和宿主机之间共享目录或文件,数据卷绕过了拷贝系统,可以达到本地磁盘I/O性能. 运行容器时,指定一个数据卷 $ docker run -itd --name nginx -v /usr/share/nginx/html/ -p 80:80 e445ab08b2be 此时,我们创建了一个数据卷并且挂载到容器的/usr/share/nginx/html/目录下. 使用 docker inspect

  • Docker执行DockerFile构建过程指令解析

    目录 DockerFile 简介 DockerFile 构建过程 DockerFile 指令解析 DockerFile 案例演示 构建一个 mycentos 镜像 DockerFile 简介 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么那些无法重复的问题.镜像构建透明性的问题.体积的问题就都会解决.这个脚本就是 Dockerfile. DockerFile 是用来构建 Docker 镜像的构建文

  • Docker容器镜像加载及底层基本原理深入解析

    目录 前言 一.Docker run 二.Docker底层原理 1.Docker是怎么工作的 2.为什么Docker比虚拟机快 三.Docker镜像 1.镜像 2.联合文件系统UnionFS 3.Docker镜像的加载原理 4.Docker镜像分层理解 四.Docker容器 五.Docker镜像与容器的形象比喻 前言 回想上学的时候,某老师神采奕奕的讲解着操作系统某个知识点原理,可谓是激情澎湃,我环顾周围基友们,脸上懵逼两字清晰可见,毫不含糊,恍然大悟原来是在讲天书.为了不让大家脸上呈现懵逼二字

  • Docker系列之使用Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: 1.Dockerfile 定义应用的运行环境 2.docker-compose.yml 定义组成应用的各服务 3.docker-compose up 启动整个应用 2. 安装Compose 直接从github下载即可,前提要先安装Docker,版本要1.9.1以上 Note that Compose 1.8.0 requires

随机推荐