Docker-Compose安装Java Web实例

本文参考: docker学习笔记之五:进阶实战--mysql+tomcat Docker-Compose的介绍可参考:Docker学习——Docker 三剑客(七)

一、mysql - Docker Hub

参考资料:https://hub.docker.com/_/mysql/

参考资料:https://store.docker.com/images/mysql

1.下载mysql镜像

docker pull mysql:5.7

2.启动mysql容器

docker run -d -p 3306:3306 --name dbmysql -e MYSQL_ROOT_PASSWORD=password -v /mysql/datadir:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d  docker.io/mysql:5.7


#-e MYSQL_ROOT_PASSWORD=password :指定root密码  
#-v /mysql/datadir:/var/lib/mysql :指定数据库本地存储路径,如果系统没有关闭SELinux,会启动失败,原因是本地目录不允许挂载到容器,需要先执行chcon -Rt svirt_sandbox_file_t /mysql/datadir  
#-v /mysql/conf:/etc/mysql/conf.d :指定使用自定义的mysql配置文件启动数据库,比如在该路径下创建一个my-config.cnf  

#提示:killall -9 mysqld 立即杀死进程 (多执行几次)
  

#vi my-config.cnf  

#[mysqld]  
#port=3306  
#character-set-server=utf8  
#wait_timeout=288000  # 链接超时,默认为8小时,单位为秒
#lower_case_table_names=1 # 不去分大小写

3.Docker-Compose方式

dbmysql:  
  image: docker.io/mysql:5.7
  ports:  
    - 3306:3306  
  environment:  
    MYSQL_ROOT_PASSWORD: password  
  volumes:  
    - /mysql/datadir:/var/lib/mysql  
    - /mysql/conf:/etc/mysql/conf.d:ro
[root@centos-linux-agent mysql]# docker-compose up -d  
Creating mysql_dbmysql_1  
……
[root@centos-linux-agent mysql]# docker ps -a  
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                    NAMES  
087f4e32cd29        docker.io/mysql:latest   "docker-entrypoint.sh"   4 seconds ago       Up 3 seconds        0.0.0.0:3306->3306/tcp   mysql_dbmysql_1

二、tomcat - Docker Hub

参考资料:https://hub.docker.com/_/tomcat/

参考资料:https://store.docker.com/images/tomcat

1.下载tomact镜像

docker pull tomcat

2.启动tomact容器

docker run -d -p 8080:8080 -v /tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5.35-jre8

这样,只需要将war包拷贝到宿主机的/tomcat/webapps下即可

3.Docker-Compose方式

version: '2'  
services:  
   db:  
     image: docker.io/mysql:latest  
     volumes:  
       - /mysql/datadir_tomcat:/var/lib/mysql  
       - /mysql/conf:/etc/mysql/conf.d:ro  
     restart: always  
     environment:  
       MYSQL_ROOT_PASSWORD: password  

   tomcat01:  
     depends_on:  
       - db  
     image: docker.io/tomcat:latest  
     volumes:  
       - /tomcat01/webapps:/usr/local/tomcat/webapps  
     links:  
       - db:db  
     ports:  
       - "8081:8080"  
     restart: always  

   tomcat02:  
     depends_on:  
       - db  
     image: docker.io/tomcat:latest  
     volumes:  
       - /tomcat02/webapps:/usr/local/tomcat/webapps  
     links:  
       - db:db  
       - tomcat01:tomcat01  
     ports:  
       - "8082:8080"  
     restart: always

上面这种方式,随便进入任何一个容器,执行ping命令,都可以互相ping通

ping tomcat01

ping db

但是查看各自的/etc/hosts,却看不到相应的配置,就是这么神奇。

所以war里使用上面的链接别名配置好互相要访问的地址,然后拷贝到对应的部署路径下,并重启。

[root@izwz9eftauv7x69f5jvi96z tomcat]# docker-compose restart
Restarting tomcat_tomcat02_1 ... done
Restarting tomcat_tomcat01_1 ... done
Restarting tomcat_db_1       ... done

三、实战中

也可以使用Dockerfile,将war包等直接封装为一个新的镜像。

sudo mkdir /dockerfile

sudo vi Dockerfile

FROM tomcat:8.5.35-jre8
MAINTAINER "wwx <wuweixiang.alex@gmail.com>"  
ADD web.war /usr/local/tomcat/webapps/

将web.war拷贝到当前路径下

# 生成镜像
docker build -t wuweixiang/tomcat8.5.35-jre8 .     # 注意最后面那个点,代表当前路径

# 启动
docker run -p 8080:8080 -d wuweixiang/tomcat8.5.35-jre8

docker-compose

tomcat01:  
     depends_on:  
       - db  
     build: /dockerfile  
     links:  
       - db:db  
     ports:  
       - "8081:8080"  
     restart: always

docker-compose up -d :第一次执行会自动创建一个镜像,并启动容器

如果该镜像已经被创建了,再次执行时要加上--build:docker-compose up --build -d,此时会重新创建该镜像。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏搜云库

Docker Hub 仓库使用,及搭建 Docker Registry

目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 15,000 的镜像。大部分需求都可以通过在 Docker Hub 中...

57150
来自专栏搜云库

Docker Compose 1.18.0 之服务编排详解

一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过serv...

492100
来自专栏运维前线

使用容器部署静态(HTML)网站

使用容器部署静态(HTML)网站 学习如何使用Nginx来创建一个用于运行静态HTML网站的Docker镜像,会解释如何构建一个运行Nginx与HTML网站的...

25880
来自专栏Java架构师进阶

Spring Boot 集成Mybatis实现主从(多数据源)分离方案

参考资料:https://store.docker.com/images/mysql

16850
来自专栏算法修养

Docker 学习应用篇之二: Docker的介绍和安装

   之前说过Docker的好处,Docker可以集装箱化的部署应用程序。那么Docker是通过什么实现的呢。要理解Docker内部构建,需要先理解Docker...

443100
来自专栏友弟技术工作室

Docker镜像的基本操作

17950
来自专栏喵了个咪的博客空间

Dockerfile构建镜像

21040

将Java EE应用程序部署到Docker Swarm集群

Docker Swarm为Docker提供本地集群。 使用Docker Swarm 0.2.0的集群一文提供了对Docker Swarm的基本介绍,以及如何创建...

34890
来自专栏猿说1024

Docker 常用命令

24030
来自专栏大闲人柴毛毛

Docker入门实战(三)——用Dockerfile构建镜像

在Docker中,构建一个自定义镜像共有两种方法,一是通过commit指令构建,二是通过Dockerfile文件构建。第一种方式在上篇博客中已经详细介绍(Doc...

34950

扫码关注云+社区

领取腾讯云代金券