Docker(七) Docker开发工具与部署实战

目录

一. Docker开发工具

1. IDEA连接远程SFTP

(1)IDEA安装Docker插件

 (2)远程连接SFTP

2. 使用Portainer可视化管理Docker

(1)拉取Portainer镜像

(2) 运行Portainer监控Docker引擎

(3)登录并使用Portainer

二. Docker部署实战

1. SpringBoot项目打包上传到Linux

2. 编写SpringBoot项目的Dockfile文件

3. 转储本地数据库的sql文件,保存为data.sql

4. 编写docker-compose.yml编排文件

5. 文件整合

6. docker-compose运行项目服务


一. 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:8

WORKDIR /apps
EXPOSE 8989
COPY springboot-02-0.0.1-SNAPSHOT.jar /apps/alimama.jar

ENTRYPOINT ["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: Dockerfile
    container_name: alimama
    ports:
      - "8081:8989"
    networks:
      - web_bridge
    depends_on:
      - mysql_web

  mysql:
    image: mysql:5.7
    container_name: mysql
    ports:
      - "3307:3306"
    volumes:
      - mysqldata:/var/lib/mysql
      - mysqlconf:/etc/mysql
        #sql文件挂载,启动时自动执行
      - /root/alimama/data.sql:/docker-entrypoint-initdb.d/data.sql
    environment:
      - MYSQL_ROOT_PASSWORD=my060321
        #启动时创建默认数据库vue
      - MYSQL_DATABASE=vue
    networks:
      - web_bridge
    #指定mysql服务容器异常停止后的启动策略:总是重启
    restart: always

networks:
  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 启动运行服务

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿阿阿安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值