Docker与Docker Compose入门:释放你应用部署的威力( 二 )


一个简单的 Dockerfile 文件示例如下:
# 基于 JAVA 镜像构建FROM openjdk:8u212-jre# 配置参数ENV TZ=Asia/ShanghaiENV JAVA_OPTS="-Xms128m -Xmx256m -Dfile.encoding=UTF-8"# 设置时区RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 设置工作目录WORKDIR /app# 复制 jar 包到镜像里COPY target/my-app.jar /app/my-app.jar# 暴露端口EXPOSE 8080# 配置启动命令CMD  java $JAVA_OPTS -jar /app/my-app.jar  --server.port=8080简单介绍下上述 Dockerfile 示例的语法:

  • FROM : 指定基础镜像,这里是基于开源的 Java 8 JRE 镜像 。
  • ENV : 设置环境变量,这里配置了时区、JVM 参数等 。
  • RUN : 执行命令,这里用来设置时区 。
  • WORKDIR : 设置工作目录 , 相当于 cd 命令,之后的命令都在这个目录执行 。
  • COPY : 复制文件到镜像,这里复制了编译好的 Java jar 包 。
  • EXPOSE : 声明暴露的端口,这里是 8080 。
  • CMD : 启动命令,这里配置了启动 Java 程序的命令 。
我们要使用 Dockerfile 构建镜像的话,可以使用以下命令:
docker build -t my-app .其中 -t 参数指定了镜像的名称和标签(默认为 latest),. 表示当前目录寻找 Dockerfile 文件 。
要运行构建好的镜像 , 可以使用以下命令:
docker run -p 8080:8080 my-app其中 -p 参数指定了容器内外部的端口映射关系 , my-app是镜像的名称 。
这样我们的 Java 服务就可以在容器里运行,并能够通过宿主机的 8080 端口访问了 。
5. Docker Compose 一键安装这里给大家继续分享我的 Docker Compose 一键安装脚本,大家可以直接使用 。
sudo curl -L "https://Github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composedocker-compose --version //The following appears,your docker-compose is installation success.在国内网络中可能遇到 docker-compose 文件下载失败、超时 , 大家可直接上传本地已经下载好的 docker-compose 文件,也可以私聊我获取最新 docker-compose 文件 。
6. 使用 Docker Compose 简化应用部署除了 Docker 命令,我们还可以使用 Docker Compose 来简化多个容器的管理和部署 。
在实际开发中,一个应用程序通常不是单独运行的 , 而是需要与其他服务(例如数据库、缓存、消息队列等)进行交互 。这些服务也可以使用 Docker 来运行,但是如果每个服务都需要单独使用docker run命令来启动,那么就会非常繁琐和容易出错 。为了解决这个问题,可以使用 docker-compose 来定义和运行多个容器之间的依赖和协作关系 。
docker-compose 是一个工具,可以让开发者使用一个 YAML 文件(通常命名为docker-compose.yml)来描述多个容器之间的配置,包括镜像、端口、环境变量、挂载卷、网络等 。使用 docker-compose 可以让开发者一次性地启动或停止所有相关的容器 , 以及方便地管理容器之间的通信 。
一个简单的 docker-compose.yml 示例如下:
version: '3'services:  waynboot-mobile-api:    image: ibm-semeru-runtimes:open-17-jdk    container_name: mobile    volumes:      - /etc/localtime:/etc/localtime      - /home/logs:/home/logs      - /opt/waynboot-mall/upload:/opt/waynboot-mall/upload      - ./jars/waynboot-mobile-api.jar:/home/app/waynboot-mobile-api.jar    restart: always    command: java -Xms512m -Xmx512m -Duser.timezone=GMT+8 -Dfile.encoding=utf-8 -jar /home/app/waynboot-mobile-api.jar    ports:      - "82:82"    environment:      - TZ=Asia/Shanghai      - LOG_PATH_PREFIX=/home/logs      - UPLOAD_DIR=/opt/waynboot-mall/upload    .NETwork_mode: "host"    # 依赖于redis和MySQL,在启动本服务之前会先启动依赖的服务    depends_on:      - redis      - mysql      - rabbitmq      - elasticsearch


推荐阅读