本地Docker环境(service all in docker)
centos软件源
#1、备份,将 CentOS-Base.repo 为CentOS-Base.repo.backup
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 2、下载新的 http://mirrors.aliyun.com/repo/Centos-7.repo,并命名为CentOS-Base.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#或者
#curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 3、清除缓存
yum clean all # 清除系统所有的yum缓存
yum makecache # 生成yum缓存
安装Docker服务
内核版本检查:3.10满足条件
uname -r
卸载旧版本(如果之前安装过)
yum remove docker docker-common docker-selinux docker-engine
安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
选择docker版本并安装
- 查看docker可用版本
yum list docker-ce --showduplicates | sort -r
- 选择版本并安装
yum -y install docker-ce-19.03.9
- 启动docker并设置开机自启
systemctl enable docker && systemctl start docker
Docker镜像加速
创建或修改 /etc/docker/daemon.json
{
"registry-mirrors": [
"https://<your_code>.mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.nju.edu.cn"
]
}
镜像加速器 | 镜像加速器地址 | 专属加速器? | 其它加速? |
---|---|---|---|
DaoCloud 镜像站 | https://docker.m.daocloud.io | 白名单模式 | Docker Hub、GCR、K8S、GHCR、Quay、NVCR 等 |
阿里云 | https://<your_code>.mirror.aliyuncs.com | 需登录,系统分配 | Docker Hub |
Docker 镜像代理 | https://dockerproxy.com | Docker Hub、GCR、K8S、GHCR | |
百度云 | https://mirror.baidubce.com | Docker Hub | |
南京大学镜像站 | https://docker.nju.edu.cn | Docker Hub、GCR、GHCR、Quay、NVCR 等 | |
中科院软件所镜像站 | https://mirror.iscas.ac.cn | Docker Hub |
安装Docker图形化
# 图形化:portainer
# 当前密码:Portainer2022
docker run -d \
--name portainer \
--restart always \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/portainer:/data \
portainer/portainer
# portainer忘记密码
# 1、停止portainer容器
# 2、执行密码重置命令: docker run --rm -v /home/portainer:/data portainer/helper-reset-password
# 3、查看控制台打印的账号和密码
# 图形化:docker.ui
# 初始化账号密码:ginghan/123456
docker run -d \
--name docker.ui \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 9001:8999 \
joinsunsoft/docker.ui
# 图形化:ui-for-docker
docker run -d \
--name docker-web \
--restart always \
-p 9002:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/docker-web:/data \
docker.io/uifd/ui-for-docker
# 图形化:lazydocker
lazydocker
安装MySQL
# 二选一
# 5.7.40版本
docker run -d \
--restart=always \
--name mysql \
-p 3306:3306 \
-p 33060:33060 \
-v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /home/mysql/logs:/logs \
-v /home/mysql/data:/mysql_data \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7.40
# 8.0.27
docker run -d \
--name mysql8 \
--restart always \
--privileged=true \
-p 3307:3306 \
-p 33070:33060 \
-v /home/mysql8/data:/var/lib/mysql \
-v /home/mysql8/conf:/etc/mysql/conf.d \
-v /home/mysql8/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0.27
安装Postgresql
docker run -it \
--name postgres \
--restart always \
-e POSTGRES_PASSWORD='root' \
-e ALLOW_IP_RANGE=0.0.0.0/0 \
-v /home/postgres/data:/var/lib/postgresql \
-p 5432:5432 \
-d \
postgres:14
- –name : 自定义容器名称
POSTGRES_PASSWORD:数据库密码 - -e ALLOW_IP_RANGE=0.0.0.0/0,这个表示允许所有ip访问,如果不加,则非本机 ip 访问不了
- -v :进行映射,本地目录:容器内路径
- -p:映射端口,宿主机端口:容器端口
最后是 镜像名称:端口号
# 进入容器
docker exec -it postgres bash
# 当前root切换成postgres
su postgres
# 输入用户名,密码再执行完后
psql -U postgres -W
设置远程访问许可(非常重要)
需要修改两个配置文件:pg_hba.conf、postgresql.conf
# 拷贝文件出来,并修改
docker cp postgres:/var/lib/postgresql/data/pg_hba.conf /home/postgres/
# IPV4位置增加
host all all 0.0.0.1/0 md5
# 文件拷贝回去
docker cp /home/postgres/pg_hba.conf postgres:/var/lib/postgresql/data/
# postgresql.conf文件拷贝类似
docker cp postgres:/var/lib/postgresql/data/postgresql.conf /home/postgres/
# postgresql.conf文件修改内容
listen_addresses = '*'
# 文件拷贝回去
docker cp /home/postgres/postgresql.conf postgres:/var/lib/postgresql/data/
安装Redis
下载对应版本的配置文件:
https://redis.io/topics/config/
修改配置文件:
- bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
- protected-mode no #默认yes,开启保护模式,限制为本地访问
- daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程(可选),改为yes会使配置文件方式启动redis失败
- dir ./ #输入本地redis数据库存放文件夹(可选)
- appendonly yes #redis持久化(可选)
启动reids
docker run \
--restart=always \
--name redis \
-p 6379:6379 \
-v /home/redis/redis.conf:/etc/redis/redis.conf \
-v /home/redis/data:/data \
-d redis:5.0 \
redis-server /etc/redis/redis.conf \
--appendonly yes
# 不挂载配置文件
docker run \
--name redis \
--restart=always \
--requirepass "这是密码" \
-p 6379:6379 \
-d redis redis-server \
--appendonly yes
安装RocketMQ
# 拉取镜像
docker pull rocketmqinc/rocketmq
# 启动nameserver
docker run -d \
--restart=always \
--name rmqnamesrv \
-p 9876:9876 \
-v /home/rocketmq/data/namesrv/logs:/home/logs \
-v /home/rocketmq/data/namesrv/store:/home/store \
-v /usr/local/jdk1.8.0_202:/usr/local/jdk \
-e "MAX_POSSIBLE_HEAP=100000000" \
rocketmqinc/rocketmq:4.4.0 \
sh mqnamesrv
vi /home/rocketmq/conf/broker.conf
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#是否允许Broker自动创建订阅组,建议线上关闭
autoCreateTopicEnable = true
#是否允许Broker自动创建订阅组,建议线上关闭
autoCreateSubscriptionGroup = true
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
#设置broker节点所在服务器的ip地址
brokerIP1 = 10.11.27.16
#磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95
# 启动broker
docker run -d \
--restart=always \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v /home/rocketmq/data/broker/logs:/home/logs \
-v /home/rocketmq/data/broker/store:/home/store \
-v /home/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-v /usr/local/jdk1.8.0_202:/usr/local/jdk \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq:4.4.0 \
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
# 拉取镜像rocketmq-console
docker pull pangliang/rocketmq-console-ng
# 启动rockermq-console
docker run -d \
--restart=always \
--name rmqadmin \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=10.11.27.16:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 10800:8080 \
pangliang/rocketmq-console-ng
安装Nacos
# 拉取镜像
docker pull nacos/nacos-server:v2.1.0
# 自定义配置文件
vim /home/nacos/init.d/custom.properties
# 配置文件内容
management.endpoints.web.exposure.include = *
# 创建并启动容器(A、B两个方案)
# A、创建容器:使用standalone模式并开放8848端口,并映射配置文件和日志目录,数据库默认使用 Derby
docker run -d \
--restart always \
--name nacos \
-p 8848:8848 \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /home/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
-v /home/nacos/logs:/home/nacos/logs \
nacos/nacos-server:v2.1.0
# B、使用docker-compose启动
# 首先配置docker-compose文件 standalone-derby.yaml
# 配置文件内容
version: "2"
services:
nacos:
image: nacos/nacos-server:latest
container_name: nacos
environment:
- MODE=standalone
volumes:
- /home/nacos/logs:/home/nacos/logs
- /home/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8848:8848"
# 启动、关闭、移除、关闭并移除命令如下:
# 启动
docker-compose -f standalone-derby.yaml up
# 关闭
docker-compose -f standalone-derby.yaml stop
# 移除
docker-compose -f standalone-derby.yaml rm
# 关闭并移除
docker-compose -f standalone-derby.yaml down
# 依赖mysql数据库
docker run -d \
--restart always \
--name nacos \
-p 8848:8848 \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=10.11.27.16 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_DATABASE_NUM=1 \
-v /home/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
-v /home/nacos/logs:/home/nacos/logs \
nacos/nacos-server:v2.1.0
# 访问http://ip:8848/nacos/ 账号默认nacos、密码默认nacos(mysql数据库为数据库配置的密码)
安装Jekins
# 环境准备
# 1、JDK
wget https://download.oracle.com/otn/java/jdk/jdk-8u202-linux-x64.tar.gz
tar -zxvf jdk-8u202-linux-x64.tar.gz
mv jdk1.8.0_202 /usr/local/jdk1.8.0_202
# 2、Maven
wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
tar -zxvf apache-maven-3.8.6-bin.tar.gz
mv apache-maven-3.8.6 /usr/local/apache-maven-3.8.6
# 3、NodeJS
wget https://nodejs.org/download/release/v14.18.1/node-v14.18.1-linux-x64.tar.gz
tar -zxvf node-v14.18.1-linux-x64.tar.gz
mv node-v14.18.1-linux-x64 /usr/local/node-v14.18.1-linux-x64
# 新建目录并修改权限!!!非常重要!!!
mkdir /home/jenkins
chown -R 1000 /home/jenkins
# 安装
docker run \
--name jenkins \
--restart=always \
-p 8098:8080 \
-p 50000:50000 \
-u root \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/bin/docker \
-v /etc/localtime:/etc/localtime \
-v /usr/local/jdk1.8.0_202:/usr/local/jdk \
-v /usr/local/apache-maven-3.8.6:/usr/local/maven \
-v /usr/local/node-v14.18.1-linux-x64:/usr/local/nodejs \
-v /home/docker/tmp:/var/lib/docker/tmp \
-v /home/jenkins:/var/jenkins_home \
-d jenkins/jenkins
# 访问查看密码
docker exec -it {容器ID} bash
cat /var/jenkins_home/secrets/initialAdminPassword
# 本次搭建密码
e574970ad40f46dcb9736f87733dd22b -> sa2022
# 忘记密码 -> 重置密码为:123456
# 1、修改<passwordHash>******</passwordHash>标签(含中间内容)为:
# 2、<passwordHash>#jbcrypt:$2a$10$LxMm9HqAI/R4z7gL57qTouW/Mrz8uSaBpCGKvKc7K6dK.g/0yk/uq</passwordHash>
# 3、保存修改
# 4、重启jenkins -> 使用默认密码登录 -> 修改新密码
cd /home/jenkins/users/{user_******}
vim config.xml
安装Nginx
# --link answer-server:answerserver \
docker run -d \
--name nginx \
--restart=always \
-p 80:80 \
-p 443:443 \
-v /home/nginx/html:/usr/share/nginx/html \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx/logs:/var/log/nginx \
nginx
安装Zipkin
1. 首先在MySQL库新建zipkin库,并执行以下SQL
CREATE TABLE IF NOT EXISTS zipkin_spans (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL,
`id` BIGINT NOT NULL,
`name` VARCHAR(255) NOT NULL,
`remote_service_name` VARCHAR(255),
`parent_id` BIGINT,
`debug` BIT(1),
`start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query',
PRIMARY KEY (`trace_id_high`, `trace_id`, `id`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';
ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
ALTER TABLE zipkin_spans ADD INDEX(`remote_service_name`) COMMENT 'for getTraces and getRemoteServiceNames';
ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';
CREATE TABLE IF NOT EXISTS zipkin_annotations (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
`span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
`a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
`a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
`a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
`a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
`endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
`endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
`endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
`endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces and autocomplete values';
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces and autocomplete values';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job';
CREATE TABLE IF NOT EXISTS zipkin_dependencies (
`day` DATE NOT NULL,
`parent` VARCHAR(255) NOT NULL,
`child` VARCHAR(255) NOT NULL,
`call_count` BIGINT,
`error_count` BIGINT,
PRIMARY KEY (`day`, `parent`, `child`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
2. 启动zipkin服务
docker run -d \
--restart always \
--name zipkin \
-p 9411:9411 \
-v /etc/localtime:/etc/localtime:ro \
-e STORAGE_TYPE=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASS=root \
-e MYSQL_HOST=10.11.27.16 \
-e MYSQL_DB=zipkin \
-e MYSQL_TCP_PORT=3306 \
openzipkin/zipkin
docker加速镜像:https://github.com/DaoCloud/public-image-mirror