持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
上篇文章分享了docker的进阶使用(juejin.cn/post/710372…) 下面分享docker的实战使用
首先是dockerfile例子:
- #继承docker hub中的centos镜像文件
- FROM centos
- #作者
- MAINTAINER lijianb
- #环境变量
- ENV MYPATH /usr
- #进入容器默认访问目录
- WORKDIR $MYPATH
- #安装下载vim插件
- RUN yum -y install vim
- #暴露外部访问的端口号80
- EXPOSE 80
- #启动成功后自动进入容器中
- CMD /bin/bash
- docker build---将该Dockerfile实现打包成镜像文件
- 将该dockerfile文件上传到linux服务器中
- 使用docker build -f Dockerfile -t lijianb:1 .
- Dockerfile ------配置文件
- lijianb----打包镜像文件名称
- 1 tag 版本号码
springboot项目使用dockerfile文件打成镜像,容器运行步骤。
1、将springboot项目打包
mvn clean package
2、制作dockerfile文件
--基础镜像使用java
FROM java:8
--作者 lijianb
MAINTAINER lijianb
--VOLUME 指定了临时文件目录为/tmp。
--其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
--将jar包添加到容器中并更名为lijianb.jar
ADD lijianb-thymeleaf-1.0-SNAPSHOT.jar lijianb.jar
--运行jar包
RUN bash -c 'touch /lijianb.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/lijianb.jar"]
--暴露8080端口
EXPOSE 8080
3、打包成镜像文件
docker build -f Dockerfile -t lijianb-member:1 .
4、启动容器
docker run -p 8070:8080 lijianb-member:1
5、访问测试,访问8070端口可直接打开
- docker-compose(容器编排技术、容器按顺序启动)
- 一个springboot项目可能依赖几十个容器,mysql、reids、nginx、nacos、kafka等等。
- 容器内部局域网。 docker-compose分为三层
- 项目层,springboot项目依赖我们的mysql、redis、nginx等
- 容器层,一个项目是由多个容器组成的
- 服务层,运行一个镜像的实例
流程:
- 定义一个docker-compose.yml文件--工程
- 需要在docker-compose文件配置依赖服务
- docker-compose up 命令运行
version: "3.0"#定义compose版本
service: #服务,实际上是一个独立的容器运行
tomcat8080: #服务名称
container_name: servername ##指定容器名称,可以复用
image: tomcat: 8 #依赖镜像文件
ports:
- 8080:8080 #对外端口
volumes: ##数据卷
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
tomcat8081: #服务名称
image: tomcat: 8 #依赖镜像文件
ports:
- 8081:8080
容器之间相互访问,放在同一个局域网内
version: '3.0'
services:
tomcat80: ##服务名称
#container_name: tomcat8080 指定容器名称
image: tomcat:8 #镜像文件名称 run images
ports: ###端口号的映射 -p
- 8080:8080
volumes: ## 数据源 宿主机与容器数据共享 -v
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
networks: ###定义网络的桥
- lijianb
tomcat81: ##服务名称
#container_name: tomcat8080 指定容器名称
image: tomcat:8 #镜像文件名称
ports: ###端口号的映射
- 8081:8080
volumes: ## 数据源 宿主机与容器数据共享
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
networks:
- lijianb
networks: ## 定义服务的桥
lijianb:
\
定义Compose文件
version: "3.0"
services:
mysql: # mysql服务
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
ports:
- "3306:3306" #容器端口映射到宿主机的端口
environment:
MYSQL_ROOT_PASSWORD: 'root'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'lijianb'
MYSQL_USER: 'lijianb'
MYSQL_PASSWORD: 'lijianb'
networks:
- lijianb_web
lijianb-web: #自己单独的springboot项目
hostname: lijianb
build: ./ #需要构建的Dockerfile文件
ports:
- "38000:8080" #容器端口映射到宿主机的端口
depends_on: #web服务依赖mysql服务,要等mysql服务先启动
- mysql
networks:
- lijianb_web
networks: ## 定义服务的桥
lijianb_web:
\
springboot项目部署
spring:
profiles:
active: prd
datasource:
url: jdbc:mysql://mysql:3306/lijianb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
server:
###端口号
port: 8080
servlet:
##设置springboot项目访问路径
context-path: /lijianb
- docker-compose文件,配置排列启动的服务顺序,内会配置build属性,找Dockerfile文件
- Dockerfile文件,会找jar包
- jar包 然后docker-compose up启动执行