目录
1.Docker安装
1.1docker概念
离线安装docker包 Index of linux/static/stable/x86_64/
docker 的三个概念:
- 仓库:仓库就类比于github仓库,上面存储着各种各样版本的软件Docker Hub
- 镜像,我们从docker上拉取一个软件初始就是个镜像
- 容器,容器就是镜像运行时,可以用的软件
1.2安装
官网安装地址 Install Docker Engine on CentOS | Docker Documentation
注:本篇为Centos7安装Docker,若为其他系统请理性参考
1.查看是否已安装
docker --version
2.更新你的包列表
sudo yum update
3.若:没有yum命令,安装yum,有的话直接跳过
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
4.安装必要的包,这些包可以让yum使用HTTPS:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5.添加Docker的存储库:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.安装Docker:
sudo yum install docker-ce
7.启动Docker服务:
sudo systemctl start docker
sudo systemctl stop docker
sudo systemctl status docker
8.设置Docker服务开机自启:
sudo systemctl enable docker
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://123.mirror.aliyuncs.com"]
}
EOF
2. vim /etc/docker/daemon.json
内容如下:
{
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"default-shm-size": "1G",
"debug": true,
"experimental": false,
"registry-mirrors": [
"https://dockerproxy.net",
"https://3cvqd94394.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"https://0fivaqt3.mirror.aliyuncs.com",
"https://hub.appifa.com",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
],
"dns": ["114.114.114.114","8.8.8.8","8.8.4.4"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
2.要继续配置一下阿里云镜像加速,按如下步骤完成即可.(可忽略不配置)
步骤2,是写配置文件
1. mkdir -p /etc/docker
2. vim /etc/docker/daemon.json
3. systemctl daemon-reload
4. systemctl restart docker
步骤2的配置文件格式
{ "registry-mirrors": ["https://{自已的编码}.mirror.aliyuncs.com"] }
自己的编码如何查看,网址: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
6.启动并加入开机启动
#重新加载配置文件
systemctl daemon-reload
#启动Docker
systemctl start docker
systemctl stop docker
systemctl restart docker
#设置开机自启动
systemctl enable docker
systemctl enable docker.service
systemctl disable docker
#查看docker启动状态
systemctl status docker
#查看docker信息
docker info
7.验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version
1.3卸载docker
1.卸载旧版本(如果安装过旧版本的话)
sudo yum remove docker docker-common docker-selinux docker-engine
2.删除安装包
yum remove docker-ce
3.删除镜像、容器、配置文件等内容
rm -rf /var/lib/docker
1.4docker命令
#查找镜像
docker search mysql
#拉去最新版本
docker pull mysql
#拉去指定版本
docker pull mysql:5.7
# 查看镜像
docker images
#docker容器在宿主机目录
cd /var/lib/docker/containers
#查看容器配置
docker inspect 容器ID
# 查看正在运行容器
docker ps
# 查看全部容器
docker ps -a
# 查看容器的实时日志
docker logs -f 容器id(容器名称) | docker logs -f --tail 500 容器id(容器名称)
# 使用 inspect 命令查看镜像详细信息
docker inspect 容器id(容器名称)
# 访问url
curl localhost:8080
# 查看端口使用情况
netstat -ntlp
# 进入容器
docker exec -it 容器id(容器名称) /bin/bash
# 退出容器
exit
# 停止容器
docker stop 容器id(容器名称)
# 启动容器
docker start 容器id(容器名称)
# 重启容器
docker restart 容器id(容器名称)
# 删除容器(删除容器前得停止容器)
docker rm -f 容器id(容器名称)
# 删除镜像(删除镜像前得删除容器)
docker rmi -f 镜像id(镜像名称)
#docker build制作镜像,一般用于springboot项目发布,或者自定义镜像
docker build -t param1 .
#param1 镜像名称 , . 当前目录 或者 /root/demo/ 指定目录
#docker run参数设置
docker run -d -p 8080:8080 -v /home/demo/:/mnt/demo/ --add-host redis_host:192.168.0.1 --restart=always --name param1 param2
-d 内部运行
-p 宿主机映射端口:容器内部端口
--name param1容器名称 param2镜像名称
-v 表示需要将宿主机哪个目录挂载到容器中,格式:-v <宿主机(Linux)目录>:<容器目录>
--restart=always 在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启
如果docker容器已经启动了则可以使用如下命令:
docker update 容器id(容器名称) --restart=always
--hostname param 指定主机名称,该名称在集群的名称中使用
--add-host redis_host:192.168.0.1 等于 vi /etc/hosts
1.5设置时区
1.在容器中创建文件(一般可以省略)
mkdir -p /usr/share/zoneinfo/Asia
2.回到宿主机,复制宿主机里的文件到容器中
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID或容器名:/usr/share/zoneinfo/Asia
3.软连接设置时区为上海
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
4.重启容器
2.nacos安装
#搜索Nacos镜像
docker search nacos/nacos-server
#拉取Nacos镜像
docker pull nacos/nacos-server:2.2.2
#创建Nacos容器 并 连接mysql数据库
docker run -d -p 8848:8848 -p 9848:9848 -p 9849:9849 -p 7848:7848 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456\
-e MYSQL_SERVICE_DB_NAME=nacos \
#-e NACOS_APPLICATION_PORT=8848 \#这是自定义端口,如果修改,对应的-p也需要修改,最好采用默认
--restart=always \
--name nacos \
nacos/nacos-server:2.2.2
#进入Nacos容器
docker exec -it nacos /bin/bash
# 查看日志是否运行正常
docker logs -f nacos
#访问:通过 ip:8848/nacos 访问,登录密码默认nacos/nacos
3.mysql安装
# 查看docker仓库中的mysql
docker search mysql
# 选定需要pull到本地系统中的镜像版本
docker pull mysql:5.7
#或者不选版本号,直接拉取最新的版本
docker pull mysql
#运行mysql,开放的端口是3306,密码是123456, -d是后台运行 ,容器ID/名称是mysql
#-p 3306:3306:将容器的3306端口映射到宿主机的3306端口
#-e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
#挂载数据到宿主机
mkdir -p /home/mysql/data /home/mysql/logs /home/mysql/conf
cd /home/mysql/conf
touch my.cnf
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456
-v /home/mysql/conf:/etc/mysql/conf.d
-v /home/mysql/logs:/logs
-v /home/mysql/data:/var/lib/mysql
--restart=always --name mysql mysql:5.7
#查看容器是否运行
docker ps
#进入容器
docker exec -it mysql /bin/bash
#登录mysql
mysql -h localhost -u root -p 或者 mysql -uroot -p123456
接着输入密码root
登录成功后即为安装成功了
#使用Navicat连接
问题1:如果部署在云服务器,则需要配置防火墙,安全组
问题2:若远程Navicat连接不上数据库,可以尝试设置mysql远程权限
# 进入容器 docker exec -it mysql /bin/bash
#登录mysql,执行如下命令
# 设置mysql远程权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码123456';
# 刷新权限
flush privileges;
如果docker pull mysql:8.0.22 版本
错误 ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded 表示 MySQL 中没有加载或支持 mysql_native_password 插件。
从 MySQL 8.0 开始,mysql_native_password 插件已经被弃用,默认采用caching_sha2_password
解决方法:
如果你必须使用 mysql_native_password 插件,可以尝试以下方法
方法 1: 使用 caching_sha2_password 插件
你可以使用默认的 caching_sha2_password 插件来设置密码,而不使用 mysql_native_password
ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY '123456';
方法 2: 启用 mysql_native_password 插件(不推荐)
如果你确实需要使用 mysql_native_password 插件,你可以手动启用它,虽然这不建议在最新版本中使用。可以通过修改 MySQL 配置文件来加载该插件:
编辑 MySQL 配置文件(通常在 /etc/mysql/my.cnf 或 /etc/my.cnf)。
在 [mysqld] 部分添加以下行以启用 mysql_native_password 插件:
default_authentication_plugin=mysql_native_password
然后重启服务
再次执行下面得修改语句
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
如果docker pull mysql:8.4.x版本
在8.4以后得版本default_authentication_plugin配置已经不生效了
[mysqld]
default_authentication_plugin=mysql_native_password
替换成
mysql_native_password=ON
或者在docker run 命令 加入 --mysql_native_password=ON
4.Redis安装
# 查看docker仓库中的redis
docker search redis
# pull最新版本redis镜像
docker pull redis:latest
# 查看镜像是否已安装
docker images
# 运行名为redis的容器并配置密码
docker run -itd -p 6379:6379 --restart=always --name redis redis --requirepass "123456"
mkdir -p /usr/local/redis && mkdir -p /usr/local/redis/data
#修改redis.conf放入/usr/local/redis
#注释掉这句
#bind 127.0.0.1
#开启远程连接
protected-mode no
#设置访问密码,位置大概在901行
requirepass 123456
docker run -d -p 6379:6379 --restart=always
-v /usr/local/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data:/data
--name redis redis redis /etc/redis/redis.conf --appendonly yes
#查看容易是否运行
dokcer ps
# 查看日志是否运行正常
docker logs -f redis
5.Rabbitmq安装
5.1安装
#查询rabbitmq镜像
docker search rabbitmq
#选择第一个official的官方版本下载使用,不加后面的版本号就会下载最新的镜像
docker pull rabbitmq:3.10.0
或者
docker pull rabbitmq
#查看下载的镜像
docker images
#运行mq , -p 宿主机映射端口:docker的内部端口
docker run -d -p 15672:15672 -p 5672:5672 --restart=always --hostname myRrabbit --name rabbitmq rabbitmq
#查看容器
docker ps -a
#进入容器内部
docker exec -it 容器id /bin/bash
#进入容器内部运行下面命令,这是安装rabbitmq的web界面插件
rabbitmq-plugins enable rabbitmq_management
#exit退出容器内部
#http://linuxip:15672,访问web界面,这里的用户名和密码默认都是guest
#如果不能访问,设置防火墙,安全组
上诉步骤需要进入容器内部安装web界面插件,建议采用下面的方式
#查询rabbitmq镜像
docker search rabbitmq
#下载rabbitmq的Web管理插件
docker pull rabbitmq:management
或者
docker pull rabbitmq:management
#查看下载的镜像
docker images
#运行mq
docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 25672:25672 -p 15672:15672
--restart=always --hostname myRabbit
-e RABBITMQ_DEFAULT_VHOST=my_vhost
-e RABBITMQ_DEFAULT_USER=admin
-e RABBITMQ_DEFAULT_PASS=admin
--name rabbitmq rabbitmq:management
--privileged=true
#--hostname 指定容器主机名称,RabbitMQ的hostname 最好指定。Rabbit MQ的有一个重要的注意事项是它根据节点名称来存储数据,默认就是主机名、而上面说道hostname就是集群中的节点名称。如果不指定hostname,那么docker在启动的时候会自动生成hostname,如此一来可能每次生成的hostname都不一样,那么就会导致数据丢失。
#-e 指定环境变量
#RABBITMQ_DEFAULT_VHOST:默认虚拟机名/
#RABBITMQ_DEFAULT_USER:默认的用户名
#RABBITMQ_DEFAULT_PASS:默认用户名的密码
#--privileged=true给容器加上特定权限
#--name rabbitmq rabbitmq:management安装rabbitmq的Web管理插件
#说明 用户是需要与Virtual Hosts绑定的,也就是这里的my_vhost与admin绑定,具体可到mqweb界面的admin菜单下查看
#查看容器
docker ps -a
docker logs rabbitmq 查看日志
#进入容器内部
docker exec -it 容器id /bin/bash
#exit退出容器内部
#http://linuxip:15672,访问web界面,这里的用户名和密码默认都是admin
5.2安装RabbitMQ延迟消息插件
rabbitmq_delayed_message_exchange 安装
首先我们需要下载 rabbitmq_delayed_message_exchange 插件,这是一个 GitHub 上的开源项目,我们直接下载即可:
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases
下载完成后执行如下命令将下载文件拷贝到 Docker 容器中去:
#或者直接
wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.10.0/rabbitmq_delayed_message_exchange-3.10.0.ez
#拷贝到容器
#docker cp ./宿主机文件目录 容器ID:/容器内目录
docker cp ./rabbitmq_delayed_message_exchange-3.10.0.ez rabbitmq:/plugins
#进入到容器
docker exec -it rabbitmq /bin/bash
#查看插件列表
rabbitmq-plugins list
#执行如下命令启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
5.3集群中采用自定义镜像安装延迟消息插件(不可能一台一台的上诉这样操作)(忽略忽略,验证中)
#rabbitmq_delayed_message_exchange-3.10.0.ez文件与Dockerfile同一目录
#编写Dockerfile脚本
FROM rabbitmq:3.10.0-management
COPY rabbitmq_delayed_message_exchange-3.10.0.ez /plugins
RUN rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange
#执行
docker build -t my-rabbitmq:3.10.0-management .
docker run --name myrabbitmq my-rabbitmq:3.10.0-management
5.4RabbitMq集群
Docker 安装 RabbitmQ 集群_晨一更的博客-优快云博客
6.RocketMq安装
7.springboot项目部署
8.jenkins自动化部署docker
Jenkins自动化部署实现原理及部署到SSH与Docker_晨一更的博客-优快云博客
9.nginx做服务器安装
所有项目都部署在一个nginx容器中
使用docker中nginx做服务器
ip:192.168.0.100
宿主机80已经被宿主机nginx占用所以用49000映射容器80端口
如果宿主机80端口没被占用,则映射端口改成80:80
1.创建文件
mkdir -p /www/docker/nginx/conf/conf.d
mkdir -p /www/docker/nginx/html
2.创建容器
docker run -d -p 49000:80 --restart=always --name nginx nginx:latest
3.拷贝文件到宿主机
docker cp nginx:/etc/nginx/conf.d /www/docker/nginx/conf/conf.d
docker cp nginx:/etc/nginx/nginx.conf /www/docker/nginx/conf/nginx.conf
docker cp nginx:/usr/share/nginx/html /www/docker/nginx/html
4.删除容器
docker rm -f nginx
5.创建容器(如果直接执行这个命令,或导致文件被宿主机覆盖,容器内部对应目录文件为空,启动不了)
docker run -d -p 49000:80 -v /www/docker/nginx/conf/conf.d:/etc/nginx/conf.d -v /www/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /www/docker/nginx/html:/usr/share/nginx/html --restart=always --name nginx nginx:latest
6.访问,可以看到nginx服务器部署成功
192.168.0.100:49000 或者 192.168.0.100:80
2.部署项目
1.域名配置
cd /www/docker/nginx/conf/conf.d
copy default.conf docker-test.conf
vi docker-test.conf
server {
listen 80;
listen [::]:80;
server_name docker-test.abc.com;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html/docker-test/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /prod-api/ {
client_body_timeout 1800s;
proxy_read_timeout 1800s;
keepalive_timeout 1800s;
proxy_pass http://192.1698.0.100:48200/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
2.代码拷贝到
cd /www/docker/nginx/html/docker-test/dist
3.访问地址(记得重启容器)
docker-test.abc.com:49000 或者 docker-test.abc.com:80 看映射端口
4.这样可以部署多个项目,采用不同域名访问,使docker中得nginx作为服务器
思考:如果用上诉方式,部署多个项目,不使用域名,采用端口方式,那是不是创建映射端口得时候 ,是不是要映射多个端口,【应该是得】
所以这种方式费时费力
看第九条实际使用方式
9.nginx前端项目制作容器
每个项目部署一个nginx容器
文件存放在一个目录
cd /www/docker/nginx/admin
1.default.conf内容
server {
listen 80;
server_name localhost;
client_max_body_size 60m;
proxy_http_version 1.1;
location / {
alias /usr/share/nginx/html/;
try_files $uri /index.html;
}
location /index.html {
index index.html;
root /usr/share/nginx/html;
}
}
2.dockerfile内容
FROM nginx:latest
copy default.conf /etc/nginx/conf.d/default.conf
copy dist/ /usr/share/nginx/html/
3.DockerStart.sh内容
docker rm -f admin-nginx
docker rmi -f admin-nginx
docker build -t admin-nginx.
docker run -d -p 8081:80 --restart=always --name admin-nginx admin-nginx
4.执行DockerStart.sh
./DockerStart.sh
5.访问
ip:8081
6.宿主机nginx配置代理采用域名访问
10.后端项目制作容器
11.hbase安装
1.拉取镜像
docker pull harisekhon/hbase
docker pull harisekhon/hbase:2.1.3
2.启动
docker run -d -h hbase -p 2181:2181 -p 8080:8080 -p 8085:8085 -p 9090:9090 -p 9000:9000 -p 9095:9095 -p 16000:16000 -p 16010:16010 -p 16020:16020 -p 16201:16201 -p 16301:16301 --restart=always --name hbase harisekhon/hbase:2.1.3
3.访问
开通端口16000 16010 16020 2181 9000
http://IP:16010
4.linux或者window配置hosts
192.168.0.1 hbase
12.minio安装
1.下载镜像
docker pull minio/minio
2.创建目录
mkdir -p /www/docker/minio/data
mkdir -p /www/docker/minio/config
3.1.运行容器
docker run \
-p 19000:9000 \
-p 19001:9001 \
-d --restart=always \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /www/docker/minio/data:/data \
-v /www/docker/minio/config:/root/.minio \
--name minio minio/minio \
server /data --console-address ":9001" -address ":9000"
3.2运行容器
docker run \
-p 19000:9000 \
-p 19001:9001 \
-d --restart=always \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-e "MINIO_ACCESS_KEY=test" \
-e "MINIO_SECRET_KEY=test123" \
-v /www/docker/minio/data:/data \
-v /www/docker/minio/config:/root/.minio \
--name minio minio/minio \
server /data --console-address ":9001" -address ":9000"
说明
1.MINIO_ROOT_USER MINIO_ROOT_PASSWORD 管理员账户密码
2.MINIO_ACCESS_KEY MINIO_SECRET_KEY 用户账户密码
3.容器内部端口为9000 9001 映射宿主机的19000 19001
4.server /data --console-address “:9001” -address “:9000” 这是容器内要运行的命令,启动一个名为 “minio” 的服务器,数据存储在 /data 目录下,服务器的控制台地址为 “:9001”,服务地址为 “:9000”
4.访问
ip:19001
ip:9000 为API地址