Docker 部署服务🔥

2023/9/26 dockercontainer

docker 修改镜像源

## ubuntu
# 修改镜像源
sed -i 's|http://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g; s|http://deb.debian.org/debian-security|https://mirrors.tuna.tsinghua.edu.cn/debian-security|g' /etc/apt/sources.list.d/debian.sources
# 删除apt配置文件,防止自动清理docker包
rm -f /etc/apt/apt.conf.d/docker-clean
# 更新软件包列表
apt update
1
2
3
4
5
6
7

docker 清理

# 删除未使用的镜像
docker image prune

# 删除未使用的数据卷
docker volume prune

# 清理构建缓存(/var/lib/docker/overlay2)
docker builder prune

# 删除所有未使用的网络
docker network rm $(docker network ls -q)

# 进入磁盘管理
diskpart

# 查看虚拟磁盘
select vdisk file="D:\Ubuntu\ext4.vhdx"

# 挂载磁盘
attach vdisk readonly

# 压缩磁盘
compact vdisk

# 卸载磁盘
detach vdisk

# 退出
exit

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

Centos7部署docker

cat /etc/issue

uname -r

cat /proc/version

cat /etc/redhat-release

yum install -y yum-utils   device-mapper-persistent-data   lvm2

yum-config-manager     --add-repo     https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

cat /etc/yum.repos.d/docker-ce.repo

yum install docker-ce docker-ce-cli containerd.io

yum list docker-ce --showduplicates | sort -r

docker --version

systemctl start docker

docker info

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose


service docker start 

service docker restart 

service docker stop
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

Ubuntu部署docker

apt update

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

apt-get install docker-ce docker-ce-cli containerd.io

usermod -aG docker $USER

systemctl start docker

apt-get -y install apt-transport-https ca-certificates curl software-properties-common

service docker restart

service docker status
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

更新容器时间

docker cp /etc/localtime 容器名称:/etc

docker cp /usr/share/zoneinfo/Asia/Shanghai 容器名称:/etc/localtime
1
2
3

docker 常用命令

# 查看镜像
docker images

# 使用dockerfile构建镜像
docker build -t 镜像名称 -f ./Dockerfile --no-cache .

# 运行容器
docker run -itd --name 容器名称 镜像名称

# 查看容器
docker ps -a

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx

# 导出镜像
docker export b11b952e3d1ed9737a58cd0df78d08defb3e5f962fbd44c36fcecdb1a5886f4d > image.tar

# 导入镜像
cat image.tar | docker import - 镜像名称

# 查看容器执行命令
docker ps -a --no-trunc
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

部署mobsf

docker pull opensecurity/mobile-security-framework-mobsf

docker run -itd -p 8001:8000 --name mobsf_test opensecurity/mobile-security-framework-mobsf:latest
1
2
3

部署portainer

# 旧版本
docker run -d -p 9000:9000 --name portainer --restart always portainer/portainer -H tcp://xx.xx.xx.xx:2375

docker run -d -p 9000:9000 --name portainer --restart always portainer/portainer

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

# 新版本
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce:2.21.0

netsh interface portproxy add v4tov4 listenport=2375 connectaddress=127.0.0.1 connectport=2375 listenaddress=xx.xx.xx.xx protocol=tcp
1
2
3
4
5
6
7
8
9
10
11

部署Yapi

docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi

mkdir -p /data/yapi/mongodata

docker run --restart always -v /data/yapi/mongodata:/data/db -d --name yapimongo mongo

docker run -it --rm --link yapimongo:mongo --entrypoint npm --workdir /api/vendors registry.cn-hangzhou.aliyuncs.com/anoy/yapi run install-server
## 初始化管理员账号成功,账号名:"admin@admin.com",密码:"ymfe.org" 

docker run -d --restart=always --name yapi --link yapimongo:mongo --workdir /api/vendors -p 3001:3000 registry.cn-hangzhou.aliyuncs.com/anoy/yapi server/app.js 

#### 禁用注册
docker exec  -it yapi /bin/sh

vi ../config.json 

#修改内容如下
{
  "port": "3000",
  "adminAccount": "admin@admin.com",
  "closeRegister":true, #主要是添加这句配置
  "db": {
    "servername": "mongo",
    "DATABASE": "yapi",
    "port": 27017
  }
}
#保存后退出

exit #退出容器

docker restart yapi #重启服务

###禁用注册后怎么添加用户呢,登录yapi,然后添加一个项目,增加一个注册用户接口

地址为:http://yapi:端口/api/user/reg

POST json

{
  "email": "xx@xxx.com",
  "password": "xxx@xxx.com",
  "username": "xxxx"
}

### 直接部署注意点
# 1. 需要修改配置文件
mkdir /etc/supervisor.d
{ \
    echo "[program:yapi]"; \
    echo "command=node server/app.js"; \
    echo "directory=/opt/yapi/vendors"; \
    echo "user=root"; \
    echo "autostart=true"; \
    echo "autorestart=true"; \
    echo "startretries=3"; \
} > /etc/supervisor.d/yapi.ini

# 2. 安装supervisor
supervisorctl reread
supervisorctl add yapi
supervisorctl status
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
62

制作Yapi Dockerfile

FROM node:9-alpine

# 工作目录设置为 /opt
WORKDIR /opt

# 上传本地文件到容器
COPY yapi.tar.gz /opt

# 解压并删除压缩文件
RUN tar -xzf yapi.tar.gz && \
    rm yapi.tar.gz && \
    npm set strict-ssl false && \
    npm config set registry https://registry.npm.taobao.org && \
    npm install -g npm@6.14.18 && \
    node -v && npm -v && \
    npm cache clean --force && \
    npm install -g string-width@^4.2.0 yapi-cli ykit@0.8.13 && \
    npm cache clean --force

# 覆盖配置文件
COPY config.json /opt/yapi/config.json

# 切换工作目录
WORKDIR /opt/yapi/vendors


# 重新编译客户端
RUN npm run build-client && npm cache clean --force

# 使容器在启动时运行 npm run start
CMD ["npm", "run", "start"]

# 构建镜像
# docker build --no-cache -t jack/yapi .

# 开发环境
# docker run -itd --name yapi-dev -p 3000:3000 jack/yapi

# 备份/还原镜像
# docker save -o jack_yapi.tar jack/yapi
# docker load -i jack_yapi.tar

# 测试环境
# docker run -itd --name yapi-test -p 3000:3000 jack/yapi
# docker cp config.json yapi-test:/opt/yapi
# docker restart yapi-test

# 创建用户
# use admin
# db.createUser({user: "yapi",pwd: "12345678",roles: [{ role: "readWrite", db: "yapi" }]})
# db.dropUser('yapi')

# 初始化数据库索引和管理员账号,管理员账号名可在 config.json 配置
# npm run install-server
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

部署MySQL8.0 并修改认证加密方式

docker pull mysql:8.0

docker run --name mysql8.0 -p 3309:3306 -d mysql:8.0

ALTER USER 'root'@'localhost' IDENTIFIED BY '1q2w3e4r';

FLUSH PRIVILEGES;

CREATE USER 'test'@'%' IDENTIFIED BY 'test123';

GRANT ALL PRIVILEGES ON *.* TO 'test'@'%';

SELECT user, authentication_string, plugin FROM mysql.user WHERE user = 'test';

ALTER USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY 'test123';
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

部署xxl-job-admin

docker pull xuxueli/xxl-job-admin:2.3.1

docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://xx.xx.xx.xx:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&useSSL=false --spring.datasource.username=root --spring.datasource.password=123456" -p 8080:8080 --name xxl-job-admin -d xuxueli/xxl-job-admin:2.3.1

# 打包xxl-job项目后,执行jar包启动executor
java -jar xxl-job-executor-sample-springboot-v2.3.0.jar
1
2
3
4
5
6

部署zookeeper

docker run --name my-zookeeper --env=PATH=/usr/local/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/apache-zookeeper-3.7.0-bin/bin --env=JAVA_HOME=/usr/local/openjdk-11 --env=LANG=C.UTF-8 --env=JAVA_VERSION=11.0.13 --env=ZOO_CONF_DIR=/conf --env=ZOO_DATA_DIR=/data --env=ZOO_DATA_LOG_DIR=/datalog --env=ZOO_LOG_DIR=/logs --env=ZOO_TICK_TIME=2000 --env=ZOO_INIT_LIMIT=5 --env=ZOO_SYNC_LIMIT=2 --env=ZOO_AUTOPURGE_PURGEINTERVAL=0 --env=ZOO_AUTOPURGE_SNAPRETAINCOUNT=3 --env=ZOO_MAX_CLIENT_CNXNS=60 --env=ZOO_STANDALONE_ENABLED=true --env=ZOO_ADMINSERVER_ENABLED=true --env=ZOOCFGDIR=/conf --volume=/data --volume=/datalog --volume=/logs --privileged --workdir=/apache-zookeeper-3.7.0-bin -p 2181:2181 --restart=no --runtime=runc -d zookeeper-3.7.0 /docker-entrypoint.sh zkServer.sh start-foreground
1

部署mongodb集群

# docker run -d -p 27017:27017 --name cmdb-mongodb -e MONGO_INITDB_ROOT_USERNAME=cmdb_mogo -e MONGO_INITDB_ROOT_PASSWORD=cmdb_mogo mongo --replSet rs0

docker run -d -p 27017:27017 --name cmdb-mongodb mongo --replSet rs0

docker run -d -p 27018:27017 --name cmdb-mongodb2 mongo --replSet rs0

config = { _id : "rs0", members : [{_id : 0, host : "172.17.0.16:27017"}]}

rs.initiate(config)

rs.status()

rs.add("172.17.0.18:27017")

use cmdb
db.createUser({user: "cmdb_mogo",pwd: "cmdb_mogo",roles: [ { role: "readWrite", db: "cmdb" },{ role: "readWrite", db: "monstache" } ]})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

部署Qanything常见问题

### Qanything https://github.com/netease-youdao/QAnything/blob/master/README_zh.md
### 安装 docker-compose ###

chmod a+x docker-compose-Linux-x86_64
mv /usr/bin/docker-compose /usr/bin/docker-compose-default
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
ll /usr/bin/docker*
docker-compose --version

Docker容器中使用 Nvidia GPU,报错:docker: Error response from daemon: could not select device driver “” with capabilities: [[gpu]].
### 执行以下命令:###
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
apt-get update

apt-get install nvidia-container-runtime
which nvidia-container-runtime

vim /home/jack/QAnything/scripts/run_for_cloud_option.sh
### 修改如下内容compute_capability值,将 scripts/get_cuda_capability.py 改为 /workspace/qanything_local/scripts/get_cuda_capability.py

# 执行Python脚本,传入设备号,并捕获输出
compute_capability=$(python3 /workspace/qanything_local/scripts/get_cuda_capability.py $gpu_id1)

### 修改qanything-container-local容器内的代码
vim /workspace/qanything_local/qanything_kernel/connector/llm/llm_for_openai_api.py +27

import httpx

proxy_mounts = {
    "http://": httpx.HTTPTransport(proxy="http://127.0.0.1:15777"),
    "https://": httpx.HTTPTransport(proxy="http://127.0.0.1:15777"),
}

client = httpx.Client(
    mounts=proxy_mounts
)


class OpenAILLM(BaseAnswer, ABC):
    model: str = OPENAI_API_MODEL_NAME
    token_window: int = OPENAI_API_CONTEXT_LENGTH
    max_token: int = 512
    offcut_token: int = 50
    truncate_len: int = 50
    temperature: float = 0
    top_p: float = 1.0  # top_p must be (0,1]
    stop_words: str = None
    history: List[List[str]] = []
    history_len: int = 2

    def __init__(self):
        super().__init__()
        self.client = OpenAI(base_url=OPENAI_API_BASE, api_key=OPENAI_API_KEY, http_client=client)


### 执行运行命令 ###
bash ./run.sh -c cloud -i 0 -b default
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

部署Confluence 常见问题

# 拉取镜像,启动容器
docker run --detach --publish 8090:8090 cptactionhank/atlassian-confluence:latest

# 下载替换文件
https://github.com/IAlexEgorov/AtlassianCrack/blob/main/
atlassian-extras-decoder-v2-3.1.1.jar
atlassian-universal-plugin-manager-plugin-4.0.4.jar

# 替换文件
docker cp atlassian-extras-decoder-v2-3.1.1.jar confluence:/opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.4.1.jar
docker cp atlassian-universal-plugin-manager-plugin-4.0.4.jar confluence:/opt/atlassian/confluence/confluence/WEB-INF/atlassian-bundled-plugins/atlassian-universal-plugin-manager-plugin-4.2.6.jar

# 重启容器
docker restart confluence

# 设置license
通过邮箱注册账号,登录官网获取license
例如:
BQT7-QW0J-0FOA-LCZI

AAABlQ0ODAoPeNp1kstu2zAQRff6CgHdtAsFNB3VD4BAXUmB1UhWbClJa3gzUse1bD0IkrLjfH2pM
EbaAFly7uXwzB1+itvGnnFh04lNhlNKpnRke35mU0KvLU8gqLJtfFDI+opDrh06sXyUhSh5LzGvb
bZVh02B9mftA9vDRqH4spnawRGq7qWBFUOpqw1oW/DES3H+p6Xbt4zKAhv5gVgZ8QGF7J+kVtrlb
wRKdGgVGuNq0dU5imR7L7WTOQPrjcC4EvEHmlKaSg6aB8xNKFR5RGPSEyl9DjRzxfZQHJxnqHnVy
W9tp6q2PVwVbX1hmoPcsdg7eTdzuA1Pd/Xtz3XOd9k4i8Pn9jE9Pq32YrZb8Zyu1vua8wdcTtzzQ
ri/1TxM/F/0tGEbZiheQ8jOHBdQI/OSOA5WXjiLjJ4qEDpbtoVK4iWy0GdR6KfBwol0ZK47piMrR
XFEoZXvy2zkLB/JD4fcJDMn8tahadWvymzKDH3A8yXewVdCRmQ8HA6su04UO5D4/gO8RvQC+WFCG
on9j/UXKpvPRzAtAhQYRLZZwM+tOPGo+UjDGC/xnESw0AIVAJcMKzUou0BIltQyhI8VFcD2nKrVX
02jj

# 创建数据库,设置字符集
CREATE DATABASE confluence CHARACTER SET utf8 COLLATE utf8_bin;
use confluence;
SET GLOBAL tx_isolation='READ-COMMITTED';

# 配置数据库
jdbc:mysql://xx.xx.xx.xx:xxxx/confluence?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=UTC
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

DEVOPS 容器部署(Python、Node.js、Nginx、Supervisor、Vue2)

# 使用官方的Python基础镜像
FROM python:3.8-slim-buster

# 定义构建参数
# ARG SERVER_NAME
# ARG LISTEN_PORT

# 将构建参数转换为环境变量
# ENV SERVER_NAME=${SERVER_NAME}
# ENV LISTEN_PORT=${LISTEN_PORT}

# 安装nginx和supervisor
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    apt-get update && apt-get install -y git nginx supervisor curl procps && apt-get clean

# 工作目录设置为/opt/devops
WORKDIR /opt/devops

# 安装Node.js v16.17.0
# RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \
#     apt-get install -y nodejs && \
#     node -v && npm -v
RUN curl -O https://nodejs.org/dist/v16.17.0/node-v16.17.0-linux-x64.tar.xz && \
    tar -xvf node-v16.17.0-linux-x64.tar.xz && \
    mv node-v16.17.0-linux-x64 /usr/local/node && \
    ln -s /usr/local/node/bin/node /usr/local/bin/node && \
    ln -s /usr/local/node/bin/npm /usr/local/bin/npm && \
    node -v && npm -v

# 从Git仓库拉取后端代码
RUN git clone http://zhengxiaojun01:zxj%40123321@10.138.61.72/src/testgroup/DevOpsPlatformApi.git

# 从Git仓库拉取前端代码
RUN git clone http://zhengxiaojun01:zxj%40123321@10.138.61.72/src/testgroup/DevOpsPlatformWeb.git

# 生成nginx配置,/etc/nginx/conf.d/default.conf
RUN { \
    echo "server {"; \
    echo "    listen  8008;"; \
    echo "    server_name xx.xx.xx.xx;"; \
    echo ""; \
    echo "    location / {"; \
    echo "        root   /opt/devops/DevOpsPlatformWeb/dist;"; \
    echo "        index  index.html index.htm;"; \
    echo "        try_files \$uri \$uri/ /index.html;"; \
    echo "    }"; \
    echo ""; \
    echo "    location /auth/ {"; \
    echo "        proxy_pass http://xx.xx.xx.xx:8009;"; \
    echo "        proxy_set_header Host \$host;"; \
    echo "        proxy_set_header X-Real-IP \$remote_addr;"; \
    echo "        proxy_set_header REMOTE-HOST \$remote_addr;"; \
    echo "        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;"; \
    echo "    }"; \
    echo ""; \
    echo "    location /auto_api/ {"; \
    echo "        proxy_pass http://xx.xx.xx.xx:8009;"; \
    echo "        proxy_set_header Host \$host;"; \
    echo "        proxy_set_header X-Real-IP \$remote_addr;"; \
    echo "        proxy_set_header REMOTE-HOST \$remote_addr;"; \
    echo "        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;"; \
    echo "    }"; \
    echo "}"; \
} > /etc/nginx/conf.d/default.conf

# 创建supervisor配置文件 /etc/supervisor/conf.d/devops_api.conf
RUN { \
    echo "[program:access_service]"; \
    echo "command=python access_service.py"; \
    echo "directory=/opt/devops/DevOpsPlatformApi/server"; \
    echo "user=root"; \
    echo "autostart=true"; \
    echo "autorestart=true"; \
    echo "startretries=3"; \
    echo ""; \
    echo "[program:relay_service]"; \
    echo "command=python relay_service.py"; \
    echo "directory=/opt/devops/DevOpsPlatformApi/server"; \
    echo "user=root"; \
    echo "autostart=true"; \
    echo "autorestart=true"; \
    echo "startretries=3"; \
} > /etc/supervisor/conf.d/devops_api.conf

# 创建supervisor配置文件 /etc/supervisor/conf.d/devops_web.conf
RUN { \
    echo "[program:nginx]"; \
    echo "command=nginx -g 'daemon off;'"; \
    echo "user=root"; \
    echo "autostart=true"; \
    echo "autorestart=true"; \
    echo "startretries=3"; \
} > /etc/supervisor/conf.d/devops_web.conf

# 安装后端依赖
WORKDIR /opt/devops/DevOpsPlatformApi
RUN pip install --no-cache-dir -r requirement.txt -i https://pypi.tuna.tsinghua.edu.cn/simple && pip install Werkzeug==2.2.2

# 安装前端依赖
WORKDIR /opt/devops/DevOpsPlatformWeb
# RUN npm install && npm run build:stage

# 使容器在启动时运行supervisord
CMD ["supervisord", "-n"]

# docker build --build-arg SERVER_NAME=xx.xx.xx.xx --build-arg LISTEN_PORT=8008 -t my_image .
# docker build -t my_image .
# docker run -d --name test -p 8008:8008 my_image
# docker exec -it test /bin/bash

# 导出镜像
# docker save -o my_image.tar my_image

# 导入镜像
# docker load -i my_image.tar
# docker run -d --name devops_test -p 8008:8008 -p 8009:8009 -v /data/projects/packages:/opt/devops/packages my_image

# 添加软连接/data/projects/packages/node_modules -> /opt/devops/DevOpsPlatformWeb/node_modules
# ln -s /opt/devops/packages/node_modules /opt/devops/DevOpsPlatformWeb/node_modules
# npm run build:stage

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
    等一分钟 Wait One Minute
    徐誉滕