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

一.Docker开发工具

1.IDEA连接远程SFTP

        Docker开发中,在Linux上书写时是没有提示和高亮的,对于开发来说不太方便。于是我们希望通过IDEA远程连接服务器,使用IDEA来开发和操作相关文件。

(1)IDEA安装Docker插件

Docker(七) Docker开发工具与部署实战_第1张图片

 (2)远程连接SFTP

  打开IDEA远程连接窗口

Docker(七) Docker开发工具与部署实战_第2张图片

   通过用户名和密码登录远程服务器

Docker(七) Docker开发工具与部署实战_第3张图片

        连接成功后,就可以在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(七) Docker开发工具与部署实战_第4张图片

二.Docker部署实战

        目标:使用docke-compose部署一个简单的springboot项目+连接mysql数据库,其中springboot项目以jar的形式打包。

1.SpringBoot项目打包上传到Linux

(1)SpringBoot连接MySql数据库的配置中,url使用容器名称或者服务名称或者容器ip,不要使用localhost

Docker(七) Docker开发工具与部署实战_第5张图片

 (2)SpringBoot项目打包时,需添加skipTests跳过测试(否则数据库连接那里本地一直测试失败,导致打包不成功)


        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.22.1
                
                    true
                
            
            
        
    

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服务器中。

Docker(七) Docker开发工具与部署实战_第6张图片

 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)