实践出真知,构建一个springboot容器访问mysql容器实验,不动手的话是不知道要踩多少坑的。
springboot程序
自己写一个springboot程序,使用mybatis,其中application.properties配置如下:
management.endpoints.web.exposure.include=*
spring.output.ansi.enabled=ALWAYS
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql0:3306/test?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.hikari.maximumPoolSize=5
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.idleTimeout=600000
spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.maxLifetime=1800000
mapper使用
@Mapper
public interface MeMapper {
@Select("select * from test.me")
@Results(id = "allmes",
value = {
@Result(property = "moc", column = "moc", jdbcType = JdbcType.VARCHAR),
@Result(property = "state", column = "state", jdbcType = JdbcType.VARCHAR)
}
)
List<Me> getAllMe();
}
两个坑:
- 写完编译jar包,自己用java -jar xx.jar跑一下,看能否跑起来。
- 这里需要注意的是由于采用Dockerfile的时候使用镜像如果使用8,这里编译安装jdk的时候就需要安装jdk8
Dockerfile如下:
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER wugk <wugaoke2020@126.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD memanager-1.0-SNAPSHOT app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
容器操作
数据库容器
首先需要掌握一个基础知识,容器A如果要能直接访问容器B,在同一主机下,有--link方式,更通用的方式是创建网桥。
docker network create network-sql //创建docker网桥
docker pull mysql
docker run -d -p 1234:3306 -v /home/mysql01/conf:/etc/mysql/conf.d -v /home/mysql01/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 --netwrok network-sql mysql:latest
注意docker run命令,使用--network network-sql就指定使用自己创建的网桥network-sql,其它容器也同样的run的时候指定network为network-sql,就可以在容器中使用容器名来ping通mysql容器。
image.png
这里有个坑,需要将root用户设置一下可以在外部访问
https://blog.csdn.net/m0_37460012/article/details/90290148
进入到容器中操作,而且发现设置的密码无效,需要重新设置一下密码。
https://download.csdn.net/download/weixin_38732343/13684282?utm_source=iteye_new
springboot容器
docker build -t springbootmes . // 构造镜像
docker run -d --name springbootmes0 -p 8089:8080 --network network-sql springbootmes:latest
在mysql中创建好表,插入数据,然后操作一下访问8089端口:
image.png
小结
技术是实践型的,通过动手和分享是最好的两种学习方式。对于docker的学习,要明白底层原理实际上是namespace操作、网络上网桥、veth pair、vxlan知识等,只有通过动手才能理解的比较深入。
网友评论