热爱技术,追求卓越
不断求索,精益求精

【运维】java程序在ubuntu系统Docker容器化部署及docker-compose常用命令

以nacos为例,程序在宿主机中的部署路径为:

/var/www/data/work/cloud/nacos

在该目录下编写容器中java程序的启动脚本start.sh:

#!/bin/bash
cmd=$1
env=prod
project_dir=/var/www/data/work/cloud/nacos
jar_name=nacos.jar
java_home=/var/www/data/JDK/JDK17.0.2
java_path=$java_home/bin/java
java_opts="-Xms128m -Xmx512m -XX:MaxHeapFreeRatio=70 -XX:ErrorFile=./logs/jvm_error.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/heapdump.hprof"

#set spring config file
profile=prod
spring_profiles=--spring.profiles.active=$profile

start_cmd="${java_path} -Djava.security.egd=file:/dev/./urandom $java_opts -jar ${jar_name} ${spring_profiles}"
/usr/bin/nohup $start_cmd > ${project_dir}/logs/console.log 2>&1 &

echo "Java应用已经启动"

#防止容器退出
tail -f /dev/null

在同目录编写Dockerfile

#依赖的父镜像,此处依赖操作系统base
FROM ubuntu:22.04

#执行这个的目的是nacos做健康检查时会用到,若不做健康检查可忽略
RUN apt-get update && apt-get install -y curl telnet net-tools vim inetutils-ping

WORKDIR /var/www/data/work/cloud/nacos

#容器暴露端口
EXPOSE 8848
EXPOSE 9848

#设置时区编码
ENV TZ=Asia/Shanghai LANG=C.UTF-8 LC_ALL=C.UTF-8
#设置JAVA_HOME环境变量
ENV JAVA_HOME="/var/www/data/JDK/JDK17.0.2"
#设置PATH环境变量
ENV PATH="${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/sbin"
#执行命令
ENTRYPOINT ["/var/www/data/work/cloud/nacos/start.sh"]

在Dockerfile所在目录构建docker镜像

docker build -t nacos .

docker启动java程序

docker run -d -p 8848:8848 -p 9848:9848 -v /var/www/data:/var/www/data --name nacos nacos

容器和宿主机共享/var/www/data目录,达到共享jdk目的,容器中的日志会输出到宿主机对应目录,jar包也是依赖宿主机的jar包,后续随意升级jar包,容器随意删除,不会影响。

docker-compose启动多服务,编写docker-compose.yml

#version: '3'

services: 

  nacos: 
    image: nacos
    container_name: nacos
    ports: 
      - "8848:8848"
      - "9848:9848"
    environment: 
      TZ: Asia/Shanghai
    volumes: 
      - /var/www/data:/var/www/data
    network_mode: "bridge"
    healthcheck: 
      test: [ "CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness" ]
      #这个时间设置短了可能导致后续的程序启动失败,之前设置10秒,导致system启动后连nacos报403错误
      interval: 30s
      timeout: 10s
      retries: 10


  system: 
    image: system
    container_name: system
    ports: 
      - "9201:9201"
    environment: 
      TZ: Asia/Shanghai
    volumes:
      - /var/www/data:/var/www/data
    network_mode: "bridge"
    depends_on:  
      nacos:  
        condition: service_healthy


  elasticsearch:
    image: elasticsearch:7.14.0
    container_name: elasticsearch
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      # 设置集群名称
      cluster.name: elasticsearch
      # 以单一节点模式启动
      discovery.type: single-node
      ES_JAVA_OPTS: "-Xms512m -Xmx512m"
    volumes:
      - /var/www/data/work/cloud/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - /var/www/data/work/cloud/elk/elasticsearch/data:/usr/share/elasticsearch/data
      - /var/www/data/work/cloud/elk/elasticsearch/logs:/usr/share/elasticsearch/logs
    network_mode: "bridge"

  kibana:
    image: kibana:7.14.0
    container_name: kibana
    ports:
      - "5601:5601"
    depends_on:
      # kibana在elasticsearch启动之后再启动
      - elasticsearch
    environment:
      #设置系统语言文中文
      I18N_LOCALE: zh-CN
      # 访问域名
      # SERVER_PUBLICBASEURL: https://kibana.cloud.com
    volumes:
      - /var/www/data/work/cloud/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
    network_mode: "bridge"

  logstash:
    image: logstash:7.14.0
    container_name: logstash
    ports:
      - "4560:4560"
    volumes:
      - /var/www/data/work/cloud/elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
      - /var/www/data/work/cloud/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
    depends_on:
      - elasticsearch
    network_mode: "bridge"

docker-compose常用命令(命令必须在 docker-compose.yml文件所在的目录下执行。):

restart, start, stop– 启动和停止服务

# 前台启动, 启动项目中的所有服务。
$. docker-compose up

# 后台启动, 启动所有服务并在后台运行。 
$. docker-compose up -d

# 停止所有服务。
$. docker-compose stop 

restart
docker-compose restart重启服务容器。
docker-compose restart # 重启工程中所有服务的容器
docker-compose restart nginx # 重启工程中指定服务的容器

start
docker-compose start启动服务容器。
docker-compose start # 启动工程中所有服务的容器
docker-compose start nginx # 启动工程中指定服务的容器

stop
docker-compose stop停止服务容器。
docker-compose stop # 停止工程中所有服务的容器
docker-compose stop nginx # 停止工程中指定服务的容器

build — 构建和重构服务

# 构建服务的镜像
docker-compose build

# 如果服务镜像不存在,则构建镜像并启动服务。
docker-compose up –build

# 重构服务。
docker-compose up --force-recreate 

ps, logs — 查看服务信息

# 查看项目中所有服务的信息。
docker-compose ps

# 查看容器的日志。
docker-compose logs

# 在服务镜像的容器中执行命令。
docker-compose exec service_name command

down — 删除所有容器

#  删除服务容器(容器)
docker-compose down 

logs命令

# docker-compose logs 查看服务容器的输出日志。
# 默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。
# 可以通过--no-color来关闭颜色。
# 输出日志,不同的服务输出使用不同的颜色来区分
docker-compose logs
# 跟踪日志输出
docker-compose logs -f
# 关闭颜色
docker-compose logs --no-color

# 查看日志
docker-compose logs web  # 参考 1.9 docker-compose.yml 文件内容

exec命令 — 进入指定容器

exec
docker-compose exec进入服务容器。
docker-compose exec nginx bash # 进入工程中指定服务的容器
docker-compose exec --index=1 nginx bash # 当一个服务拥有多个容器时,可通过 --index 参数进入到该服务下的任何容器

sudo docker-compose exec jobmanager ./bin/sql-client.sh -f sql/flink_kafka1.sql
sudo docker-compose exec jobmanager ./bin/flink list
sudo docker logs -f -t --since="2023-05-08" --tail=200 flink_taskmanager_1
sudo docker-compose logs -f taskmanager

sudo docker-compose exec jobmanager bash
sudo docker-compose exec jobmanager ./bin/flink cancel 8d8cc94d73f7bd0c4cdc557264553a04

pause, unpause命令 — 暂停, 恢复服务容器

pause
docker-compose pause暂停服务容器
docker-compose pause # 暂停工程中所有服务的容器
docker-compose pause nginx # 暂停工程中指定服务的容器

unpause
docker-compose unpause恢复服务容器。
docker-compose unpause # 恢复工程中所有服务的容器
docker-compose unpause nginx # 恢复工程中指定服务的容器

scale 命令 — 扩容缩容

docker-compose scale taskmanager=5
docker-compose up --scale web=5 -d

# -------------------------------------------- # 
# docker-compose.yml内容:
version: '3'
services:
  web:
    build: .
    networks:
      - app-net

  redis:
    image: "redis:alpine"
    networks:
      - app-net

networks:
  app-net:
    driver: bridge

ps命令 — 查看容器列表

docker-compose ps

stop 指定容器

docker-compose stop jobmanager
docker-compose stop taskmanager

删除容器

docker-compose rm -f jobmanager
docker-compose rm -f taskmanager
赞(0)
未经允许不得转载:LoveCTO » 【运维】java程序在ubuntu系统Docker容器化部署及docker-compose常用命令

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

热爱技术 追求卓越 精益求精