[docker-compose部署服务]
如果不使用docker-compose
需要先启动mysql和redis容器,
然后打包jar应用为镜像,启动应用镜像为容器应用为镜像,启动应用镜像为容器
容器间的启停或宕机,有可能导致IP地址对应的容器实例变化,映射出错
如果使用docker-compose
1. 首先将代码中的配置文件的ip改为docker-compose.yaml中定义的服务名或容器名,即mysql和redis或redis01,因为服务名作为主机来访问
2. 构建jar应用镜像 docker build -t docker-compose-test:1.0 .
基础镜像使用java
FROM centos7-java8:1.0
作者
MAINTAINER zzhua
volume 指定临时文件为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
将jar包添加到容器中并更名为 docker-compose-test.jar
ADD spring-boot-docker-demo.jar docker-compose-test.jar
运行jar包
RUN bash -c 'touch /docker-compose-test.jar'
ENTRYPOINT ["java","-jar","/docker-compose-test.jar"]
暴露6001端口作为微服务
EXPOSE 6001
3. 编写docker-compose.yml,
注意:如果下面的内容直接复制到服务器上使用可能会报错
ERROR: .UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 27: invalid start byte,
删除中文注释即可
版本号
version: "3"
services:
定义服务名称
microService:
image: docker-compose-test:1.0
container_name: ms01
ports:
- "6001:6001"
volumes:
- /app/microService:/data
networks:
- p_net
depends_on:
- redis
- mysql
redis:
image: redis:6.0.8
container_name: redis01
ports:
- "6379:6379"
volumes:
- /app/redis/conf/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- p_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db2024'
MYSQL_USER: 'zzhua'
MYSQL_PASSWORD: '123456'
ports:
- "3306:3306"
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- p_net
networks:
p_net:
4. 准备/app/redis/conf/redis.conf配置文件,而mysql也需要提前准备/app/mysql/conf/my.cnf配置文件
5. 镜像都准备好了,配置文件也准备好了,docker-compose.yml文件也准备好了
现在执行 docker-compose config -q 检查配置,有问题才输出
现在执行 docker-compose up -d 其中没有加container_name的会以当前文件夹名+镜像名+序号组成容器名称,
加了container_name的使用container_name作为容器名称
现在执行 docker-compose ps 查看由当前文件夹中的docker-compose.yml文件所构建的所有运行中的容器,包括启动失败退出的
可以执行 docker-compose logs 可以查看所有服务的启动日志
可以执行 docker-compose logs <服务名称> 可以查看指定服务的启动日志
可以执行 docker-compose logs -f <服务名称> 可以实时查看指定服务的启动日志
可以执行 docker-compose <服务名称> 可以查看指定服务的启动日志或启动错误日志
按照上面配置好并启动后,此时可以连接到mysql: 192.168.134.3 3306 root密码是123456,
连接成功发现db2024这个数据库已经创建好了,创建t_user表,并手动插入1条用户数据;
连接到redis:192.168.134.3 6379 连接成功;
可以执行 docker network ls 可以看到创建了1个新的网络 p_net
在宿主机执行 docker network inspect p_net 查看"Containers"节点,发现正好有这3个容器
可以执行 docker-compose exec microService bash 进入ms01容器内部,
但是不能使用 docker-compose exec ms01 bash进入到容器内部,
可以使用docker exec -it ms01 bash 进入ms01容器内部
进入ms01容器的内部,执行ping redis01,ping mysql 发现都是能正常ping通的,这说明这3个容器在同一个网络中
可以执行 docker-compose pause <服务名称> 可以暂停指定的服务
可以执行 docker-compose down 关闭当前docker-compose.yml中定义的所有容器服务,此时docker ps -a 将查看不到任何容器,但是挂载的数据不会删除