Docker Hub 上可以搜索并查看镜像以及版本 (2023 年算是挂了,访问不了了,只能使用镜像源在命令行搜索了),选择合适的进行拉取/下载。相应的镜像里都有官方的的启动说明可以参考 (现在参考不了了,烦死了,拉取速度不是问题,问题是文档!),本文只是水文。

Docker Hub 上的镜像有三种标签是可以信任的:

  1. DOCKER OFFICIAL IMAG:Docker 官方镜像,是一组精心策划的 Docker 开源和即插即用解决方案存储库。
  2. Verified Publisher:Docker 验证镜像,来自 Docker 验证的出版商的高质量镜像。这些产品由商业实体直接发布和维护。这些镜像不受速率限制。
  3. Sponsored OSS:Docker 赞助的开源软件镜像,这些镜像由 Docker 通过开源计划赞助的开源项目发布和维护。

本文基于 OFFICIAL IMAG,较为通用。如果各位少侠使用非官方打包的镜像,目录、配置文件什么的需要参照文档,因为有些目录其它镜像放在了不同的位置。但是现在,文档看不了啦,呜呜呜。

1. MySQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建所需目录
mkdir -p /data/server/mysql/conf.d && mkdir -p /data/server/mysql/data
cd /data/server/mysql
# 拉取镜像
docker pull mysql:8.0.36
# 启动一个简单的基础镜像(只是用来复制配置文件,用完就删除)
docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.36
# 官方镜像的配置文件在 /etc/my.cnf 中
docker cp mysql-test:/etc/my.cnf conf.d/
# 删除镜像
docker stop mysql-test && docker rm mysql-test

# 使用自定义的配置文件启动MySQL并且在启动时创建一个数据库
docker run -d -p 3306:3306 --name mysql8 -v /data/server/mysql/conf:/etc/mysql/conf.d -v /data/server/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_ROOT_HOST='%' -v MYSQL_DATABASE=要创建的数据库名称 --restart=always mysql:8.0.36

-e 选项必须指定!如果可以访问 docker hub 官网的话,MySQL 镜像文档中有说明示例(这才是真正有用的!网上全是提速的配置,其实完全不用担心,大公司/高校肯定是有加速源的)。
参考:https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-more-topics.html#docker-optimized-installation

启动完成后,进入 MySQL 的 bash 环境: docker exec -it mysql8 mysql -u root -p,执行下面几个条命令开启远程连接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use mysql;

# MySQL8.0 之前授权远程连接,password 根据自身情况修改
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
# 刷新权限
FLUSH PRIVILEGES;

# MySQL8.0 之后授权远程连接
# 方式一
create user 'dev'@'%' identified by '123456';
grant all privileges on *.* to 'dev'@'%' with grant option;
flush privileges;

# 方式二
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;

如果需要导入之前的数据库备份文件到此容器中,使用以下命令

1
2
3
4
5
docker cp /data/server/mysql/data/备份文件.sql mysql:/var/lib/mysql

# 然后进入 mysql bash
use database;
source 备份文件.sql;

如果本机使用可视化工具(dbeaver、navicat)连接出现以下错误:Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’,请使用 127.0.0.1 连接,不要使用 localhost。

从容器中备份数据

1
2
3
4
5
6
7
8
9
10
11
# 导出单张表的数据(含结构)
docker exec -it [contain_id/contain_name] mysqldump [db_name] -u[username] -p[password] --tables [table_name] > /home/user/xxx.sql
# 导出单张表的数据(不含结构)
docker exec -it [contain_id/contain_name] mysqldump -t [db_name] -u[username] -p[password] --tables [table_name] > /home/user/xxx.sql
# 导出数据库数据(含结构)
docker exec -it [contain_id/contain_name] mysqldump -u[username] -p[password] [db_name] > /home/user/xxx.sql
# 导出数据库数据(不含结构)
docker exec -it [contain_id/contain_name] mysqldump -t -u[username] -p[password] [db_name] > /home/user/xxx.sql

# 只导出整个数据库的结构
docker exec -it [contain_id/contain_name] mysqldump --opt -d -u[username] -p[password] [db_name] > /home/user/xxx.sql

2. Redis

Redis默认开启的是快照模式(RDB),可以开启AOF持久化(最多丢1s内数据)

1
2
3
4
5
6
7
8
# 创建所需目录
mkdir -p /data/server/redis/conf && mkdir -p /data/server/redis/data
cd /data/server/redis

# 此处如果使用自定义配置文件,在 conf 文件中建立 redis.conf 文件添加内容即可

# 指定配置文件并开启AOF持久化后台启动
docker run -p 6379:6379 --name redis -v /data/server/redis/conf:/usr/local/etc/redis -v /data/server/redis/data:/data -d redis:6 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

Redis6.2 配置文件:https://raw.githubusercontent.com/redis/redis/6.2/redis.conf
https://redis.io/docs/management/config/

开启远程连接

/etc/reids/redis.conf
1
2
3
4
5
# 注释掉改行
# bind 127.0.0.1 -::1

# 关闭保护模式
protected-mode no

3. Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建所需目录
mkdir -p /data/server/nginx/conf.d
mkdir -p /data/server/nginx/html
mkdir -p /data/server/nginx/log
cd /data/server/nginx
# 拉取镜像
docker pull nginx:1.24

# 启动一个简单的基础镜像(只是用来复制配置文件,用完就删除)
# 如果自己复制文件内容,此步可以跳过
docker run --name nginx-test -d nginx:1.24
docker cp nginx-test:/etc/nginx/nginx.conf ./
docker cp nginx-test:/etc/nginx/conf.d/default.conf conf.d/

# 删除镜像
docker stop nginx-test && docker rm nginx-test

# 启动
docker run --name nginx -p 80:80 -v /data/server/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /data/server/nginx/html:/usr/share/nginx/html -v /data/server/nginx/log:/var/log/nginx -v /data/server/nginx/conf.d:/etc/nginx/conf.d -d nginx:1.24

注意:nginx的配置文件必须和版本一致。
ro 代表只读(read only): 外部的改变能够影响内部,内部的改变不会影响外部。

4. RabbitMQ

1
2
# 使用自定义配置信息启动
docker run -d --name RabbitMQ -p 15672:15672 -p 5672:5672 -v /data/server/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf rabbitmq:3.8-management

5672 端口是与程序进行通信的,比如Java。rabbitmq:3.8-management 连带服务和管理界面的插件一并启动(默认的账号密码:guest/guest),而 rabbitmq:3.8 是没有管理界面的。

如果在启动时指定用户名、密码可以加上以下内容。

1
2
3
-e RABBITMQ_DEFAULT_VHOST=/ems
-e RABBITMQ_DEFAULT_USER=root
-e RABBITMQ_DEFAULT_PASS=root

5. ElasticSeach And Kibana

ElasticSeach 官方指导教程:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
Kibana 官方教程传送:https://www.elastic.co/guide/en/kibana/current/docker.html

直接启动 ES 容器会报错,解决方案:
1.编辑宿主机 vim /etc/sysctl.conf 加入 vm.max_map_count=262144,保存退出
2.sysctl -p

compose 脚本

compose 脚本的作用就是快速部署,编写一次,后续部署只需要修改即可,超级方便!

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
version: '3'

services:
mysql:
# 使用镜像
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.39
# 镜像名称
container_name: mysql
# docker/podman 启动时直接启动该容器
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root_password
# 加上 command 开启 root 用户的远程连接
MYSQL_ROOT_HOST: '%'
# 运行时创建一个数据库
MYSQL_DATABASE: database_name
# 网络
networks:
- app-net
# 挂载数据卷
volumes:
- /data/server/podman/mysql8/data:/var/lib/mysql
- /data/server/podman/mysql8/log:/var/log/mysql
- /data/server/podman/mysql8/conf.d:/etc/mysql/conf.d
command: --bind-address=0.0.0.0

redis:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7.4.1
container_name: redis
restart: always
ports:
- "6379:6379"
environment:
REDIS_PASSWORD: redis-password
networks:
- app-net
volumes:
- /data/server/podman/redis/data:/data
- /data/server/podman/redis/conf.d:/etc/redis
- /data/server/podman/redis/log:/var/log/redis


nginx:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/nginx:1.27
container_name: nginx
restart: always
ports:
- "80:80"
volumes:
- /data/servers/podman/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- /data/server/podman/nginx/html:/usr/share/nginx/html
- /data/server/podman/nginx/conf.d:/etc/nginx/conf.d
- /data/server/podman/nginx/logs:/var/log/nginx
networks:
- app-net

networks:
app-net:
driver: bridge

nginx.conf 文件需要自己建立

使用脚本:

1
2
3
4
# podman
podman-compose up -d
# docker
docker-compose up -d

本站由 江湖浪子 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。