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: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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

阿阿阿安

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值