docker启动redis

下载redis.conf文件

curl下载文件curl -O url

curl -O http://download.redis.io/redis-stable/redis.conf

配置redis.conf文件

bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程(可选),改为yes会使配置文件方式启动redis失败
dir ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)`

启动redis

docker run -d -p 6379:6379 --name redis --restart=always \
-v redis/conf/redis.conf:/etc/redis/redis.conf \
-v redis/data:/data \
redis redis-server /etc/redis/redis.conf --appendonly yes

docker启动RabbitMQ

docker run -d \
--hostname rabbit \
--name rabbit \
-p 15672:15672 \
-p 5672:5672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=123456 \
rabbitmq

docker启动tomcat

docker run -d --name=tomcat -p 8080:8080 \
-v /usr/local/webapps:/usr/local/tomcat/webapps \
tomcat:9-jdk8

docker启动nginx

docker run -d --name nginx --restart always \
--network=proxy-net -p 80:80 -p 443:443 \
-v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /usr/local/nginx/cert:/etc/nginx/cert:ro \
nginx

docker启动zipkin

docker run -d -p 9411:9411 openzipkin/zipkin

docker启动nacos-server

docker-compose启动

  • docker-compose.yaml 单机模式启动
version: "2"
services:
  nacos:
    image: nacos/nacos-server:latest
    container_name: nacos
    environment:
    - PREFER_HOST_MODE=hostname
    - MODE=standalone
    - SPRING_DATASOURCE_PLATFORM=mysql
    - MYSQL_SERVICE_HOST=host.docker.internal
    - MYSQL_SERVICE_PORT=3306
    - MYSQL_SERVICE_DB_NAME=nacos_config
    - MYSQL_SERVICE_USER=root
    - MYSQL_SERVICE_PASSWORD=root
    - NACOS_AUTH_ENABLE=true
    - NACOS_AUTH_IDENTITY_KEY=nacos_auth_identity_key
    - NACOS_AUTH_IDENTITY_VALUE=QXBtejlBT2NTQ2k4aWtVNnl6bm5CMzZSdU10QzhXQWhRdDF1ZmdlVUtCN2dwa09QUklKOFMyeTFFTlZoZnN4Vg==
    - NACOS_AUTH_TOKEN=OXVMRnozbFFNNjdVTW1adXlvYThrdVR6dVVCTDhVT3I0UmhNaUdPbVluNmpPZ2paNWxYc21CSjg1UjlzMmd5TA==
    volumes:
    - ./logs/:/home/nacos/logs
    restart: always
    ports:
    - "8848:8848"

docker方式启动

启动单机模式的 Nacos 连接宿主机的 MySQL,并启用 Auth 认证。

docker run -d \
--name nacos \
-p 8848:8848 -p 9848:9848 \
--restart=always \
-e PREFER_HOST_MODE=hostname \
-e MODE=standalone \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_AUTH_IDENTITY_KEY=nacos_auth_identity_key \
-e NACOS_AUTH_IDENTITY_VALUE=$(LC_ALL=C tr -dc "[:alnum:]" < /dev/urandom | head -c 64 | base64) \
-e NACOS_AUTH_TOKEN=$(LC_ALL=C tr -dc "[:alnum:]" < /dev/urandom | head -c 64 | base64) \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=host.docker.internal \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-v $HOME/nacos/logs/:/home/nacos/logs \
nacos/nacos-server:v2.4.2.1-slim

docker启动gitlab

 sudo docker run -d \
     --hostname local.gitlab.com \
     --name gitlab \
     --restart always \
     -p 30000:22 -p 80:80 \
     -v $HOME/gitlab/data:/var/opt/gitlab \
     -v $HOME/gitlab/logs:/var/log/gitlab \
     -v $HOME/gitlab/config:/etc/gitlab \
     gitlab/gitlab-ce

启动后需要在hosts文件中配上映射127.0.0.1 local.gitlab.com
然后http访问这个域名即可。ssh的22端口已被占用,所有要换个端口。其实ssh的访问方式我并没有搞成功,看其他的文章说22,443端口还需要证书等,而我这个本地的服务也是临时使用也就没有继续研究下去。如果又知道的可以评论里说下,在此感谢!

后续:之后闲下来又找了些文章看了看,ssh的是可以通过nginx代理去实现的,同样的https也是一样。

docker启动webdav服务

Github: BytemarkHosting

建议不使用自签名ssl,使用自己的证书在nginx中做代理,也就是请求nginx用https,代理到服务时使用http即可。

docker run -d --name webdav --restart always \
--network proxy-net \
-v /srv/dav:/var/lib/dav \
-e AUTH_TYPE=Basic \
-e USERNAME=alice \
-e PASSWORD=secret1234 \
bytemark/webdav

这个服务我未指定暴露的端口,并将其与nginx放在同一个网络下,如此nginx代理时就可以使用http://{service-name}:{service-port}这样的方式代理(只针对nginx也是容器启动,若正常编译安装的nginx则还是需要暴露端口再代理。)

离线docker使用镜像

在公网环境下载镜像

  • 保存镜像为压缩包(保存到当前目录)
docker save -o nginx.tar.gz nginx:latest
  • 上传压缩包到内网环境中
  • 载入压缩包中的镜像
docker load -i nginx.tar.gz

使用Dockerfile编译镜像

根据Dockerfile语法编译镜像,目前本人还只能在原有镜像基础上修改,还不能从零编译一个镜像。

docker启动oracle数据库

使用的镜像:https://hub.docker.com/r/gvenzl/oracle-xe

创建挂载卷保存数据:

docker volume create oracle-volume

使用11g精简版启动镜像 (下载后约554MB)

docker run --name oracle11g \
 -d -p 1521:1521 \
 -e ORACLE_PASSWORD=oracle \
 -v oracle-volume:/u01/app/oracle/oradata \
 gvenzl/oracle-xe:11-slim

镜像的默认参数如下,如要更改可参考镜像仓库的描述自行更改。

hostname: localhost
port: 1521
sid: xe
username: system
password: oracle

如果想改用户名(18c之前的镜像无法更改用户名),可以使用同作者的另外一个镜像 https://hub.docker.com/r/gvenzl/oracle-free

使用 slim 精简版启动镜像 (下载后约1.83GB)

docker run -d --name oracle-free \
-p 1521:1521 \
-e ORACLE_PASSWORD=oracle \
-e APP_USER=bennett \
-e APP_USER_PASSWORD=oracle \
-v oracle-volume:/opt/oracle/oradata \
gvenzl/oracle-free:slim

如此启动后的连接参数如下:

hostname: localhost
port: 1521
service name: FREEPDB1
username: bennett
password: oracle

docker启动redis集群

此方法有问题,集群可以搭建好但节点无法访问(密码的问题),暂时尚未解决。

这里我使用了docker compose启动。

  • docker-compose.yml
version: "3"
services:
  redis-6371:
    image: redis:latest
    container_name: redis-6371
    ports:
      - "6371:6379"
    volumes:
      - ./6371/conf/redis.conf:/etc/redis/redis.conf
      - ./6371/data:/data
    networks:
      - redis-cluster
    command: redis-server /etc/redis/redis.conf
  redis-6372:
    image: redis:latest
    container_name: redis-6372
    ports:
      - "6372:6379"
    volumes:
      - ./6372/conf/redis.conf:/etc/redis/redis.conf
      - ./6372/data:/data
    networks:
      - redis-cluster
    command: redis-server /etc/redis/redis.conf
  redis-6373:
    image: redis:latest
    container_name: redis-6373
    ports:
      - "6373:6379"
    volumes:
      - ./6373/conf/redis.conf:/etc/redis/redis.conf
      - ./6373/data:/data
    networks:
      - redis-cluster
    command: redis-server /etc/redis/redis.conf
  redis-6374:
    image: redis:latest
    container_name: redis-6374
    ports:
      - "6374:6379"
    volumes:
      - ./6374/conf/redis.conf:/etc/redis/redis.conf
      - ./6374/data:/data
    networks:
      - redis-cluster
    command: redis-server /etc/redis/redis.conf
  redis-6375:
    image: redis:latest
    container_name: redis-6375
    ports:
      - "6375:6379"
    volumes:
      - ./6375/conf/redis.conf:/etc/redis/redis.conf
      - ./6375/data:/data
    networks:
      - redis-cluster
    command: redis-server /etc/redis/redis.conf
  redis-6376:
    image: redis:latest
    container_name: redis-6376
    ports:
      - "6376:6379"
    volumes:
      - ./6376/conf/redis.conf:/etc/redis/redis.conf
      - ./6376/data:/data
      - ./run-add-cluser.sh:/bin/run-add-cluster.sh
    networks:
      - redis-cluster
    depends_on:
      - redis-6371
      - redis-6372
      - redis-6373
      - redis-6374
      - redis-6375
    command: run-add-cluster.sh

networks:
  redis-cluster:
    external: true
    name: redis-cluster

6个节点文件夹中放入对应的配置文件redis.conf,示例如下:

port 6379
requirepass <password>
masterauth <password>
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
#cluster-announce-ip用的是容器的名称,6个配置文件只需要改这个即可
cluster-announce-ip redis-6376
cluster-announce-port 6379
cluster-announce-bus-port 16379

首先使用docker network create redis-cluster创建一个集群网络,然后使用docker network inspect redis-cluster查看Gateway确定这个网络的IP段。

所有容器启动后将节点加入到集群中的脚本run-add-cluster.sh:

#!/bin/bash

redis-server /etc/redis/redis.conf

redis-cli -a <password> --cluster create 172.18.0.2:6379 172.18.0.3:6379 172.18.0.4:6379 172.18.0.5:6379 172.18.0.6:6379 172.18.0.7:6379 --cluster-replicas 1

将脚本中的集群节点IP改为自己的网段IP,IP的最后一位一般不需要修改,大多数情况下都是分配2~6的IP(由于加节点时不能使用hostname:port方式,所以只能采取预测IP的方式。)

准备工作做完了,就可以使用docker-compose up -d或者docker compose up -d启动集群服务了。前者需要使用pip安装pip install docker-compose,后者需要查看自己的docker是否支持Compose(docker info)

Client:
 Context:    desktop-linux
 Debug Mode: false
 Plugins:
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  compose: Docker Compose (Docker Inc., 2.0.0-beta.4)
  scan: Docker Scan (Docker Inc., v0.8.0)