一、Docker的基本使用和管理

1.1. Docker镜像操作

  • 搜索镜像 docker search keyword

  • 获取镜像 docker pull imageName

  • 查看镜像信息 docker iamges

    • REPOSITORY:镜像所属的仓库

    • TAG:镜像的标签信息,用于标记同一仓库的不同镜像

      为了方便使用镜像,可以使用docker tag 名称:[标签] 新名称:[新标签]

    • IMAGE ID:镜像的唯一ID号

    可通过ID号来获取对应镜像信息:docker inspect id

  • 删除镜像 docker rmi 仓库名称:标签 | ID号

  • 存出镜像 docker save -o 存出文件名 存出的镜像

  • 载入镜像 docker load < | -i 目标镜像文件

  • 上传镜像

    • 打上私有的标签 docker tag 名称:[标签] 新名称:[新标签]
    • 上传 docker push 仓库名称:标签

1.2 Docker容器操作

  • 创建 docker create [OPTIONS] 镜像 运行的程序

    docker crate -it hivemq/hivemq4 /bin/bash

    • -i:让容器的输入保持打开状态
    • -t:让Docker分配一个伪终端
  • 查看容器运行状态 docker ps -a
  • 启动容器 docker start 容器ID | 名称
  • 创建并运行容器 docker [OPTIONS] run 仓库名称:标签
    • -d 后台运行
    • –name:自定义一个名称
    • -p:指定端口映射,指定容器端口映射到主机端口,主机端口:容器端口
    • -P:随机端口映射,容器内部端口映射到主机的一个随机端口
    • -e:设置相关环境变量
    • TZ:设置容器内时区,例如TZ="Asia/Shanghai"
    • -v:设置数据卷
      • 创建数据卷:-v 目录
      • 创建数据卷并挂载到主机目录: -v 宿主机目录:容器数据卷目录
      • 挂载数据卷容器:--volumes-from 容器名
  • 容器的进入 docker exec -it 容器ID | 名称 /bin/bash

    容器是一个与其中运行的shell命令共存亡的众安,shell命令运行则容器运行,shell命令停止则容器停止,使用exit命令会在退出容器的同时关闭容器(但可以docker ps、docker restart恢复),所以使用ctrl+P & ctrl + Q可以退出容器

  • 容器终止运行 docker stop 容器ID | 名称
  • 容器导出 docker export 容器ID | 名称 > 文件名
  • 容器导入 cat 文件名 | docker import - 生成镜像名称:标签
  • 容器的删除 docker rm 容器ID | 名称

1.3 容器拷贝文件

  • 从容器复制文件到主机
    1
    docker cp 023ed1bab:usr/local/tomcat/README.md ./
  • 从主机复制文件到容器
    1
    docker cp ./README.md 023ed1bab:usr/local/tomcat/

1.4 容器重命名

1
docker rename oldname newname

1.5 更新现有容器的重启策略

1
docker update --restart=<策略选项> <容器名称或ID>

<策略选项> 替换为 noalwayson-failureunless-stopped 中的一个,根据需求选择

  • no:容器不会自动重启(默认值)。
  • always:容器总是在退出时重启。
  • on-failure:仅当容器以非零状态退出时才重启。
  • unless-stopped:容器总是在退出时重启,除非它已被手动停止。



二、Docker安装常用应用

2.1 docker 安装 kafka

2.1.1 安装 zookeeper

1
2
3
4
5
6
7
docker run -d \
--restart=always --log-driver json-file \
--log-opt max-size=100m \
--log-opt max-file=2 \
--name zookeeper-test -p 21811:2181 \
-v /etc/localtime:/etc/localtime \
wurstmeister/zookeeper:latest

2.1.2 安装 kafka

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run -d \
--restart=always \
--log-driver json-file \
--log-opt max-size=100m \
--log-opt max-file=2 \
--name kafka-test \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.124.248:21811 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.124.248:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-v /etc/localtime:/etc/localtime \
wurstmeister/kafka:latest

2.2 安装gogs

1
docker run -d -p 10022:22 -p 13000:3000 -v /data/gogs:/data --name gogs-test gogs/gogs:0.13

2.3 安装 EMQX

1
2
3
4
5
6
7
8
docker run -d \
-v E:/codebase/Link5g/Iot-hub/local/emqx_auth_http.conf:/opt/emqx/etc/plugins/emqx_auth_http.conf \
-v E:/codebase/Link5g/Iot-hub/local/emqx_retainer.conf:/opt/emqx/etc/plugins/emqx_retainer.conf \
-v E:/codebase/Link5g/Iot-hub/local/emqx_auth_username.conf:/opt/emqx/etc/plugins/emqx_auth_username.conf \
-v E:/codebase/Link5g/Iot-hub/local/emqx.conf:/opt/emqx/etc/emqx.conf \
-p 11883:11883 -p 18083:18083 -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8084:8084 -p 8883:8883 \
--name emqx-local \
emqx/emqx:4.2.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run -d 
-v E:/codebase/Link5g/Iot-hub/local-link5g-dmp/emqx_auth_http.conf:/opt/emqx/etc/plugins/emqx_auth_http.conf
-v E:/codebase/Link5g/Iot-hub/local-link5g-dmp/emqx_retainer.conf:/opt/emqx/etc/plugins/emqx_retainer.conf
-v E:/codebase/Link5g/Iot-hub/local-link5g-dmp/emqx_auth_username.conf:/opt/emqx/etc/plugins/emqx_auth_username.conf
-v E:/codebase/Link5g/Iot-hub/local-link5g-dmp/emqx.conf:/opt/emqx/etc/emqx.conf
-p 31883:11883
-p 38084:18083
-p 3883:1883
-p 38081:8081
-p 38083:8083
-p 38085:8084
-p 38883:8883
--name emqx-local-link5g-dmp
emqx/emqx:4.2.0

2.4 安装Mysql

1
2
3
4
5
6
7
8
9
10
11
!#/bin/bash
sudo docker run \
--name mysql \
-d --restart always \
-p 33060:3306 \
-v /data/mysql/logs:/var/log \
-v /data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=xyJB5z^4%kZKVK \
mysql:5.7.35

docker run --name mysql3307 -d --restart always -p 33060:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7.35

2.5 安装ES

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker network create itmentu-net

docker run -d \
--name elasticsearch \
--memory=2g
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network itmentu-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1

docker 部署ES时一定要限制内存

2.6 安装Postgres

1
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

2.7 安装Hoppscotch

  • .env
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#-----------------------Backend Config------------------------------#
# Prisma Config
DATABASE_URL=postgresql://postgres:admin@10.92.137.168:5432/hoppscotch

# Auth Tokens Config
JWT_SECRET=sec*dfa12co1de1#
TOKEN_SALT_COMPLEXITY=10
MAGIC_LINK_TOKEN_VALIDITY=3
REFRESH_TOKEN_VALIDITY=604800000
ACCESS_TOKEN_VALIDITY=86400000
SESSION_SECRET=anotasdfa#ecretas&dfd

# Hoppscotch App Domain Config
REDIRECT_URL=http://localhost:3000
WHITELISTED_ORIGINS=http://localhost:3170,http://localhost:3000,http://localhost:3100
VITE_ALLOWED_AUTH_PROVIDERS=GOOGLE,GITHUB,MICROSOFT,EMAIL

# Google Auth Config
GOOGLE_CLIENT_ID=*****
GOOGLE_CLIENT_SECRET=*****
GOOGLE_CALLBACK_URL=http://localhost:3170/v1/auth/google/callback
GOOGLE_SCOPE=email,profile

# Github Auth Config
GITHUB_CLIENT_ID=*****
GITHUB_CLIENT_SECRET=****
GITHUB_CALLBACK_URL=http://localhost:3170/v1/auth/github/callback
GITHUB_SCOPE=user:email

# Microsoft Auth Config
MICROSOFT_CLIENT_ID=*****
MICROSOFT_CLIENT_SECRET=*****
MICROSOFT_CALLBACK_URL=http://localhost:3170/v1/auth/microsoft/callback
MICROSOFT_SCOPE=user.read
MICROSOFT_TENANT=common

# Mailer config
MAILER_SMTP_URL=smtps://user@domain.com:pass@smtp.domain.com
MAILER_ADDRESS_FROM=from@example.com

# Rate Limit Config
RATE_LIMIT_TTL=60
RATE_LIMIT_MAX=100

#-----------------------Frontend Config------------------------------#

# Base URLs
VITE_BASE_URL=http://localhost:3000
VITE_SHORTCODE_BASE_URL=http://localhost:3000
VITE_ADMIN_URL=http://localhost:3100

# Backend URLs
VITE_BACKEND_GQL_URL=http://localhost:3170/graphql
VITE_BACKEND_WS_URL=wss://localhost:3170/graphql
VITE_BACKEND_API_URL=http://localhost:3170/v1

# Terms Of Service And Privacy Policy Links (Optional)
VITE_APP_TOS_LINK=https://docs.hoppscotch.io/support/terms
VITE_APP_PRIVACY_POLICY_LINK=https://docs.hoppscotch.io/support/privacy

ENABLE_SUBPATH_BASED_ACCESS=false
  • 初始化数据库
1
2
3
docker run -it --entrypoint sh --env-file .env hoppscotch/hoppscotch 

pnpx prisma migrate deploy
  • 移除初始化生成的contailer、安装应用容器
1
docker run -d --name hoppscotch -p 3000:3000 -p 3100:3100 -p 3170:3170 --env-file .env --restart unless-stopped hoppscotch/hoppscotch
  • 安装代理
1
docker run -d --name hoppscotch-proxy -p 9159:9159  hoppscotch/proxyscotch
  • 初始化数据库
1
2
3
docker run -it --entrypoint sh --env-file hoppscotch.env hoppscotch/hoppscotch

pnpx prisma migrate deploy
  • docker-compose 安装
1
docker compose up -d