【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客户端连接
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
- 下载软件:https://github.com/goharbor/harbor/releases
- 找一台安装了docker-compose的机器,上传并解压
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服务器的地址
评论区