一,总体步骤
搜索镜像→拉取镜像→查看镜像→启动镜像→停止容器→移除容器
常用命令
删除单个镜像 docker rmi -f 镜像名/ID删除单个容器 docker rm 容器ID/容器名强制停止容器 docker kill 容器ID/容器名Docker开机启动 systemctl enbale docker器容自动启动 docker update mysql --restart=always查看容器运行日志 docker logs 容器名称/容器id
查看防火墙规则 firewall-cmd --list-all防火墙服务状态 ssystemctl status firewald.service防火墙状态 firewall-cmd --state开启防火墙 systemctl start firewald.service重启防火墙 systemctl restart firewald.service关闭防火墙 systemctl stop firewald.service永久关闭防火墙 systemctl disable firewald.service永久开启防火墙 systemctl enable firewald.service开放80端口 firewall-cmd --permanent --add-port=80/tcp移除80端口 firewall-cmd --permanent --remove-port=80/tcp重启防火墙 systemctl restart firewalld.service;重新载入配置 firewall-cmd --reload
二,安装MySQL
1,docker hub上面查找 mysql镜像
2,从docker hub上拉取mysql镜像
3,使用mysql5.7镜像创建容器
1,使用mysql镜像创建容器
## 创建容器docker run -p 3306:3306 --name mysql \-v /docker/mysql5.7/logs:/var/log/mysql \-v /docker/mysql5.7/data:/var/lib/mysql \-v /docker/mysql5.7/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=123456 \--privileged=true -d mysql:5.7命令说明:-p 3306:3306:将主机的12345端口映射到docker容器的3306端口。--name mysql:运行服务名字-v /docker/mysql5.7/conf:/etc/mysql将主机/docker/mysql5.7/录下的conf挂载到容器的 /etc/mysql/conf.d-v /docker/mysql5.7/logs:/var/log/mysql将主机/docker/mysql5.7/logs目录下的 logs 目录挂载到容器的 /logs。-v /docker/mysql5.7/data:/var/lib/mysql将主机/docker/mysql5.7/data目录下的data目录挂载到容器的 /var/lib/mysql-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。privileged=true : 赋予容器这个权限-d mysql:5.6 : 后台程序运行mysql5.6
查看字符集 SHOW VARIABLES LIKE '%chara%'
设置字符集
vi /docker/mysql/conf/my.cnf
[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]init_connect='SET collation_connection=utf8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8collation-server=utf8_unicode_ciskip-character-set-client-handshakeskip-name-resolve
docker exec -it MySQL运行成功后的容器ID /bin/bash
2,注:遇到的坑
创建容器时,没有加入privileged=true,导致mysql容器启动就停止,查看日志 docker logs 7f1bcbae45d7 显示错误信息
很显然,是mysql容器中/var/lib/mysql/没有权限。
那么目标就很明显了,赋予容器这个权限。
一般来说,无法访问目录,权限拒绝。该问题通常在centos7下出现。或者一个容器启动成功后,里面的服务无法成功访问,这是因为centos7中的安全模块selinux把权限禁掉了,一般的解决方案有以下两种:
(1)临时关闭selinux
直接在centos服务器上执行以下命令即可。执行完成以后建议重新docker run。etenforce 0
(2)给容器加权限,一般都推荐使用这种方式。
在docker run时给该容器加权限,加上以下参数即可:--privileged=true
3, 备份数据
docker exec myql服务容器ID sh -c ' exec mysqldump --all-databases -uroot -p"123456" ' > /dataVolume-mysql/all-databases.sql
三,安装Redis
0,安装Redis5.0
1,下载镜像:docker pull redis:5.0
2,创建实例并启动
##创建目录和文件(redis.conf,不然创建容器时把redis.conf当目录)mkdir -p /docker/redis5.0/conftouch /docker/redis5.0/conf/redis.confvi /docker/redis5.0/conf/redis.confappendonly yes## 创建容器docker run --name redis -p 6379:6379 \-v /docker/redis/data:/data \-v /docker/redis/conf/redis.conf:/etc/redis/redis.conf --privileged=true \-d redis:5.0 redis-server /etc/redis/redis.conf## 说明--appendonly yes #aof持久化--privileged=true # 一定放在挂载点目录后面,注意位置-d redis:5.0 redis-server /etc/redis/redis.conf #启动时以加载挂载的redis.conf启动
1,docker hub上面查找 redis 镜像
2,从docker hub上拉取 redis 镜像
3,使用redis3.2镜像创建容器
1,使用redis镜像创建容器
docker run --name redis -p 6379:6379 -v /dataVolume-redis/redis3.2/data:/data -v /dataVolume-redis/redis3.2/conf/redis.conf:/usr/local/etc/redis/redis.conf --privileged=true -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
2, 创建redis.conf文件
在目录 /dataVolume-redis/redis3.2/conf/redis.conf 下创建 redis.conf
redis.conf redis.zip
3,测试 redis-cli
docker exec -it b9ca26bed9c5 redis-cli
4,测试持久化文件生成

四,安装Zookeeper
1,拉取镜像
2,启动容器并增加映射
docker run —privileged=true -d —name zookeeper —publish 2181:2181 -d zookeeper:3.4.9
3,启动并查看容器
4,idea提供了Zookeeper插件
五,安装RabbitMQ
1,拉取镜像
managerment带图形化界面管理功能的docker pull rabbitmq:3.8-management
2,创建容器
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:3.8-management
3,启动并测试
六,安装ElasticSearch
0, 可用的
docker pull elasticsearch:7.10.1
docker run --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" \-e ES_JAVA_OPTS="-Xms64m -Xmx256m" -d elasticsearch:7.10.1
测试地址:http://192.168.31.135:9200/
=============================================
1,拉取镜像
docker pull elasticsearch:7.4.2 # 存储和检索数据docker pull kibana:7.4.2 # 可视化检索数据
2,创建容器
# 在mydata文件夹下创建es的config文件夹,将docker中es的配置挂载在外部,# 当我们在linux虚拟机中修改es的配置文件时,就会同时修改docker中的es的配置mkdir -p /docker/elasticsearch7.4.2/configmkdir -p /docker/elasticsearch7.4.2/data #在docker文件夹下创建es的data文件夹# [http.host:0.0.0.0]允许任何远程机器访问es,并将其写入es的配置文件中echo "http.host: 0.0.0.0" >> /home/elasticsearch7.4.2/config/elasticsearch.ymlchmod -R 777 /home/elasticsearch7.4.2/ # 保证权限问题
docker run --name es -p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \--restart=always \-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \-v /docker/elasticsearch7.4.2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /docker/elasticsearch7.4.2/data:/usr/share/elasticsearch/data \-v /docker/elasticsearch7.4.2/plugins:/usr/share/elasticsearch/plugins \--privileged=true \-d elasticsearch:7.4.2# ElasticSearch是用Java写的,启动时默认会占用2G堆内存,可以自己设置启动最小内存和最大内存# docker run --name es 创建一个es容器并起一个名字;# -p 9200:9200 将linux的9200端口映射到docker容器的9200端口,用来给es发送http请求# -p 9300:9300 9300是es在分布式集群状态下节点之间的通信端口 \ 换行符# -e 指定一个参数,当前es以单节点模式运行# -e ES_JAVA_OPTS="-Xms256m Xmx 384m" 最小内存256m,最大内存 384m# *注意,ES_JAVA_OPTS非常重要,指定开发时es运行时的最小和最大内存占用为64M和128M,# 否则就会占用全部可用内存# -v 挂载命令,将虚拟机中的路径和docker中的路径进行关联# -d 后台启动服务
3,启动并测试
测试地址:http://192.168.31.135:9200/
集群地址:http://192.168.31.135:9300/
七,安装Nginx
1,拉取镜像
docker pull nginx:1.19
2,配置文件
mkdir -p /docker/nginx1.19/conf # 创建配置文件目录# 拷贝配置文件docker run --name nginx -d nginx:1.19docker cp nginx:/etc/nginx/nginx.conf /docker/nginx1.19/conf #把容器中的nginx.conf文件复制到conf目录下docker cp nginx:/etc/nginx/conf.d/default.conf /docker/nginx1.19/conf #把容器中的default.conf文件复制到conf目录下docker stop nginx #停止镜像docker rm -f nginx #删除镜像
3,创建容器
# 创建容器docker run -d --name nginx -p 80:80 \-v /docker/nginx1.19/html:/usr/share/nginx/html \-v /docker/nginx1.19/conf/nginx.conf:/etc/nginx/nginx.conf \-v /docker/nginx1.19/conf/default.conf:/etc/nginx/conf.d/default.conf \-v /docker/nginx1.19/logs:/var/log/nginx \--privileged=true nginx:1.19命令说明:docker run -it -d --name mynginx #名称-p 9999:80 # 端口映射-v /docker/nginx1.19/html:/usr/share/nginx/html # 挂载资源路径-v /docker/nginx1.19/conf/nginx.conf:/etc/nginx/nginx.conf #挂载主配置文件-v /docker/nginx1.19/conf/default.conf:/etc/nginx/conf.d/default.conf # 挂载默认配置文件,反向代理就是从这个配置文件中配置-v /docker/nginx1.19/logs:/var/log/nginx nginx # 挂载日志文件--privileged=true # 一定放在挂载点目录后面,注意位置
问题:Nginx分发给网关时会丢失Host请求头等信息
location / {#解决nginx转发给网发时会丢掉请求头proxy_set_header Host $host;proxy_pass http://gulimall;}
八,安装zipkin
1.获取镜像
2.启动
docker run --name zipkin -d -p 9411:9411 openzipkin/zipkin
3.web端查看
浏览器打开 http://192.168.99.100:9411
