Docker Hub 上可以搜索并查看镜像以及版本 (2023 年算是挂了,访问不了了,只能使用镜像源在命令行搜索了),选择合适的进行拉取/下载。相应的镜像里都有官方的的启动说明可以参考 (现在参考不了了,烦死了,拉取速度不是问题,问题是文档!),本文只是水文。
Docker Hub 上的镜像有三种标签是可以信任的:
- DOCKER OFFICIAL IMAG:Docker 官方镜像,是一组精心策划的 Docker 开源和即插即用解决方案存储库。
- Verified Publisher:Docker 验证镜像,来自 Docker 验证的出版商的高质量镜像。这些产品由商业实体直接发布和维护。这些镜像不受速率限制。
- 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
docker cp mysql-test:/etc/my.cnf conf.d/
docker stop mysql-test && docker rm mysql-test
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;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
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
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
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/
开启远程连接
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 restart: always ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root_password 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-compose up -d
docker-compose up -d
|