文章目录
docker 安装内容一系列前置条件
docker 安装 详见我https://blog.csdn.net/learning_IT_boy/article/details/115691701
查看curl版本
curl -V
出现-bash: curl: command not found
先安装一下curl
wget https://curl.haxx.se/download/curl-7.56.1.tar.gz
tar xvf curl-7.56.1.tar.gz
cd curl-7.56.1
./configure –disable-shared
make
make install
curl -V
把防火墙关了,真正上线的服务器都有安全组
systemctl stop firewalld
看日志
docker logs -t --tail 100 镜像id或者镜像名称
进入容器内部把配置文件copy出来
docker exec -it 容器名 bash
找到要copy文件的路径(我是通过cd .. 一点点找的一般的pull都在 /usr/share/xxx)
docker cp 容器名:文件路径 宿主机路径
如: docker cp ES01:/usr/share/elasticsearch /home/mydata
查看拉取latest
docker image inspect 镜像名:latest | grep -i version
1.docker部署mysql
拉取mysql(docker pull mysql 默认拉取最新 加上:xx拉取指定版本)
docker pull mysql:5.7
docker启动mysql
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
-p 是做端口映射,此时将服务器中的8888(冒号前的端口)端口映射到容器中的8888(冒号后的端口)端口
-e 指定环境变量,容器中可以使用该环境变量(root )
进入到mysql容器内部
docker exec -it mysql /bin/bash
启动mysql
mysql -uroot -proot --default-character-set=utf8
查看mysql配置
mysql> show databases;
设置密码
mysql> set password=password('root');
2.docker部署nginx
拉取一下nginx镜像
查看历史版本,下载需要的版本
curl https://registry.hub.docker.com/v1/repositories/nginx/tags| tr -d '[\[\]" ]' | tr '}' '\n'| awk -F: -v image='centos' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
docker pull nginx:1.9.9
把docker下载的nginx配置 copy出来
挂载宿主机nginx 配置目录到docker目录下
这样的话你修改宿主机也就是 /home/mydata/nginx下的conf文件,docker启动的nginx也能用了
docker run -di --name=nginx -p 80:80 -v /home/mydata/nginx/:/etc/nginx nginx
当然如果你下载的是latest,查看last版本
docker image inspect nginx:latest | grep -i version
3.docker部署redis
拉取docker 镜像
curl https://registry.hub.docker.com/v1/repositories/redis/tags| tr -d '[\[\]" ]' | tr '}' '\n'| awk -F: -v image='centos' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
docker pull redis:6.2.3
挂载配置
1…准备redis的一些配置文件
首先在/home/mydata/redis/data 创建好文件夹用于存放redis数据,这个文件夹位置也可以自己选。
然后在/home/mydata/redis/conf/ 创建好redis.conf文件。用户redis的配置。(-p :逐级创建文件,没有就创建)
mkdir -p /home/mydata/redis/data
mkdir -p /home/mydata/redis/conf
docker pull 下来的redis里是没有配置文件的只能自己copy
办法是redis.conf从github上copy过来
https://github.com/redis/redis
或者Tags选准确版本
cd /home/mydata/redis/conf/
touch redis.conf
vim redis.conf
修改配置
requirepass yourpassword#给redis设置密码
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,意为是否以守护进程方式启动,可后台运行,不要改为yes 否则可能redis会启动失败
databases 16 #数据库个数(可选),我修改了这个只是查看是否生效。
dir /home/mydata/redis/data #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
2.启动redis
docker run -d --privileged=true -p 6379:6379 -v /home/mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /home/mydata/redis/data:/usr/local/redis/data --name redis redis redis-server /usr/local/etc/redis/redis.conf
-d:设置redis后台运行
–privileged=true:大约在0.6版,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
-p 6379:6379 :映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。
-v :挂载目录,规则与端口映射相同。Docker目录挂载可以参见关于Docker目录挂载的总结
/home/mydata/redis/conf/redis.conf:就是之前我们创建的外部配置文件目录
/home/mydata/redis/conf/redis.conf:etc/redis/redis.conf:这样在容器启动后,容器内会自动创建/etc/redis/redis.conf的目录。通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。
/home/mydata/redis/data:/usr/local/redis/data :映射数据目录
redis-server /etc/redis/redis.conf:以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/home/mydata/redis/conf/redis.conf
–appendonly yes redis持久化
4.docker部署rabbitmq
拉取docker 镜像
curl https://registry.hub.docker.com/v1/repositories/rabbitmq/tags| tr -d '[\[\]" ]' | tr '}' '\n'| awk -F: -v image='centos' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
docker pull rabbitmq:3.8.9
启动
docker run -di --name=rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:3.8.9
进入容器内部
docker exec -it rabbitmq /bin/bash
安装管理插件
rabbitmq-plugins enable rabbitmq_management
访问15672即可
5.docker部署zookeeper
拉取docker 镜像
curl https://registry.hub.docker.com/v1/repositories/zookeeper/tags| tr -d '[\[\]" ]' | tr '}' '\n'| awk -F: -v image='centos' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
docker pull zookeeper:3.7.0
启动
docker run -di --name=zookeeper -p 2181:2181 zookeeper:3.7.0
6.docker部署elasticsearch
拉取docker 镜像
curl https://registry.hub.docker.com/v1/repositories/elasticsearch/tags| tr -d '[\[\]" ]' | tr '}' '\n'| awk -F: -v image='centos' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
docker pull elasticsearch:7.5.0
修改内存
sysctl -w vm.max_map_count=262144
1.启动单机版
docker run -di --name=elasticsearch -p 9200:9200 -p 9300:9300 -e "ES_JAVA_OPTS=-Xms128m -Xmx128m" -e "discovery.type=single-node" -e "cluster.name=elasticsearch" -e "publish_address=0.0.0.0:9200" -e "http.cors.enabled=true" -e "http.cors.allow-origin="*"" -v /home/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.5.0
-e "ES_JAVA_OPTS=-Xms128m -Xmx128m"是jvm内存,一般是你可用内存的一半,free -m查看内存
-e “discovery.type=single-node” 单节点模式
-e “cluster.name=elasticsearch” 集群名称
-e "publish_address=0.0.0.0:9200"对外访问接口
-e “http.cors.enabled=true” -e “http.cors.allow-origin= “*”” 跨域访问开启
注意:-e"" 设置变量=号中间不能有空格,否则即使启动也可能会不好使
安装zk分词器
docker exec -it elasticsearch /bin/bash
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip
重启
docker restart elasticsearch
2.启动集群版
我们只需要在一台虚拟机上面搭建多个docker容器即可
1.调高JVM线程数限制数量
1、修改sysctl.conf文件
vim /etc/sysctl.conf
修改
net.ipv4.ip_forward=1
2、在最下面加入内容
vm.max_map_count=262144
3、启用配置
sysctl -p
2.建立一个挂载目录
先启动一下单机版的es,之后再删了
cd /usr/local
## 配置文件,用于挂载
mkdir -p es/config
cd es
mkdir data1
mkdir data2
mkdir data3
mkdir logs1
mkdir logs2
mkdir logs3
mkdir plugins1
mkdir plugins2
mkdir plugins3
#增加es文件夹下个文件写的权利
chmod 777 -R /usr/local/es
#从docker容器中copy出yml文件
docker cp 单机容器名:/usr/share/elasticsearch/config/elasticsearch.yml /usr/local/es/config
然后在/es/config目录下分别放入es1.yml、es2.yml
3.修改es.yml配置
vim es1.yml
# 设置绑定的ip地址,可以使ipv4或者ipv6
network.bind_host: 0.0.0.0
# 设置其他节点和该节点交互的ip地址
network.publish_host: 172.21.0.13
http.port: 9200
node.master: true
node.data: true
node.name: node-1 # 端口
cluster.name: es # 集群名称,同一集群要一致
transport.tcp.port: 9300 #对外访问端口
discovery.seed_hosts: ["172.21.0.13:9300", "172.21.0.13:9301", "172.21.0.13:9302"]
cluster.initial_master_nodes: ["172.21.0.13:9300", "172.21.0.13:9301", "172.21.0.13:9302"]
# 跨域请求配置(为了让类似head的第三方插件可以请求es)
http.cors.enabled: true
http.cors.allow-origin: "*"
# 防止脑裂最好是n/2+1
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 60s
vim es2.yml
# 设置绑定的ip地址,可以使ipv4或者ipv6
network.bind_host: 0.0.0.0
# 设置其他节点和该节点交互的ip地址
network.publish_host: 172.21.0.13
http.port: 9201
node.master: true
node.data: true
node.name: node-2 # 端口
cluster.name: es # 集群名称,同一集群要一致
transport.tcp.port: 9301 #对外访问端口
discovery.seed_hosts: ["172.21.0.13:9300", "172.21.0.13:9301", "172.21.0.13:9302"]
cluster.initial_master_nodes: ["172.21.0.13:9300", "172.21.0.13:9301", "172.21.0.13:9302"]
# 跨域请求配置(为了让类似head的第三方插件可以请求es)
http.cors.enabled: true
http.cors.allow-origin: "*"
# 防止脑裂最好是n/2+1
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 60s
vi es3.yml
4.启动es
启动容器:
es1
docker run -e ES_JAVA_OPTS="-Xms128m -Xmx128m" -d -p 9200:9200 -p 9300:9300 -p 5601:5601 -v /usr/local/es/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/es/plugins1:/usr/share/elasticsearch/plugins -v /usr/local/es/logs1:/usr/share/elasticsearch/logs -v /usr/local/es/data1:/usr/share/elasticsearch/data --name=ES01 elasticsearch:7.5.0
es2
docker run -e ES_JAVA_OPTS="-Xms128m-Xmx128m" -d -p 9201:9201 -p 9301:9301 -v /usr/local/es/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/es/logs2:/usr/share/elasticsearch/logs -v /usr/local/es/plugins2:/usr/share/elasticsearch/plugins -v /usr/local/es/data2:/usr/share/elasticsearch/data --name=ES02 elasticsearch:7.5.0
测试一下
http://192.168.112.150:9200/_cat/nodes?pretty
或者linux
curl 127.0.0.1:9200/_cluster/health?pretty
{
"cluster_name" : "es",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
3.安装head监控
docker pull mobz/elasticsearch-head:5
docker run -d -p 9100:9100 --name=head mobz/elasticsearch-head:5
网址
http://81.70.170.21:9100/
创建索引F12 报错406
一.进入容器(head为容器ID,请改成自己的)
[root@localhost ~]# docker exec -it head /bin/bash
root@b93fa4e29ba2:/usr/src/app# apt-get update
root@b93fa4e29ba2:/usr/src/app# apt-get install vim
root@b93fa4e29ba2:/usr/src/app# vim _site/vendor.js
修改
:6886
1. 6886行 /contentType: "application/x-www-form-urlencoded
改成 contentType: "application/json;charset=UTF-8"
2. 7573行 var inspectData = s.contentType ==`= "application/x-www-form-urlencoded" &&`
改成 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
按键盘Esc
:wq
退出重启
root@b93fa4e29ba2:/usr/src/app/_site# exit
exit
[root@localhost ~]# docker restart head
4.kibana连接
Kibana连接ES集群:
curl https://registry.hub.docker.com/v1/repositories/kibana/tags| tr -d '[\[\]" ]' | tr '}' '\n'| awk -F: -v image='centos' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
docker pull kibana:7.5.0
docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name=kibana --network=container:ES01 kibana:7.5.0
修改挂载配置
docker exec -it kibana bash
docker cp kibana:/usr/share/kibana/config/kibana.yml /usr/local/es/config
vi config/kibana.yml
# 服务端口,默认5601
server.port: 5601
server.host: "0.0.0.0"
# 允许访问IP server.host: "0.0.0.0"
# 设置 elasticsearch 节点及端口有几个写几个,别多写
elasticsearch.hosts: ["http://81.70.170.21:9200", "http://81.70.170.21:9201", "http://81.70.170.21:9202"]
#自己设置登录密码
elasticsearch.username: "wqy"
elasticsearch.password: "wqy"
#汉化
i18n.locale: "zh-CN"
再次启动
docker stop kibana
docker rm kibana
docker run -it -d --name=kibana -p 5601:5601 -v /usr/local/es/config/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.5.0
查看
http://81.70.170.21/:5601/
7.docker配置集成dockerMaven插件
1.创建私有仓库
docker pull registry
docker run -di --name=registry -p 5000:5000 registry
vim /etc/docker/daemon.json
"insecure-registries":["81.70.170.21:5000"]
systemctl restart docker
java的pom文件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<id>build-images</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>test/${project.artifactId}:${project.version}</imageName>
<dockerHost>http://81.70.170.21:2375/</dockerHost>
<baseImage>java:8</baseImage>
<entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
<!--"-Dspring.profiles.active=dev"-->
<!-- copy the service's jar file from target into the root directory of the image -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
8.docker部署jenkins
拉取镜像安装最新稳定版
docker pull jenkins/jenkins:lts
目录映射
mkdir -p /mydata/jenkins_home
sudo chown -R 1000 /home/mydata/jenkins_home
docker run -di --name=jenkins -p 8080:8080 -v /home/mydata/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
访问启动的jenkins
http://81.70.170.21:8080/
第一次启动会有密码
jenkins 开始密码
docker logs jenkins
或者
tail -f /home/mydata/jenkins_home/secrets/initialAdminPassword
1.安装jdk和maven插件
安装jdk(全部配置)
配置maven
2.配置ssh
ssh是用来连接服务器的
1.先配置凭证
2.配置ssh
保存就行
3.部署应用
保存
cd /home/mydata/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.6.2/conf/
vim setting.xml
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
docker restart jenkins