docker安装

1、安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2、设置开机启动docker

1
2
systemctl start docker # 启动docker
systemctl enable docker

3、配置阿里云镜像

进入阿里云官网搜索容器镜像服务,选择对应的镜像加速器。

4、启动

sudo systemctl start docker

5、测试安装

sudo docker run hello-world

docker-compose安装

1、安装

1
2
3
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

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

2、测试

docker-compose -v

mysql8 安装

1、创建文件夹

1
2
mkdir -p /opt/datas/docker/mysql/conf
mkdir -p /opt/datas/docker/mysql/data

2、配置文件

/opt/datas/docker/mysql/conf/my.cnf

添加以下内容:

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
[client]

#socket = /usr/mysql/mysqld.sock

default-character-set = utf8mb4

[mysqld]

#pid-file = /var/run/mysqld/mysqld.pid
#socket = /var/run/mysqld/mysqld.sock
#datadir = /var/lib/mysql
#socket = /usr/mysql/mysqld.sock
#pid-file = /usr/mysql/mysqld.pid

datadir = /opt/datas/docker/mysql/data
character_set_server = utf8mb4
collation_server = utf8mb4_bin
secure-file-priv= NULL

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Custom config should go here

!includedir /etc/mysql/conf.d/

3、拉取最新镜像

docker pull mysql:latest

4、运行容器

1
2
3
4
5
6
7
8
9
docker run \
--name mysql8 \
--restart=unless-stopped \
-it -p 3306:3306 \
-v /opt/datas/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /opt/datas/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql

参数说明:
–restart=unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
-p 3306:3306:映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
-e 环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码
-d 后台运行

5、navicat连接

修改配置navicate才能连接

1、进入容器内部

1
docker exec -it mysql8 /bin/bash

2、进入mysql

1
mysql -u root -p

3、设置密码和所有主机都可访问

1
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';

注意:
mysql_native_password,mysql8.x版本必须使用这种模式,否则navicate无法正确连接

4、刷新

1
flush privileges;

redis安装与配置

1、拉取镜像

1
docker pull redis:latest

2、创建文件夹

1
2
mkdir /data/redis
mkdir /data/redis/data

3、配置文件下载修改

redis官网地址:http://www.redis.cn/download.html

下载稳定版本后解压修改redis.conf配置即可。

主要修改配置如下:

1
2
3
4
5
bind 127.0.0.1 # 注释掉这部分,使redis可以外部访问
daemonize no# 用守护线程的方式启动
requirepass xxx# 给redis设置密码
appendonly yes#redis持久化  默认是no
tcp-keepalive 300 # 防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300

修改完成后,redis.conf文件拖入/data/redis目录内即可。

4、启动docker redis

1
sudo docker run -p 6379:6379 --name redis -v /data/redis/redis.conf:/etc/redis/redis.conf  -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

参数说明:

-p 6379:6379:把容器内的6379端口映射到宿主机6379端口
-v /data/redis/redis.conf:/etc/redis/redis.conf:把宿主机配置好的redis.conf放到容器内的这个位置中
-v /data/redis/data:/data:把redis持久化的数据在宿主机内显示,做数据备份
redis-server /etc/redis/redis.conf:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动
–appendonly yes:redis启动后数据持久化

5、查看是否启动成功

1
2
3
4
5
6
docker ps -a
docker logs redis # 查看日志

docker exec -it 容器id redis-cli
auth 密码
# 如果正常则OK

docker构建springboot 镜像

1、打包jar

通过Maven打包jar包

2、Dockerfile文件

1
2
3
4
FROM java:8
VOLUME /tmp
ADD pear-admin-pro-0.2.0-SNAPSHOT.jar /jed.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-jar","jed.jar"]

FROM java:8 //表示拉取java8的镜像

VOLUME /tmp //创建一个数据卷

ADD pear-admin-pro-0.2.0-SNAPSHOT.jar /jed.jar //把容器jar放到根目录下,并改名为jed.jar

ENTRYPOINT [“java”, “-Djava.security.egd=file:/dev/./urandom”,”-jar”,”jed.jar”] //springboot使用的是嵌入式tomcat容器,启动的比较慢,所以修改一下启动方式

3、文件上传镜像构建

通过winscp把jar包和Dockerfile文件传到同一目录下。

使用如下命令构建镜像:

1
docker build -t ged .

ged:镜像名

. :当前目录

4、镜像启动

构建完成docker images查看即可.

启动使用如下命令:

1
docker run -d -p 9090:9090 --name test ged

-d: 表示后台运行

-p: 表示端口映射

–name: 给这个镜像起个别名

启动后通过docker ps -a查看运行状态。


Nginx Proxy Manager

1、安装

新建个文件夹,然后创建个docker-compose.yml文件。

1
nano docker-compose.yml

配置内容如下:

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
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
environment:
DB_MYSQL_HOST: "主机地址"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "root"
DB_MYSQL_PASSWORD: "密码"
DB_MYSQL_NAME: "npm"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt


2、构建:

1
docker-compose up -d

拉取完成打开81端口即可。

默认账户为:

1
2
Email:    admin@example.com
Password: changeme

yapi

1、安装

1
2
3
4
git clone https://github.com/fjc0k/docker-YApi.git

# 无法访问 github 的可使用国内镜像:
git clone https://gitee.com/fjc0k/docker-YApi.git

项目拉下来之后,修改docker-compose.yml中的配置,具体如下:

基础配置

环境变量名称类型说明示例
YAPI_ADMIN_ACCOUNTstring管理员账号(邮箱)admin@foo.bar
YAPI_ADMIN_PASSWORDstring管理员密码adm1n
YAPI_CLOSE_REGISTERboolean是否关闭注册,由于 docker-YApi 已[内置相关插件](https://github.com/fjc0k/docker-YApi# 内置插件),你可在关闭注册后在后台手动添加用户true
YAPI_NPM_REGISTRYstringnpm 源,目前仅在安装插件时使用,默认官方源,国内可以设为淘宝源加速https://registry.npm.taobao.org

数据库配置

环境变量名称类型说明示例
YAPI_DB_SERVERNAMEstringMongoDB 服务地址yapi-mongo
YAPI_DB_PORTnumberMongoDB 服务端口27017
YAPI_DB_DATABASEstring使用的 MongoDB 数据库yapi
YAPI_DB_USERstring登录 MongoDB 服务的用户名root
YAPI_DB_PASSstring登录 MongoDB 服务的用户密码r00t
YAPI_DB_AUTH_SOURCEstringMongoDB 身份认证所用库admin
YAPI_DB_CONNECT_STRINGstring使用 MongoDB 集群时配置mongodb://127.0.0.100:8418,127.0.0.101:8418/yapidb?slaveOk=true

配置完执行docker-compose up -d 启动服务。

然后,通过 http://localhost:40001 即可访问 YApi

2、重启

若你修改了配置,务必重启应用才能生效:

1
docker-compose restart yapi-web

3、升级

YApi 有更新,本项目应会尽快跟进,之后,你可使用以下命令升级:

1
2
3
docker-compose pull yapi-web \
&& docker-compose down \
&& docker-compose up -d

升级不会对原有数据造成任何影响!

详细安装作者地址:https://github.com/fjc0k/docker-YApi#%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE


docker部署vue

1、配置

直接build打包后js文件过大,需要使用compression-webpack-plugin插件gzip压缩,插件版本如下:

1
2
3
"webpack": "^5.64.4",
"webpackbar": "^5.0.0-3"
"compression-webpack-plugin": "^1.1.12",

插件直接install后build报错,就把node_modules整个删除重新拉。

vue.config.js配置如下:

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
const path = require("path");
const resolve = dir => {
return path.join(__dirname, dir);
};
const isDev = process.env.NODE_ENV === "development";
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const ProductionGzipExtensions = ["html", "js", "css", "svg"];
const WebpackBar = require("webpackbar");
const webpackBarName = "lenk-admin";

module.exports = {
publicPath: "",
outputDir: "dist/admin",
devServer: {
open: true, // 自动
port: 8080 // 端口
},
// 开启多进程 babel 编译
parallel: require("os").cpus().length > 1,
configureWebpack(config) {
//配置根目录
return {
resolve: {
alias: {
"@": resolve("src")
}
},
plugins: [
new WebpackBar({
name: webpackBarName
}),
new CompressionWebpackPlugin({
filename: '[path][base].gz',
algorithm: 'gzip',
test: /\.js$|\.css$|\.html$/,
threshold: 10240,
minRatio: 0.8
}),
]
};
},

runtimeCompiler: true,
productionSourceMap: false,
css: {
requireModuleExtension: true,
sourceMap: true,
loaderOptions: {
less: {
lessOptions: {
javascriptEnabled: true
}
}
}
}
};

2、打包

1
yarn run build-dev

然后通过winscp把打包好的dist和Dockfile文件拖入服务器,Dockerfile配置如下:

1
2
3
FROM nginx
MAINTAINER lenk
COPY dist/ /usr/share/nginx/html

然后cd到项目目录下构建,命令如下:

1
2
docker build -t jsdvue .
docker run -d -t 6666:80 --name jsdvue jsdvue

fastapi部署

PS:坑

如果项目工作目录是放进app目录内,则需要把所有模块引用前面都加上app。
项目外部图
docker容器内部图

Dockerfile

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
# 引入python版本
FROM python:3.7.4

# 设置工作目录
WORKDIR /code

# 复制该文件到工作目录中
COPY ./requirements.txt /code/requirements.txt

# 设置时间
RUN ln -sf /usr/share/zoneinfo/Asia/Beijing/etc/localtime

# 输出时间
RUN echo 'Asia/Beijing' >/etc/timezone

# 禁用缓存并批量安装包(后面的链接是利用豆瓣源安装,速度会加快)
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt -i https://pypi.douban.com/simple/

# copy到工作目录
COPY ./app /code

# 放开端口
EXPOSE 6777

# 命令行运行,启动uvicorn服务,指定ip和端口(--reload:让服务器在更新代码后重新启动。仅在开发时使用该选项。)
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "6777", "--reload"]

打包镜像

在项目根目录执行

1
docker build -t xxx(项目名) .

启动容器

1
docker run -d --name xxx(项目名) -p 6789:6789 xxx(项目名)

安装rabbitmq

安装

1
docker pull rabbitmq

运行mq

1
docker run -d -p 5672:5672 -p 15672:15672 --name myrabmq 镜像id

命令说明图

配置web

1
2
3
4
5
6
# 进入容器
docker exex -it 容器id /bin/bash
# 运行
rabbitmq-plugins enable rabbitmq_management
# 默认密码guest
通过http://ip:15672 访问

channel无法打开问题

提示Stats in management UI are disabled on this node

1
2
3
4
5
6
7
8
9
10
# 进入容器
docker exex -it 容器id /bin/bash
# 进入容器后,cd到以下路径
cd /etc/rabbitmq/conf.d/
# 修改 management_agent.disable_metrics_collector = false
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
# 退出容器
exit
# 重启容器
docker restart 容器id