一,总体步骤

搜索镜像→拉取镜像→查看镜像→启动镜像→停止容器→移除容器
常用命令

  1. 删除单个镜像 docker rmi -f 镜像名/ID
  2. 删除单个容器 docker rm 容器ID/容器名
  3. 强制停止容器 docker kill 容器ID/容器名
  4. Docker开机启动 systemctl enbale docker
  5. 器容自动启动 docker update mysql --restart=always
  6. 查看容器运行日志 docker logs 容器名称/容器id
  1. 查看防火墙规则 firewall-cmd --list-all
  2. 防火墙服务状态 ssystemctl status firewald.service
  3. 防火墙状态 firewall-cmd --state
  4. 开启防火墙 systemctl start firewald.service
  5. 重启防火墙 systemctl restart firewald.service
  6. 关闭防火墙 systemctl stop firewald.service
  7. 永久关闭防火墙 systemctl disable firewald.service
  8. 永久开启防火墙 systemctl enable firewald.service
  9. 开放80端口 firewall-cmd --permanent --add-port=80/tcp
  10. 移除80端口 firewall-cmd --permanent --remove-port=80/tcp
  11. 重启防火墙 systemctl restart firewalld.service
  12. 重新载入配置 firewall-cmd --reload


二,安装MySQL

1,docker hub上面查找 mysql镜像

docker search mysql

2,从docker hub上拉取mysql镜像

docker pull mysql:5.7

3,使用mysql5.7镜像创建容器

1,使用mysql镜像创建容器

  1. ## 创建容器
  2. docker run -p 3306:3306 --name mysql \
  3. -v /docker/mysql5.7/logs:/var/log/mysql \
  4. -v /docker/mysql5.7/data:/var/lib/mysql \
  5. -v /docker/mysql5.7/conf:/etc/mysql \
  6. -e MYSQL_ROOT_PASSWORD=123456 \
  7. --privileged=true -d mysql:5.7
  8. 命令说明:
  9. -p 3306:3306:将主机的12345端口映射到docker容器的3306端口。
  10. --name mysql:运行服务名字
  11. -v /docker/mysql5.7/conf:/etc/mysql
  12. 将主机/docker/mysql5.7/录下的conf挂载到容器的 /etc/mysql/conf.d
  13. -v /docker/mysql5.7/logs:/var/log/mysql
  14. 将主机/docker/mysql5.7/logs目录下的 logs 目录挂载到容器的 /logs
  15. -v /docker/mysql5.7/data:/var/lib/mysql
  16. 将主机/docker/mysql5.7/data目录下的data目录挂载到容器的 /var/lib/mysql
  17. -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
  18. privileged=true : 赋予容器这个权限
  19. -d mysql:5.6 : 后台程序运行mysql5.6

查看字符集 SHOW VARIABLES LIKE '%chara%'
设置字符集
vi /docker/mysql/conf/my.cnf

  1. [client]
  2. default-character-set=utf8
  3. [mysql]
  4. default-character-set=utf8
  5. [mysqld]
  6. init_connect='SET collation_connection=utf8_unicode_ci'
  7. init_connect='SET NAMES utf8'
  8. character-set-server=utf8
  9. collation-server=utf8_unicode_ci
  10. skip-character-set-client-handshake
  11. skip-name-resolve

docker exec -it MySQL运行成功后的容器ID /bin/bash
image.png

2,注:遇到的坑

创建容器时,没有加入privileged=true,导致mysql容器启动就停止,查看日志 docker logs 7f1bcbae45d7 显示错误信息
image.png
很显然,是mysql容器中/var/lib/mysql/没有权限。
那么目标就很明显了,赋予容器这个权限。
一般来说,无法访问目录,权限拒绝。该问题通常在centos7下出现。或者一个容器启动成功后,里面的服务无法成功访问,这是因为centos7中的安全模块selinux把权限禁掉了,一般的解决方案有以下两种:
(1)临时关闭selinux
直接在centos服务器上执行以下命令即可。执行完成以后建议重新docker run。
etenforce 0
(2)给容器加权限,一般都推荐使用这种方式。
在docker run时给该容器加权限,加上以下参数即可:
--privileged=true

3, 备份数据

  1. 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,创建实例并启动

  1. ##创建目录和文件(redis.conf,不然创建容器时把redis.conf当目录)
  2. mkdir -p /docker/redis5.0/conf
  3. touch /docker/redis5.0/conf/redis.conf
  4. vi /docker/redis5.0/conf/redis.conf
  5. appendonly yes
  6. ## 创建容器
  7. docker run --name redis -p 6379:6379 \
  8. -v /docker/redis/data:/data \
  9. -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf --privileged=true \
  10. -d redis:5.0 redis-server /etc/redis/redis.conf
  11. ## 说明
  12. --appendonly yes #aof持久化
  13. --privileged=true # 一定放在挂载点目录后面,注意位置
  14. -d redis:5.0 redis-server /etc/redis/redis.conf #启动时以加载挂载的redis.conf启动

1,docker hub上面查找 redis 镜像

docker search redis

2,从docker hub上拉取 redis 镜像

docker pull redis:3.2

3,使用redis3.2镜像创建容器

1,使用redis镜像创建容器

  1. 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

注:redis:3.2 也可以用容器ID
image.png

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
image.png

4,测试持久化文件生成

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/10374550/1610464090486-6aa0c15c-c3ec-4175-9005-d148f80956ab.png#align=left&display=inline&height=136&margin=%5Bobject%20Object%5D&name=image.png&originHeight=174&originWidth=559&size=13300&status=done&style=none&width=437)

四,安装Zookeeper

1,拉取镜像

docker pull zookeeper:3.4.9

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,创建容器

  1. docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:3.8-management

3,启动并测试

http://192.168.31.135:15672

六,安装ElasticSearch

0, 可用的

docker pull elasticsearch:7.10.1

  1. docker run --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" \
  2. -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,创建容器

  1. # 在mydata文件夹下创建es的config文件夹,将docker中es的配置挂载在外部,
  2. # 当我们在linux虚拟机中修改es的配置文件时,就会同时修改docker中的es的配置
  3. mkdir -p /docker/elasticsearch7.4.2/config
  4. mkdir -p /docker/elasticsearch7.4.2/data #在docker文件夹下创建es的data文件夹
  5. # [http.host:0.0.0.0]允许任何远程机器访问es,并将其写入es的配置文件中
  6. echo "http.host: 0.0.0.0" >> /home/elasticsearch7.4.2/config/elasticsearch.yml
  7. chmod -R 777 /home/elasticsearch7.4.2/ # 保证权限问题
  1. docker run --name es -p 9200:9200 -p 9300:9300 \
  2. -e "discovery.type=single-node" \
  3. --restart=always \
  4. -e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
  5. -v /docker/elasticsearch7.4.2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
  6. -v /docker/elasticsearch7.4.2/data:/usr/share/elasticsearch/data \
  7. -v /docker/elasticsearch7.4.2/plugins:/usr/share/elasticsearch/plugins \
  8. --privileged=true \
  9. -d elasticsearch:7.4.2
  10. # ElasticSearch是用Java写的,启动时默认会占用2G堆内存,可以自己设置启动最小内存和最大内存
  11. # docker run --name es 创建一个es容器并起一个名字;
  12. # -p 9200:9200 将linux的9200端口映射到docker容器的9200端口,用来给es发送http请求
  13. # -p 9300:9300 9300是es在分布式集群状态下节点之间的通信端口 \ 换行符
  14. # -e 指定一个参数,当前es以单节点模式运行
  15. # -e ES_JAVA_OPTS="-Xms256m Xmx 384m" 最小内存256m,最大内存 384m
  16. # *注意,ES_JAVA_OPTS非常重要,指定开发时es运行时的最小和最大内存占用为64M和128M,
  17. # 否则就会占用全部可用内存
  18. # -v 挂载命令,将虚拟机中的路径和docker中的路径进行关联
  19. # -d 后台启动服务

es 的启动日志
docker logs el

3,启动并测试

测试地址:http://192.168.31.135:9200/
集群地址:http://192.168.31.135:9300/

七,安装Nginx

1,拉取镜像

docker pull nginx:1.19

2,配置文件

  1. mkdir -p /docker/nginx1.19/conf # 创建配置文件目录
  2. # 拷贝配置文件
  3. docker run --name nginx -d nginx:1.19
  4. docker cp nginx:/etc/nginx/nginx.conf /docker/nginx1.19/conf #把容器中的nginx.conf文件复制到conf目录下
  5. docker cp nginx:/etc/nginx/conf.d/default.conf /docker/nginx1.19/conf #把容器中的default.conf文件复制到conf目录下
  6. docker stop nginx #停止镜像
  7. docker rm -f nginx #删除镜像

3,创建容器

  1. # 创建容器
  2. docker run -d --name nginx -p 80:80 \
  3. -v /docker/nginx1.19/html:/usr/share/nginx/html \
  4. -v /docker/nginx1.19/conf/nginx.conf:/etc/nginx/nginx.conf \
  5. -v /docker/nginx1.19/conf/default.conf:/etc/nginx/conf.d/default.conf \
  6. -v /docker/nginx1.19/logs:/var/log/nginx \
  7. --privileged=true nginx:1.19
  8. 命令说明:
  9. docker run -it -d --name mynginx #名称
  10. -p 9999:80 # 端口映射
  11. -v /docker/nginx1.19/html:/usr/share/nginx/html # 挂载资源路径
  12. -v /docker/nginx1.19/conf/nginx.conf:/etc/nginx/nginx.conf #挂载主配置文件
  13. -v /docker/nginx1.19/conf/default.conf:/etc/nginx/conf.d/default.conf # 挂载默认配置文件,反向代理就是从这个配置文件中配置
  14. -v /docker/nginx1.19/logs:/var/log/nginx nginx # 挂载日志文件
  15. --privileged=true # 一定放在挂载点目录后面,注意位置

问题:Nginx分发给网关时会丢失Host请求头等信息

  1. location / {
  2. #解决nginx转发给网发时会丢掉请求头
  3. proxy_set_header Host $host;
  4. proxy_pass http://gulimall;
  5. }

八,安装zipkin

1.获取镜像

docker pull openzipkin/zipkin

2.启动

docker run --name zipkin -d -p 9411:9411 openzipkin/zipkin

3.web端查看

浏览器打开 http://192.168.99.100:9411