Docker的Allinone环境

卖萌小老头
2022-10-01 / 1 评论 / 397 阅读 / 正在检测是否收录...

本地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
0

评论 (1)

取消
  1. 头像
    执念
    Windows 10 · Google Chrome

    docker加速镜像:https://github.com/DaoCloud/public-image-mirror

    回复