【Docker安装软件,一篇就够了】Docker安装,Docker安装Mysql8.0、Redis、RabbitMQ及常用命令(持续更新)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 【Docker安装软件,一篇就够了】Docker安装,Docker安装Mysql8.0、Redis、RabbitMQ及常用命令(持续更新)

Docker安装

1、Docker 要求

CentOS 系统的内核版本高于 3.10 ,先验证你的CentOS 版本是否支持 Docker 。


[root@k8s-n1 ~]# uname -r
3.10.0-693.el7.x86_64


2、安装docker

yum -y install docker


3、启动docker

systemctl start docker.service


4、设置docker开机启动

systemctl enable docker.service


Docker安装Mysql

1、下载mysql镜像

下载最新版本:docker pull mysql
下载指定版本:docker pull mysql:8.0.15
[root@k8s-n1 ~]# docker pull mysql:8.0.15

如下图:


20191205150314406.png


2、查看下载的mysql镜像

[root@k8s-n1 ~]# docker images


如下图:

20191205150324932.png


3、创建目录

[root@k8s-n1 /]# mkdir -p /mnt/mysql/data /mnt/mysql/logs /mnt/mysql/conf


4、启动docker里面的mysql镜像

[root@k8s-n1 /]# docker run -p 3308:3306 --name trade_mysql -v /mnt/mysql/conf:/etc/mysql/conf.d -v /mnt/mysql/logs:/logs -v /mnt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d 7bb2586065cd


参数说明:

-v 挂载宿主机目录和 docker容器中的目录

-d 后台运行

-p 映射容器端口号和宿主机端口号

-e 环境参数

7bb2586065cd 镜像id( IMAGE ID )


查看容器启动情况

docker ps


如果mysql启动没有成功,查看mysql启动日志

[root@k8s-n1 mysql/]#  docker logs -f trade_mysql
ERROR: mysqld failed while attempting to check config
command was: "mysqld --verbose --help"
mysqld: Can't read dir of '/etc/mysql/conf.d/' (OS errno 13 - Permission denied)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!


如果出现上图错误:

[root@k8s-n1 /]# docker run --privileged=true -p 3308:3306 --name trade_mysql -v /mnt/mysql/conf:/etc/mysql/conf.d -v /mnt/mysql/logs:/logs -v /mnt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d 7bb2586065cd


添加**–privileged=true**增加权限命令,启动成功。


此时启动已完成,在docker启动镜像时密码加密使用的是caching_sha2_password,

在服务器端启动默认使用mysql_native_password 加密的,

如需要使用外部工具连接,需要进入docker容器重置root密码。

详细操作如下:


5、进入docker容器修改Mysql

[root@k8s-n1 mysql]# docker exec -it trade_mysql /bin/sh
# mysql -u root -p
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';


6、安装成功

[root@k8s-n1 /]# docker ps


查看docker容器:


20191205150343191.png


Navicat连接:


20191205150347550.png

docker安装Redis


1、使用docker查看Redis版本信息

[root@k8s-n1 /]# docker search redis


2、下载redis镜像

[root@k8s-n1 /]# docker pull redis:4.0


如下图:


20191205150402160.png


3、查看下载镜像的镜像id

[root@k8s-n1 /]# docker images


4、启动docker里的redis镜像

[root@k8s-n1 /]# docker run -itd --name trade_redis -p 6380:6379 8280a2c45ce5


参数说明:

-p 6380:6379:映射容器服务的 6379 端口到宿主机的 6380 端口。外部可以直接通过宿主机ip:6380 访问到 Redis 的服务。

8280a2c45ce5 镜像id( IMAGE ID )


5、安装成功

[root@k8s-n1 /]# docker ps

查看docker容器:

2019120515042045.png


RedisDesktopManager连接:

20191205150428607.png


6、测试Redis

  • 进入docker容器测试
$ docker exec -it redis-test /bin/bash
root@1d71ab146d19:/data# redis-cli
127.0.0.1:6379> set name test
OK
127.0.0.1:6379> get name
"test"
127.0.0.1:6379> 

容器内部测试:


20191205150448981.png


docker下安装RabbitMQ


1、docker拉取RabbitMQ镜像


[root@k8s-n1 /]# docker pull rabbitmq:3.7.7-management


如下图:


2019120515050048.png


4、启动docker里的RabbitMQ镜像

[root@k8s-n1 /]# docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v /mnt/rabbitMQ/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin 2888deb59dfc


参数说明:

-d 后台运行容器;

–name 指定容器名;

-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);

-v 映射目录或文件;

–hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);

-e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)


5、启动成功

[root@k8s-n1 /]# docker ps
  • 查看docker容器:


20191205150526123.png


浏览器访问

用浏览器访问http://192.168.2.21:15672 访问成功,表示RabbitMQ安装成功。


20191205150533339.png

docker下安装nginx


1、docker拉取nginx镜像

docker pull nginx:版本号, 拉取指定版本nginx或docker pull nginx,拉取最新版本

2、目录、端口映射

目录映射: /data/deploy_honsupply_web/html:/usr/share/nginx/html

端口映射:8000:80

  • 注 前端打包文件放在/data/deploy_honsupply_web/html目录下


3、启动nginx

docker run -d -p 8999:80 -v /data/web/html:/usr/share/nginx/html --name nginx8999 --restart always nginx


Docker容器内部无法访问宿主机网络(No Route to host)


  • 关闭防火墙(局域网内推荐)


# centos 7
systemctl stop firewalld
  • 在防火墙上开放指定端口
# 添加端口
firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --reload


Docker启动报错 : iptables failed

错误信息


Error response from daemon: driver failed programming external connectivity on endpoint gloomy_kirch : iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 32810 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.


原因分析


在Docker Daemon服务启动之后, 修改了防火墙配置(修改/关闭等), 此时启动Docker容器会造成防火墙网络配置有问题。


解决方案

# 先重启防火墙
systemctl restart firewalld
# 再重启Docker 服务
systemctl restart docker

Docker挂载的目录, 在容器内无读写权限(Permission denied)

环境&现象

CentOS 7.4 环境, 启动Docker时volume容器和宿主机的挂载目录, 但是在容器内部无权限对此目录进行操作

# 错误现象
ls: cannot open directory '.': Permission denied

解决办法

  • 关闭CentOS7中安全模块selinux


# 临时关闭selinux
setenforce 0
# 永久关闭selinux : SELINUX=disabled , 重启机器生效
vi /etc/selinux/config
  • 运行容器时, 给容器增加特权
docker run -i -t -v /soft:/soft --privileged=true 637fe9ea94f0 /bin/bash


SpringBoot项目打包成docker镜像

创建Dockerfile文件,内容如下:

FROM openjdk:8-jdk-alpine
VOLUME /temp
EXPOSE 9001
ADD logistics-quote-1.0.0.jar logistics-quote.jar
ENTRYPOINT ["java","-jar","/logistics-quote.jar"]


打成docker镜像

将jar包和Dockerfile放在服务器的统一目录下,执行命令:

docker build -t quote:1.0.0 .


执行docker images 可以查看到生成的镜像

docker 启动镜像

docker run -d --name trade_test -p 9002:9001 imageId

docker删除


# 停止容器运行
docker stop containsId
# 删除容器
docker rm containsId
# 删除镜像
docker rmi imagesId


查看docker容器的内部ip

docker exec -it containsId /bin/bash
cat /etc/hosts


下载docker镜像里面的文件

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp ecef8319d2c8:/root/test.txt /root/


该命令的意思是将当前操作系统(Linux)家目录(root)下的文件test.txt拷贝到容器id为ecef8319d2c8的家目录(root)文件夹下。如果是win系统的话请替换为win下的合法路径(例如:D:/test.txt)。


Docker 常用命令

查看所有的镜像

docker images

停止所有的容器

docker stop $(docker ps -a -q)

查看所有的容器

docker ps -a

获取所有的容器的容器id

docker ps -a -q

删除容器

docker rm 容器id

删除所有的容器

docker rm $(docker ps -a -q)

删除镜像,需要先删除容器,然后才可以删除镜像。(未验证)

docker rmi 镜像id

获取所有镜像的id

docker images -q

删除所有的镜像

docker rmi -f $(docker images -q)

构建镜像(注意镜像名称后面加 “空格.”)

docker build -t 镜像名称 .

运行docker镜像

docker run 镜像名称

映射指定的ip启动

docker run -d -p 宿主ip:虚拟机ip 镜像名称

查看docker运行的日志log

docker logs 容器id(CONTAINER ID)

停止容器

docker stop 容器id(CONTAINER ID)

启动容器

docker start 容器id(CONTAINER ID)

目录
相关文章
|
2天前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
1. 先更新Mysql,再更新Redis,如果更新Redis失败,可能仍然不⼀致 2. 先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中 这种⽅案能解决1 ⽅案的问题,但是在⾼并发下性能较低,⽽且仍然会出现数据不⼀致的问题,⽐如线程1删除了 Redis缓存数据,正在更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中⽼数据⼜查到 Redis中 1. 使用MQ异步同步, 保证数据的最终一致性 我们项目中会根据业务情况 , 使用不同的方案来解决Redis和Mysql的一致性问题 : 1. 对于一些一致性要求不高的场景 , 不做处理例如 : 用户行为数据 ,
|
6天前
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
|
1月前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
193 42
|
2月前
|
缓存 NoSQL 关系型数据库
Redis与MySQL的数据一致性
在高并发环境下,保持 Redis 和 MySQL 的数据一致性是一个复杂但重要的问题。通过采用读写穿透、写穿透、分布式锁、双写一致性保障和延时双删策略,可以有效地减少数据不一致的风险,确保系统的稳定性和可靠性。通过合理的缓存策略和数据同步机制,可以显著提升系统的性能和用户体验。
131 22
|
2月前
|
安全 关系型数据库 MySQL
CentOS7仅安装部署MySQL80客户端
通过上述步骤,你可以在CentOS 7上成功安装并配置MySQL 8.0客户端。这个过程确保你能够使用MySQL客户端工具连接和管理远程的MySQL数据库,而不需要在本地安装MySQL服务器。定期更新MySQL客户端可以确保你使用的是最新的功能和安全修复。
311 16
|
4天前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
104 82
|
2月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
12天前
|
SQL 关系型数据库 MySQL
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
|
1月前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
150 25
|
23天前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。