Skip to content

windows 版 docker 的安装

image-20230620231945485

安装完之后 需要重启 重启后 如果报错 error 0x80370114 需要开启 一个设置

(71条消息) WIN11按照官方文档安装WSL2时出现error 0x80370114_半路杀出来的小黑同学的博客-CSDN博客

image-20230621000144471

UNIX username: glls

password: 123456 输入密码的时候 密码不显示

然后 下载 Install Docker Desktop on Windows | Docker Documentation

image-20230621000442650

运行 安装软件

image-20230621000622855

设置 docker 镜像存储位置,要不然 会存储在C盘

image-20230621183501750

设置 docker 镜像仓库地址

image-20230621183605220

shell
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "dns": [
    "8.8.8.8",
    "8.8.4.4"
  ],
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://hx20l8lh.mirror.aliyuncs.com",
    "https://2lqq34jg.mirror.aliyuncs.com",
    "https://pee6w651.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com"
  ]
}

安装 mysql

安装镜像

shell
docker pull mysql:5.7

根据镜像 启动容器

在D:/myworksoft/windowsdocker/mysql57/conf 目录下 创建my.cnf文件

shell
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
lower_case_table_names=1
init_connect='SET collation_connection=utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
log-bin=mysql-bin
binlog-format=ROW
server_id=1
shell
docker run --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 -v D:/myworksoft/windowsdocker/mysql57/conf/my.cnf:/etc/mysql/my.cnf -v D:/myworksoft/windowsdocker/mysql57/data:/var/lib/mysql -v D:/myworksoft/windowsdocker/mysql57/log:/var/log/mysql -p 3308:3306 -d c20987f18b13

安装rabbitmq,

准备 docker-compose.yml

shell
version: "3.1"
services:
  rabbitmq:
    image: rabbitmq:management
    restart: always
    container_name: rabbitmq
    ports:
      - 5672:5672     #rabbitmq  服务的端口号
      - 15672:15672   # rabbitmq 图形化界面的端口号
    volumes:
      - ./data:/var/lib/rabbitmq

安装rocketmq

shell
version: '3.1'
services:
  rmqnamesrv:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    volumes:
      - D:\myworksoft\windowsdocker\rocketmq\logs:/home/rocketmq/logs
    environment:
      JAVA_OPT_EXT: "-Xms512M -Xmx512M -Xmn128m"
    command: sh mqnamesrv
    networks:
        rmq:
          aliases:
            - rmqnamesrv
  broker:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker
    ports:
      - 10909:10909
      - 10911:10911
    environment:
      NAMESRV_ADDR: "rmqnamesrv:9876"
      JAVA_OPT_EXT: "-Xms512M -Xmx512M -Xmn128m"	
    volumes:
      - D:\myworksoft\windowsdocker\rocketmq\logs:/home/rocketmq/logs
      - D:\myworksoft\windowsdocker\rocketmq\store:/home/rocketmq/store
      - D:\myworksoft\windowsdocker\rocketmq\conf\broker.conf:/home/rocketmq/broker.conf
    command: sh mqbroker -c /home/rocketmq/broker.conf -n rmqnamesrv:9876
    depends_on:
      - rmqnamesrv
    networks:
      rmq:
        aliases:
          - rmqbroker
    
  rmqdashboard:
    image: apacherocketmq/rocketmq-dashboard:1.0.0
    container_name: rocketmq-dashboard
    ports:
      - 8888:8080
    environment:
      JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
    depends_on:
      - rmqnamesrv
    networks:
      rmq:
        aliases:
          - rmqdashboard
networks:
  rmq:
    name: rmq
    driver: bridge

broker.conf

shell
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH

#nameServer地址,分号分割
namesrvAddr=127.0.0.1:9876
#Broker 对外服务的监听端口
#listenPort=10911
#Broker监听的ip   注意  下面这个写法  这里有个巨坑   这里 不能写127.0.0.1    不知道为什么
brokerIP1=192.168.200.1


#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
#autoCreateSubscriptionGroup=true
#删除文件时间点,默认凌晨 4点
#deleteWhen=04
#文件保留时间,默认 48 小时
#fileReservedTime=120
#commitLog每个文件的大小默认1G
#mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
#mapedFileSizeConsumeQueue=300000

#enablePropertyFilter=true
#第一次回查的 时间间隔    3秒
#transactionTimeout=3000
#回查次数  默认15 次  这里设置成5次   达到最大回查次数 仍然没有返回 提交 或者 回滚状态, 则 按照回滚处理
#transactionCheckMax=5
#每隔两秒  回查一次
#transactionCheckInterval=2000

安装redis

创建 conf , data目录 , conf 下面 创建 redis.conf 文件

shell
version: '3.1'
services:
  redis:
    image: daocloud.io/library/redis:5.0.9
    #restart: always
    container_name: redis
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 6379:6379
    volumes:
      - ./conf/redis.conf:/usr/local/redis/redis.conf
      - ./data:/data
    command: ["redis-server","/usr/local/redis/redis.conf"]

安装elk

这里先装 el 吧 k 后续用到了再装

image-20230628223617698

shell
version: "3.1"
services:
 elasticsearch:
  image: daocloud.io/library/elasticsearch:7.4.2
  #restart: always
  container_name: elasticsearch
  environment:
     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  volumes:
     - D:/myworksoft/windowsdocker/elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
     - D:/myworksoft/windowsdocker/elk/elasticsearch/data:/usr/share/elasticsearch/data
     - D:/myworksoft/windowsdocker/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
  ports:
     - 9200:9200
     - 9300:9300
 kibana:
   image: kibana:7.4.2
   #restart: always
   container_name: kibana
   ports:
     - 5601:5601
   environment:
     - elasticsearch_url=http://127.0.0.1:9200
   depends_on:
     - elasticsearch

注意 elasticsear.yml 文件的编码 必须是 utf-8

安装mongodb

shell
docker run -d --name mongo27017 -p 27017:27017 -v D:/myworksoft/windowsdocker/mongodb/data:/data/db  mongo

如果 本地 的 mongodb 和 容器的 mongodb 同时 启动 ,则 优先访问的是 本地的 mongodb 服务,把本地mongodb 服务停止 则会访问 容器mongodb

image-20230621232546607

安装nacos

1.拉去镜像

shell
docker pull nacos/nacos-server

2.创建 映射的日志目录 与 配置文件

image-20230628000521686

自定义的配置文件customer.properties

shell
# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_SERVER_PORT:8848}
spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:mysql}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://127.0.0.1:3308/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
#db.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3308}/${MYSQL_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
### The auth system to use, currently only 'nacos' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
 
 
### The token expiration in seconds:
nacos.core.auth.default.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
 
### The default token:
nacos.core.auth.default.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}
 
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
 
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D
# default current work dir
server.tomcat.basedir=
## spring security config
### turn off security
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
 
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

management.endpoints.web.exposure.include=*

3.把mysql 数据库准备好

image-20230628000603438

根据镜像 启动容器

shell

docker run -d -p 8848:8848 -p 9848:9848 -p9849:9849 -e MODE=standalone -e PREFER_HOST_MODE=hostname -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=512m  -v D:/myworksoft/windowsdocker/nacos/custom.properties:/home/nacos/init.d/custom.properties -v D:/myworksoft/windowsdocker/nacos/logs:/home/nacos/logs --name nacos nacos/nacos-server

测试访问

image-20230628000739785

安装emqx

shell
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.0.26

端口号:1883

账号:admin

密码:public

可视化地址:http://110.40.192.129:18083/

安装nginx

shell
version: '3.1'
services:
  nginx:
    #restart: always
    image: daocloud.io/library/nginx:latest
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - D:/myworksoft/windowsdocker/nginx/conf.d/:/etc/nginx/conf.d

在conf.d 文件夹 准备 default.conf

java
# 这个是 /etc/nginx/conf.d/default.conf;   这个配置文件  大部分内容被注释掉了   把注释掉的内容去掉
server {    # server 块是http 块中的 内容
    listen       80;    # nginx 默认监听的端口号
    listen  [::]:80;    
    server_name  localhost;  # ip 
	
	# location块
	# root:将接收到的请求根据/usr/share/nginx/html去查找静态资源
	# index: 默认去上述的路径中找到index.html或者index.htm
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

 	
    #50x 错误页面跳转 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

潘多拉 (Pandora)

github

安装Pandora 本地chatgpt 服务

🔰 安全VPN推荐(排名前3):

1.ExpressVPN:https://bittly.cc/expressvpn

2.Surfshark :https://bittly.cc/Surfshark

3.NordVPN:https://bittly.cc/NordVPN

shell
docker pull pengzhile/pandora

docker run  -e PANDORA_CLOUD=cloud -e PANDORA_SERVER=0.0.0.0:8899 -p 8899:8899 -d pengzhile/pandora

安装canal

启动不了 还未解决 暂时用 windows 版的canal

shell
#拉取镜像
docker pull canal/canal-server
#先跑起来容器
docker run --name canal -p 11111:11111  -d canal/canal-server
#把容器内的配置文件拿出来
docker cp canal:/home/admin/canal-server/conf/canal.properties D:/myworksoft/windowsdocker/canal/canal-server/
docker cp canal:/home/admin/canal-server/conf/example/instance.properties D:/myworksoft/windowsdocker/canal/canal-server/
#删除容器  重新构件容器
docker run --name canal -p 11111:11111 -v D:/myworksoft/windowsdocker/canal/canal-server/instance.properties:/home/admin/canal-server/conf/example/instance.properties -v D:/myworksoft/windowsdocker/canal/canal-server/canal.properties:/home/admin/canal-server/conf/canal.properties -d 0c7f1d62a7d8e6796fb5e9e99a39b983dd225d2f8505975e92fe8ebc4956dfc6

mysql设置

shell
create user canal identified by 'canal';
grant select,replication slave, replication client on *.* to 'canal'@'%';
flush privileges;

# 查看bin-log是否开启 on: 开启 off: 关闭
show variables like 'log_bin';

my.cnf

shell
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

# start binlog
log-bin=mysql-bin   # 开启 binlog
binlog-format=ROW     # 选择 ROW 模式
server_id=1    # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

安装gitlab

shell
#拉取镜像
docker pull gitlab/gitlab-ce
#根据镜像启动容器
$ docker run -d  -p 444:443 -p 98:80 -p 222:22 --name gitlab --restart always   -v D:/myworksoft/windowsdocker/gitlab/config:/etc/gitlab -v D:/myworksoft/windowsdocker/gitlab/logs:/var/log/gitlab -v D:/myworksoft/windowsdocker/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
# -d:后台运行
# -p:将容器内部端口向外映射
# --name:命名容器名称
# -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
#$ docker run -d  -p 444:443 -p 98:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v #/home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce


安装完之后  可以 登录 使用  root  初始密码 需要查询下面这个文件
image-20231202144431643

登录进去之后 创建工程 发现 工程的地址 是 docker 容器主机名称 ,需要把主机名称 改成 ip 的形式 怎么改?

修改gitlab.rb 这个文件,建议 在容器内部修改

image-20231202144616283

编辑这个文件 里面填上这三个配置

image-20231202144808733
shell
# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://192.168.200.1'

# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '192.168.200.1'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口
:wq #保存配置文件并退出

然后 就可以 克隆了

如果想用docker-compose 的话

shell
version: '3.1'
services:
  zendao:
    image: gitlab/gitlab-ce
    #restart: always
    container_name: gitlab
    ports:
      - 444:443
      - 98:80
      - 222:22
    volumes:
      - ./config:/etc/gitlab
      - ./data:/var/opt/gitlab
      - ./logs:/var/log/gitlab

安装postgresql

shell
version: '3.1'
services:
 postgres:
  image: postgres:12-alpine
  container_name: xybdiy_postgres
  #restart: always
  environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: 123456
  ports:
    - 5432:5432
  volumes:
    - ./data:/var/lib/postgresql/data

安装禅道

准备好 挂载的容器卷目录

shell
version: '3.1'
services:
  zendao:
    image: docker.io/idoop/zentao:latest
    #restart: always
    container_name: zendao
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - 8000:80
    volumes:
      - ./app:/app/zentaopms
      - ./data:/var/lib/mysql

admin 123456 登录 然后修改密码 看到如下页面

image-20231202152418468

问题:

Docker: Error response from daemon: Ports are not available 端口没被占用,却显示被占用

(71条消息) Docker: Error response from daemon: Ports are not available 端口没被占用,却显示被占用_比特桃的博客-CSDN博客

问题解决

其实这是Windows中的一个小问题,只需要重启NAT网络就可以解决了,执行如下两条命令:

shell
net stop winnat
net start winnat