Docker的实战使用分享

108 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

image.png

上篇文章分享了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分为三层
  1. 项目层,springboot项目依赖我们的mysql、redis、nginx等
  2. 容器层,一个项目是由多个容器组成的
  3. 服务层,运行一个镜像的实例

流程:

  1. 定义一个docker-compose.yml文件--工程
  2. 需要在docker-compose文件配置依赖服务
  3. 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
  1. docker-compose文件,配置排列启动的服务顺序,内会配置build属性,找Dockerfile文件
  2. Dockerfile文件,会找jar包
  3. jar包 然后docker-compose up启动执行