开发工具与部署实战"/>
Docker(七) Docker开发工具与部署实战
一.Docker开发工具
1.IDEA连接远程SFTP
Docker开发中,在Linux上书写时是没有提示和高亮的,对于开发来说不太方便。于是我们希望通过IDEA远程连接服务器,使用IDEA来开发和操作相关文件。
(1)IDEA安装Docker插件
(2)远程连接SFTP
打开IDEA远程连接窗口
通过用户名和密码登录远程服务器
连接成功后,就可以在IDEA中编辑,上传或下载服务器文档了 ,注意编辑文件后,一定要使用upload上传更新!
2.使用Portainer可视化管理Docker
(1)拉取Portainer镜像
# docker pull portainer/portainer
(2) 运行Portainer监控Docker引擎
# docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
(3)登录并使用Portainer
用浏览器访问:
http://serverIp:9000 即可
二.Docker部署实战
目标:使用docke-compose部署一个简单的springboot项目+连接mysql数据库,其中springboot项目以jar的形式打包。
1.SpringBoot项目打包上传到Linux
(1)SpringBoot连接MySql数据库的配置中,url使用容器名称或者服务名称或者容器ip,不要使用localhost
(2)SpringBoot项目打包时,需添加skipTests跳过测试(否则数据库连接那里本地一直测试失败,导致打包不成功)
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--添加配置跳过测试--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><skipTests>true</skipTests></configuration></plugin><!--添加配置跳过测试--></plugins></build>
2.编写SpringBoot项目的Dockfile文件
FROM java:8WORKDIR /apps
EXPOSE 8989
COPY springboot-02-0.0.1-SNAPSHOT.jar /apps/alimama.jarENTRYPOINT ["java","-jar","alimama.jar"]
3.转储本地数据库的sql文件,保存为data.sql
4.编写docker-compose.yml编排文件
为了实现mysql镜像在启动时就自动创建好数据库并导好数据,我们需要在docker-compose.yml文件中,实现以下几步:
- MySql镜像的 MYSQL_DATABASE : 此变量是可选的,允许您指定要在映像启动时创建的数据库的名称。
- MySql镜像的 自动执行sql文件:当Mysql容器首次启动时,会在
/docker-entrypoint-initdb.d
目录下扫描.sh
,.sql
,.sql.gz
类型的文件。如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照字母的顺序执行。默认情况下它们会初始化在启动容器时声明的MYSQL_DATABASE
变量定义的数据库中。 因此我们可以使用 volume 将sql文件挂载到/docker-entrypoint-initdb.d
目录
version: "3.9"services:alimama:build:context: .dockerfile: Dockerfilecontainer_name: alimamaports:- "8081:8989"networks:- web_bridgedepends_on:- mysql_webmysql:image: mysql:5.7container_name: mysqlports:- "3307:3306"volumes:- mysqldata:/var/lib/mysql- mysqlconf:/etc/mysql#sql文件挂载,启动时自动执行- /root/alimama/data.sql:/docker-entrypoint-initdb.d/data.sqlenvironment:- MYSQL_ROOT_PASSWORD=my060321#启动时创建默认数据库vue- MYSQL_DATABASE=vuenetworks:- web_bridge#指定mysql服务容器异常停止后的启动策略:总是重启restart: alwaysnetworks:web_bridge:volumes:mysqldata:mysqlconf:
5.文件整合
将上述四个文件都放入同一个文档内,文档命名为项目名称,打包上传至Linux服务器中。
6.docker-compose运行项目服务
在当前项目文件夹下,运行 docker-compose up -d ,启动项目服务。注意:
- 容器之间的通信,不需要通过映射端口,同网桥中使用原端口号即可
- 镜像构建存在缓存,如果要重启服务或者有代码更新,需要使用docker-compose build --no-cache 或者 docker-compose up -d --build 重构服务,并建议删除原镜像重新拉取。
- docker-compose build:只构建Dockerfile镜像并覆盖,不启动容器(如果存在缓存则使用镜像缓存层)
- docker-compose build --no-cache:构建Dockerfile镜像并覆盖,不使用镜像缓存
- docker-compose up -d:自动构建Dockerfile镜像,并启动容器。(如果镜像已存在则直接使用,不存在则拉取或者构建(使用缓存层))
- docker-compose up -d --build:自动构建Dockerfile镜像,并启动容器。( 不论镜像是否存在都强制构建镜像,但使用缓存层)
因此,修改程序后,最好先通过docker-compose build --no-cache重构,再使用docker-compose up -d 启动运行服务
更多推荐
Docker(七) Docker开发工具与部署实战
发布评论