Docker 部分软件部署

361 阅读3分钟

Docker 部分软件部署

docker常用命令

run

  • 创建一个容器并运行。
# --restart always 跟着docker重启
# -p(小写) 指定端口映射,格式为:主机(宿主)端口:容器端口
# -v 绑定一个卷 宿主卷:容器卷
docker run --restart=always \
      -itd --name redis -p 6379:6379 \
      -v /blessing/redis/data:/data \
      redis:7.0

ps

  • 查询容器
# 以不截断输出的方式,只显示所有容器(包括未运行)最近10个状态已是exited的容器编号
# -a 所有容器、 -q 置显示容器编号
# --no-trunc 不截断输出、-n num 最近N个容器
# -f status=状态、 ancestor=镜像ID或名称; 启动顺序:before=镜像ID、since=镜像ID; 等。

docker ps -a -q --no-trunc -n 10 -f status=exited

# 显示最近创建的容器,并显示文件大小
docker ps -l -s

restart

  • 重启所有正在运行容器
docker restart $(docker ps -q)
  • 重启所有容器
docker restart $(docker ps -a -q)
  • 重启所有已是exited状态的容器
docker restart $(docker ps -a -q -f status=exited)

logs

  • 显示日志
# 持续显示该容器从2023-07-13起始的最新10条日志并附带时间戳
# -t 显示时间戳、--since="yyyy-MM-dd" 起始日期
# -f 跟踪日志输出、--tial N 最新N条日志
docker logs -t --tail 10 -f --since="2023-07-13" 容器名称或ID

save、load、import、export

exportimport互为一组。

saveload互为一组。

  • export
 # 导出nacos容器到 /blessing/nacos-`date +%Y%m%d`.tar 文件中
 # -o 将输入内容写到文件
 # 文件名称:nacos-20230713.tar 
 
 docker export -o /blessing/nacos-`date +%Y%m%d`.tar nacos容器名称或ID
  • save
# 导出nginx镜像到 /blessing/nginx-`date +%Y%m%d`.tar 文件中
# -o 将输入内容写到文件
# 文件名称:nginx-20230713.tar 
docker save -o /blessing/nginx-`date +%Y%m%d`.tar nginx镜像名称或ID
  • import
# 导入路径 /blessing/nacos-20230713.tar镜像,将其归入为my_nacos仓库名称为nacos中,并打上mytag标签
# -m 提交说明
docker import -m "test"  /blessing/nacos-20230713.tar my_nacos/nacos:mytag
  • load
# 导入指定路径 /blessing/nginx-20230713.tar的镜像
# --input -i: 指定导入的文件,代替 STDIN
docker load -i /blessing/nginx-20230713.tar

tag

# 标记镜像redis:7.0,将其归入own仓库中,名称为redis:7.0
docker tag redis:7.0 own/redis:7.0

容器A-Z

Clickhouse

# 默认用户是 default
# CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT 基于SQL授权,默认为0,不开
# CLICKHOUSE_PASSWORD 默认没有密码
mkdir -p /blessing/clickhouse/store
mkdir -p /blessing/clickhouse/logs
docker run -itd --restart=always \
--name clickhouse \
-p 8123:8123 -p 9000:9000 -p 9009:9009 \
--ulimit nofile=262144:262144 \
-v /blessing/clickhouse/store:/var/lib/clickhouse/ \
-v /blessing/clickhouse/logs:/var/log/clickhouse-server/ \
-e CLICKHOUSE_USER=DawnSilverGravel \
-e CLICKHOUSE_DB=silver_gravel \
-e CLICKHOUSE_PASSWORD=DawnSilverGravel \
-e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 \
clickhouse/clickhouse-server:23.3.8.21

ps: 9000端口与MinIO默认端口冲突。

http://ip:8123/play

可能用到的端口:

Pasted image 20230720221654.png

EMQX

docker run -itd \
    --restart=always \
    --name emqx \
    -p 1883:1883 -p 8083:8083 \
    -p 8084:8084 -p 8883:8883 \
    -p 18083:18083 emqx/emqx:latest

http://ip:18083 默认用户和密码 admin 和 public

Jar

假设当前目录下有一个Springboot blessing.jar

vim Dockerfile
FROM openjdk:8-jre  
# 解决8小时时差问题  
ENV TZ=Asia/Shanghai  
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 第一个参数是jar包名,第二个是别名
ADD  blessing.jar blessing_name.jar  
ENTRYPOINT ["java","-jar","-Dfile.encoding=UTF-8","-Duser.timezone=Asia/Shanghai","blessing_name.jar"]
# 假设有一个blessing项目的application.yml存在下面目录下
mkdir -p /blessing/blessingName
docker build -t blessing_name .
docker run -itd --net=host \
--name blessingName \
--restart always \
-v /blessing/blessingName/application.yml:/application.yml \
blessing_name

ps:Springboots首先会查找jar同级的yml文件,如果没有则查找同级config/application.yml文件,再到jar内部application.yml文件

Minio

mkdir -p /blessing/minio/data
mkdir -p /blessing/minio/config
docker run -dit  \
   --restart=always \
   -p 9900:9000 \
   -p 9090:9090 \
   --name minio \
   -v  /blessing/minio/data:/data \
   -v  /blessing/minio/config:/root/.minio \
   -e "MINIO_ROOT_USER=DawnSilverGravel" \
   -e "MINIO_ROOT_PASSWORD=DawnSilverGravel" \
   quay.io/minio/minio:RELEASE.2023-06-02T23-17-26Z.fips \
   server /data --console-address ":9090" --address ":9000"

ps: 9000端口与Clickhouse默认client端口冲突。这里改成9900 http://ip:9900

MySQL

# -v 挂载数据库data位置
mkdir -p /blessing/mysql/data
docker run -itd --restart=always \
--name mysql \
-p 3306:3306 \
-v /blessing/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=DawnSilverGravel \
mysql:8.0.33 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

Nacos

使用MySQL数据源,请创建指定表,本示例使用自己创建的数据库nacos

表来源:Nacos官方mysql-schema.sql

# SPRING_DATASOURCE_PLATFORM 支持类型:默认空
# MYSQL_SERVICE_DB_NAME 目标数据库
mkdir -p /blessing/nacos/data
mkdir -p /blessing/nacos/logs
docker run -itd --restart=always \
-p 8848:8848 \
--name nacos \
-v /blessing/nacos/logs:/logs \
-v /blessing/nacos/data:/data \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.107.140 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=DawnSilverGravel \
nacos/nacos-server:v2.2.3

http://ip:8848/nacos 默认账号和密码: nacos 和 nacos

Nginx

# nginx.conf:ro 只读模式
# 使用-v 挂载,保证有nginx.conf文件存在
mkdir -p /blessing/nginx/conf
mkdir -p /blessing/nginx/data
docker run -itd --restart=always \
-p 80:80 \
--name nginx \
-v /blessing/nginx/data:/data \
-v /blessing/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
nginx:1.25.1

Postgresql

# POSTGRES_USER不设置默认是 postgres
# POSTGRES_DB不设置默认跟POSTGRES_USER名称一致,设置小写遵循数据库命名规范。
# warnning: 如果/blessing/postgresql/data下有pgdata数据了。
# 删除容器重新启动新容器。数据库名称将不会有变化。
mkdir -p /blessing/postgresql/data
docker run -itd \
        --restart=always \
        -p 5432:5432 \
	--name postgres \
	-e POSTGRES_PASSWORD=DawnSilverGravel \
        -e POSTGRES_DB=silver_gravel \
        -e POSTGRES_USER=SilverGravel \
	-e PGDATA=/var/lib/postgresql/data/pgdata \
	-v /blessing/postgresql/data:/var/lib/postgresql/data \
	postgres:15

Redis

mkdir -p /blessing/redis/data
mkdir -p /blessing/redis/conf
# --requirepass "DawnSilverGravel" redis密码
# --appendonly yes 开启持久化
docker run -itd \
    --restart=always \
    --name redis \
    -p 6379:6379 \
    -v /blessing/redis/data:/data \
    -v /blessing/redis/conf/reids.conf:/etc/redis/redis.conf \
    redis:7.0 redis-server /etc/redis/redis.conf \
    --requirepass "DawnSilverGravel" \
    --appendonly yes

RocketMQ5.0

  1. 安装mqnamesrv
# 使用--net=host -p参数失效
docker run -itd --restart=always \
--name mqNameSrv \
--net=host \
apache/rocketmq:5.1.3 ./mqnamesrv
  1. 安装broker

创建rmq-proxy.json文件

mkdir -p /blessing/rocketmq/conf
echo -e "{\n  \"grpcServerPort\": 28081, //对外暴露的代理端口
  \"rocketMQClusterName\": \"DefaultCluster\"\n}" \
    > /blessing/rocketmq/conf/rmq-proxy.json

image.png

# 使用--net=host -p参数失效
# 不使用--net=host localhost:9876 ip得修改指定的IP
mkdir -p /blessing/rocketmq/store
mkdir -p /blessing/rocketmq/logs
chmod -R 777 /blessing/rocketmq
docker run -itd --restart=always \
--name mqBroker \
--net=host \
-v /blessing/rocketmq/store:/home/rocketmq/store \
-v /blessing/rocketmq/logs:/home/rocketmq/logs \
-v /blessing/rocketmq/conf/rmq-proxy.json:/home/rocketmq/rocketmq-5.1.3/conf/rmq-proxy.json \
apache/rocketmq:5.1.3 ./mqbroker -n localhost:9876 --enable-proxy

3.安装rocketmq-dashboard

# 使用--net=host -p参数失效
# 不使用--net=host 127.0.0.1:9876 ip得修改指定的IP
docker run -itd --restart=always \
--net=host \
--name rocketmq-dashboard \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dserver.port=28080" \
apacherocketmq/rocketmq-dashboard:latest

http://ip:28080

待续...