Docker(2)

DockerFile(构建镜像)

DockerFile是什么?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

【把脚本命令写在这个文件里面】

DockerFile指令

# 指定基础镜像
FROM ubuntu:latest
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK	1. 进入java目录 2. 解压压缩包 3. 重命名
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
# 指定基础镜像
FROM java:8-alpine    #已经存在的基础镜像,快速搭建java8镜像【包含基础系统配置,以及jdk】


COPY ./docker-demo.jar /tmp/app.jar

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

FROM :指定基础镜像        示例:FROM centos:6

ENV:设置环境变量,可在后面指令使用        ENV key value

COPY:拷贝本地文件到镜像的指定目录        COPY ./mysql-5.7.rpm /tmp

RUN:执行linux的shell命令,一般是安装过程的命令        RUN yum install gcc

EXPOSE:指定容器运行时监听的端口        EXPOSE 8090

ENTRYPOINT:镜像中应用的启动命令,容器运行时调节        ENTRYPOINT java -jar xx.jar

DockerFile构建镜像指令

docker build -t javaweb:1.0 .

--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag

javaweb:1.0:镜像名:版本号

".":dockerfile所在的目录

DockerCompose

DockerCompose是什么?

帮助我们快速创建和部署容器。

与Docker Run命令对比

PS:容器之间可以通过容器名互相访问!!!容器之间可以通过容器名互相访问!!!容器之间可以通过容器名互相访问!!!实际上是compose会创建docker虚拟网络,支持服务通过名称定位IP

安装 Docker Compose

# 下载docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 查看docker-compose版本
docker-compose -v

使用Docker-Compose

docker-compose up        创建并使用容器

docker-compose stop     停止服务

docker-compose top       查看所有正在运行的服务

docker-compose rm        删除所有没有运行的服务

docker-compose restart [服务] 重启指定服务

1. 创建docker-compose.yml文件

# 指定docker-compose版本

version: "3.2"

# 服务(容器)列表

services:

  # 容器名:通过compose创建容器时的容器名
  nacos:

    # 创建容器依赖的镜像
    image: nacos/nacos-server

    # 容器启动时的环境配置
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service

    #

    depends_on:

        - nacos
  orderservice:
    build: ./order-service

    depends_on:

        - nacos

  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

    depends_on:

        - nacos

解释:

ports:端口映射:容器与真实机器的端口映射

volumes:数据卷挂载:创建容器时指定数据卷挂载

build:扫描目录,找到DockerFile文件,通过DockerFile创建镜像,并通过该镜像创建一个正在运行的容器

depends_on:用来表示一个容器A的创建依靠另一个容器B,所以会以先创建容器B,再创建容器A的顺序执行指令。

微服务无需对外提供端口,对外GateWay网关提供端口即可。

2. 编写第一步中需要用到的DockerFile文件

3. 修改微服务application.yml文件中的容器地址

(docker集群部署会通过服务名找到对应地址)

spring:
  datasource:
    #url: jdbc:mysql://localhost:3306/cloud-user?useSSL=false
    url: jdbc:mysql://mysql/cloud-user?useSSL=false # docker集群部署会通过服务名找到对应地址
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

4. 复制.jar文件到DockerFile文件中指定位置

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar   
ENTRYPOINT java -jar /tmp/app.jar

5. 执行docker-compose up -d命令

docker-compose up -d    
#在 docker-compose.yml 所在路径下执行该命令 Compose 就会自动构建镜像并使用镜像启动容器【创建并运行容器】

执行Docker-Compose存在的问题

执行服务的顺序问题,比如:当A、B服务依赖于C服务,当执行docker-compose.yml文件时,服务时同时启动的,C服务可能再A、B服务之后启动,那么这时候A、B服务就会出现问题。

解决:

depends_on:用来表示一个容器A的创建依靠另一个容器B,所以会以先创建容器B,再创建容器A的顺序执行指令。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值