本章是基于Centos7系统教程
前提准备
安装docker
执行下面命令
$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ yum -y install docker-ce docker-ce-cli containerd.io
$ yum list docker-ce --showduplicates | sort -r
$ yum -y install docker-ce-19.03.4 docker-ce-cli-19.03.4 containerd.io
$ systemctl start docker
##启动docker后,执行下面脚本看是否正常启动
$ docker ps
安装成功后,建议配置aliyun镜像,网上很多教程。这样下载镜像就很快了。
安装docker-compose
## 确保已安装curl命令
$ curl --version
##如果没有则先安装
$ yum -y install curl
##安装docker-compose
$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
##检查是否安装成功
$ docker-compose version
部署
文件准备
1、 在home目录下(~/)新建docker目录,进入docker目录,再分别创建mysql目录和java目录。mysql目录是用来放初始化的脚本文件,我们可以把需要初始化的sql写好,命名为init.sql放在此目录下。java目录用来放我们要启动的java项目的jar包。
2、 最后的目录树为
|-- ~/
|-- docker/
|-- docker-compose.yml
|-- mysql/
|-- init.sql
|-- java/
|-- test-docker.jar
编写docker-compse.yml文件
version: '3'
services:
##mysql配置
mysql:
environment:
##root账号的密码
MYSQL_ROOT_PASSWORD: "123456"
image: "docker.io/mysql:latest"
container_name: mysql
restart: always
##映射挂载
volumes:
##数据目录,要确保先创建好
- "/data/mysql:/var/lib/mysql"
##初始化的脚本,初始化我们存放的init.sql文件
- "./mysql:/docker-entrypoint-initdb.d/"
ports:
- "3306:3306"
##redis配置
redis:
image: redis:latest
container_name: redis
command: redis-server --appendonly yes --requirepass "123456"
ports:
- "6379:6379"
volumes:
##数据目录,要确保先创建好
- /data/redis:/data
java:
image: ascdc/jdk8
container_name: test-docker
ports:
- "8080:8080"
volumes:
- ~/docker/java/test-docker.jar:/data/test-docker.jar
##这是java项目的环境变量,yml文件配置
environment:
- SPRING_REDIS_HOST=127.0.0.1
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_PASSWORD=123456
- SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1:3306/test-docker?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=123456
entrypoint: java -jar /data/test-docker.jar
depends_on:
- redis
- mysql
启动
在~/docker目录下,执行 docker-compose up -d 即可。
存在问题
redis与mysql在未完全初始完成,java项目先跑起来就会报连不上mysql/redis的错误。虽然docker-compese.yml文件中有配置depends_on。但其只是确保容器启动成功,并不保证初始化成功。