侧边栏壁纸
博主头像
DJ's Blog博主等级

行动起来,活在当下

  • 累计撰写 133 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

【Docker】软件安装

Administrator
2022-03-06 / 0 评论 / 0 点赞 / 139 阅读 / 20462 字

【Docker】软件安装

wechatbot

  • 安装wechatbot
docker run -itd --name wechatbot -v `pwd`/wechatbot/config.json:/app/config.json -v `pwd`/wechatbot/run.log:/app/run.log docker.mirrors.sjtug.sjtu.edu.cn/qingshui869413421/wechatbot:latest
  • 进入容器
docker exec -it wechatbot bash
  • 查看二维码
tail -f -n 50 /app/run.log

vim

  • 进入容器
docker exec -it 容器ID bash
  • 配置网易的镜像源
mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" > /etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
  • 安装vim编辑器
apt-get install vim

如果想安装其他工具的话,可以使用apt-get install命令

MySQL

  • 下载指定版本的MySQL镜像
docker pull mysql:5.7.26
  • 运行MySQL容器
docker run --name mysql5.7.26 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:5.7.26
  • 进入MySQL容器,并登录客户端
docker exec -it mysql5.7.26 bash
mysql -u root -p
  • 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lzslov123!';
  • 添加远程登录用户
CREATE USER 'liaozesong'@'%' IDENTIFIED WITH mysql_native_password BY 'Lzslov123!';
GRANT ALL PRIVILEGES ON *.* TO 'liaozesong'@'%';
  • 修改MySQL配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]下添加你的配置,比如

sql_mode=

MySQL集群(单机多容器)

  • 拉取pxc镜像
docker pull percona/percona-xtradb-cluster:5.7.21
  • 创建一个单独的网段,给mysql数据库集群使用
docker network create --subnet=172.20.0.0/24 pxc-net
  • 创建3个卷
docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
  • 创建三个容器
docker run -d -it --name pxc_node01 -p 3301:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=pxc -e XTRABACKUP_PASSWORD=123456 --privileged --net=pxc-net --ip 172.20.0.2 f1439de62087

docker run -d -it --name pxc_node02 -p 3302:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=pxc -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pxc_node01 --privileged --net=pxc-net --ip 172.20.0.3 f1439de62087 

docker run -d -it --name pxc_node03 -p 3303:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=pxc -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pxc_node01 --privileged --net=pxc-net --ip 172.20.0.4 f1439de62087 

-v v1:/var/lib/mysql:容器中的/var/lib/mysql路径映射到宿主机的v1卷

-e CLUSTER_NAME=pxc:指定集群的名称

-e XTRABACKUP_PASSWORD=123456:指定集群内节点通信的密码

--net=pxc-net:指定集群使用的网络

--ip 172.20.0.2:指定节点的ip地址

f1439de62087:镜像ID

-e CLUSTER_JOIN=pxc_node01:加入某个节点组成集群

haproxy

  • 拉取haproxy镜像
docker pull haproxy
  • 创建haproxy配置文件,这里使用bind mounting的方式
mkdir -p /tmp/haproxy
cd /tmp/haproxy
vim haproxy.cfg
  • 填下如下配置内容
global
	#工作目录,这边要和创建容器指定的目录对应
	chroot /usr/local/etc/haproxy
	#日志文件
	log 127.0.0.1 local5 info
	#守护进程运行
	daemon
defaults
	log global
	mode http
	#日志格式
	option httplog
	#日志中不记录负载均衡的心跳检测记录
	option dontlognull
	#连接超时(毫秒)
	timeout connect 5000
	#客户端超时(毫秒)
	timeout client 50000
	#服务器超时(毫秒)
	timeout server 50000
	#监控界面
	listen admin_stats
	#监控界面的访问的IP和端口
	bind 0.0.0.0:8888
	#访问协议
	mode http
	#URI相对地址
	stats uri /dbs_monitor
	#统计报告格式
	stats realm Global\ statistics
	#登陆帐户信息
	stats auth admin:admin
	#数据库负载均衡
	listen proxy-mysql
	#访问的IP和端口,haproxy开发的端口为3306
	#假如有人访问haproxy的3306端口,则将请求转发给下面的数据库实例
	bind 0.0.0.0:3306
	#网络协议
	mode tcp
	#负载均衡算法(轮询算法)
	#轮询算法:roundrobin
	#权重算法:static-rr
	#最少连接算法:leastconn
	#请求源IP算法:source
	balance roundrobin
	#日志格式
	option tcplog
	#在MySQL中创建一个没有权限的haproxy用户,密码为空。
	#Haproxy使用这个账户对MySQL数据库心跳检测
	option mysql-check user haproxy
	server MySQL_1 172.20.0.2:3306 check weight 1 maxconn 2000
	server MySQL_2 172.20.0.3:3306 check weight 1 maxconn 2000
	server MySQL_3 172.20.0.4:3306 check weight 1 maxconn 2000
	#使用keepalive检测死链
	option tcpka
  • 创建haproxy容器
docker run -it -d -p 8888:8888 -p 3306:3306 -v /tmp/haproxy:/usr/local/etc/haproxy --name haproxy --privileged --net=pxc-net haproxy

-v /tmp/haproxy:/usr/local/etc/haproxy:容器中的/usr/local/etc/haproxy目录映射到宿主机的/tmp/haproxy目录

  • 根据haproxy.cfg文件启动haproxy
docker exec -it haproxy bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
  • 在MySQL数据库上创建用户,用于心跳检测
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
  • 使用mysql客户端连接

【Docker】【软件安装】MySQL.png

redis

  • 宿主机新建redis数据文件目录
mkdir -p /data/redis/data
  • 拷贝redis官方配置文件并修改
cp /opt/redis-6.0.5/redis.conf /data/redis
vim /data/redis/redis.conf
  • 修改如下内容
#注释掉这部分,这是限制redis只能本地访问
bind 127.0.0.1 
#默认yes,开启保护模式,限制为本地访问
protected-mode no 
#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
daemonize no 
#开启redis的aof持久化
appendonly yes 
#设置redis密码
requirepass 123456 
  • 下载指定版本的Redis镜像
docker pull redis:6.0.5
  • 运行Redis容器
docker run --name redis6.0.5 -p 6479:6379 \
-v /data/redis/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data \
-d redis:6.0.5 \
redis-server /etc/redis/redis.conf

-p 6479:6379:把容器内的6379端口映射到宿主机6479端口

-v /data/redis/redis.conf:/etc/redis/redis.conf:把宿主机配置好的redis.conf和容器中的配置文件做双向绑定

-v /data/redis/data:/data:把redis持久化的数据在宿主机内显示,做数据备份

redis-server /etc/redis/redis.conf:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动

  • 进入Redis容器,并登录客户端
docker exec -it redis5.0.6 /bin/bash
redis-cli
  • 查看Redis版本
docker exec -it redis5.0.6 redis-server -v

kafka

  • 进入Kafka容器
docker exec -it kafka2.12-2.3.0 /bin/bash

xxl-job-admin

  • 拉取镜像
docker pull xuxueli/xxl-job-admin:2.2.0
  • 创建容器
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://172.16.141.205:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456" -p 8082:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin:2.2.0

weavescope

  • 安装命令
sudo curl -L git.io/scope -o /usr/local/bin/scope
sudo chmod a+x /usr/local/bin/scope
scope launch 192.168.247.130

harbor

tar xvf harbor-offline-installer-v2.2.1.tgz
  • 进入到解压缩的harbor目录,修改harbor.yml文件
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
  • 修改如下内容
# 启动http配置
hostname: 192.168.247.130
http:
  port: 8088
harbor_admin_password: Harbor12345
# 禁用https配置
#https:
  #port: 443
  #certificate: /your/certificate/path
  #private_key: /your/private/key/path
  • 运行启动脚本
./install.sh

nginx

  • 拉取nginx最新版镜像
docker pull nginx
  • 在主机的/tmp/nginx下新建nginx.conf文件,并进行相应的配置
mkdir -p /tmp/nginx
cd /tmp/nginx/
vim nginx.conf
  • 修改如下内容
user nginx;
worker_processes 1;
events {
    worker_connections 1024;
}
http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    server {
        listen 80;
        location / {
            proxy_pass http://balance;
        }
    }

    upstream balance{
        server springboot-mybatis-node01:8080;
        server springboot-mybatis-node02:8080;
        server springboot-mybatis-node03:8080;
    }
    include /etc/nginx/conf.d/*.conf;
}
  • 创建nginx容器
docker run -d -it --name my-nginx -p 80:80 -v /tmp/nginx/nginx.conf:/etc/nginx/nginx.conf --network=pxc-net --ip 172.20.0.20 nginx

-v /tmp/nginx/nginx.conf:/etc/nginx/nginx.conf:宿主机/tmp/nginx/nginx.conf配置文件映射容器/etc/nginx/nginx.conf配置文件

--network=pxc-net:指定容器使用的网络为pxc-net

--ip 172.20.0.20:指定容器的ip为172.20.0.20

spring boot项目

  • spring boot项目使用如下命令打包
mvn clean package -Dmaven.test.skip=true
  • 在服务器上新建一个目录springboot-mybatis
mkdir -p /opt/springboot-mybatis
  • 上传spring boot项目包到springboot-mybatis目录
  • 在springboot-mybatis目录下编写docker file文件
cd /opt/springboot-mybatis
vim Dockerfile
  • 新增如下内容
FROM openjdk:8-jre-alpine
MAINTAINER djflying
LABEL name="springboot-mybatis" version="1.0" author="djflying"
COPY springboot-mybatis.jar springboot-mybatis.jar
CMD ["java","-jar","springboot-mybatis.jar"]
  • 基于docker file构建镜像
docker build -t springboot-mybatis-image .
  • 基于镜像创建容器
docker run -d --name springboot-mybatis-node01 -p 8081:8080 --net=pxc-net --ip 172.20.0.11 springboot-mybatis-image
  • 查看spring boot项目日志
docker logs springboot-mybatis-node01

portainer

  • 安装server
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
  • 安装agent
docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent

cadvisor

  • 用途:采集Docker容器指标数据
  • 安装
docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=18080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

prometheus

  • 安装
docker run -d --name=prometheus  -p 9090:9090  -v /usr/local/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
  • 修改配置文件prometheus.yml
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
  
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['172.16.244.76:18080','172.16.30.182:18080','172.16.30.183:18080']

  #- job_name: 'redis_exporter'
  #  static_configs:
  #  - targets:
  #    - 172.16.30.184:9121

  #- job_name: 'mysql_exporter'
  #  static_configs:
  #  - targets:
  #    - 172.16.30.184:9104

  #- job_name: 'uker-psp-site'
  #  metrics_path: '/uker-psp-site/actuator/prometheus'
  #  static_configs:
  #  - targets: ['172.16.30.180:60005']

  #- job_name: 'uker-epay'
  #  metrics_path: '/epay/actuator/prometheus'
  #  static_configs:
  #  - targets: ['172.16.30.180:20000']

  #- job_name: 'uker-medicine-schedule'
  #  metrics_path: '/uker-medicine-schedule/actuator/prometheus'
  #  static_configs:
  #  - targets: ['172.16.30.184:60013']

grafana

  • 安装
docker run -d --name=grafana  -p 3000:3000 grafana/grafana

jenkins

  • 安装
docker run -u root --rm -d --name jenkins -p 8080:8080 -p 50000:50000 -v /var/lib/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:2.263.1

postgres

  • 安装
docker run --name postgres \
-e POSTGRES_PASSWORD=SuccessHR@2021 \
-p 5432:5432 -d postgres

POSTGRES_PASSWORD:设置postgres密码

SonarQube

  • postgres数据库创建账号
docker exec -it postgres /bin/bash
psql -U postgres -d postgres -h 127.0.0.1 -p 5432
create user sonar with password 'sonar';
create database sonar owner sonar;
grant all privileges on database sonar to sonar;
  • 创建SonarQube的Docker的volumes
docker volume create --name sonarqube_data
docker volume create --name sonarqube_logs
docker volume create --name sonarqube_extensions
  • 安装SonarQube
docker run -d --name sonarqube \
    -p 9000:9000 \
    -e SONAR_JDBC_URL=jdbc:postgresql://172.16.30.183:5432/sonar \
    -e SONAR_JDBC_USERNAME=sonar \
    -e SONAR_JDBC_PASSWORD=sonar \
    -v sonarqube_data:/opt/sonarqube/data \
    -v sonarqube_extensions:/opt/sonarqube/extensions \
    -v sonarqube_logs:/opt/sonarqube/logs \
    sonarqube

filebeat

  • 下载镜像
docker pull docker.elastic.co/beats/filebeat:7.13.0
  • 创建配置文件
vim erp-site-fb.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /elk/filebeat/log/info.*.log
  fields:
    source: "erp-site-info"
  multiline.pattern: "[m][0-9]{4}-[0-9]{2}-[0-9]{2}"
  multiline.negate: true
  multiline.match: after
- type: log
  enabled: true
  paths:
    - /elk/filebeat/log/error.*.log
  fields:
    source: "erp-site-error"
  multiline.pattern: "[m][0-9]{4}-[0-9]{2}-[0-9]{2}"
  multiline.negate: true
  multiline.match: after
output.elasticsearch:
  hosts: ["121.41.200.163:9200"]
  index: "erp-site-%{+yyyy}"
setup.template.name: "erp-site"
setup.template.pattern: "erp-site-*"
setup.ilm.enabled: false
processors:
  - script:
      lang: javascript
      id: log_time
      tag: enable
      source: >
        function process(event) {
            var str = event.Get("message");
            var time = str.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}/);
            var times = time.toString()
            event.Put("log_time",times);
        }
  - timestamp:
      field: log_time
      timezone: Asia/Shanghai
      layouts:
        - '2006-01-02 15:04:05'
        - '2006-01-02 15:04:05.999'
      test:
        - '2019-06-22 16:33:51'
        - '2019-11-18 04:59:51.123'
  • 启动容器
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d --restart=always \
-v /usr/local/filebeat/erp-site-fb.yml:/usr/share/filebeat/filebeat.yml \
-v /opt/ukerw/erp-site/log:/elk/filebeat/log \
--name erp-site-fb 70ba30f12e3a

PhpMyAdmin

  • 基本安装命令
docker run --name myadmin -d -e PMA_HOST=47.111.109.123 -p 8082:80 phpmyadmin/phpmyadmin

PMA_HOST:要连接的MySQL服务器的地址

参考文档:https://docs.phpmyadmin.net/zh_CN/latest/setup.html

0

评论区