linux centos 7.6 搭建docker及安装环境部署项目
一. 配置linux 环境
目前docker安装只支持centOS7、centOS6.5
- 也就是说centOS7 是需要3.1以上内核
- centOS6.5 是需要2.6以上内核
linux输出命令
uname -a使用腾讯云 服务centos7.6 重装系统,重置实例的密码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZG2SUIFl-1652839897434)(D:\TyporaWord\Java图片\image-20220512164436263.png)]
二.安装docker
- Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker ,通过 uname -r 命令查看你当前的内核版本:
uname -r
- 使用 root 权限登录 Centos。确保 yum 包更新到最新。
sudo yum update
- 卸载旧版本(如果安装过旧版本的话)
sudo yum remove docker docker-common docker-selinux docker-engine
- 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker-ce --showduplicates | sort -r
- 安装docker
$ sudo yum install docker-ce //由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
- 启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
- 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version
到此安装成功
参考: https://blog.csdn.net/weixin_44704605/article/details/121871607
三. 安装redis,并挂载
下载
docker pull redis
检查镜像
docker images
创建实例并启动
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
docker run -p 6379:6379 --name my-redis --requirepass "123456" \ -v /data/redis/data:/data \ -v /data/redis/conf/redis.conf:/etc/redis/redis.conf \ -d redis redis-server /etc/redis/redis.conf- -p 映射端口
- –name 启动的名称
- -v 映射文件夹
- -d 后台启动redis redis-server 并使用redis.conf配置启动redis
检查运行的容器
docker ps
进入redis容器,测试redis
docker exec -it redis redis-cli auth 123456 //验证密码 set aa b get aa //输出==>b
配置redis持久化
vi /mydata/redis/conf/redis.conf // 输入appendonly yes 并保存 docker restart redis // 重启redis容器
四.安装mysql
拉取Mysql镜像版本
以8.0版本为例,再装有docker的环境下(这里是CentOS 7)输入拉取命令:docker pull mysql:8.0
然后开始拉取镜像,拉取完成后,输入命令:docker images
查看系统里的镜像:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4k37006a-1652839897435)(D:\TyporaWord\Java图片\3499062fe91747c8b5b20129636a1d63.png)]
二.启动Mysql镜像
首先需要挂载
mkdir -p /data/mysql/conf
mkdir -p /data/mysql/logs
mkdir -p /data/mysql/data
mkdir -p /data/mysql/mysql-files
创建配置文件
cd /data/mysql/conf vi my.cnf # Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql #log-error = /var/log/mysql/error.log # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 default-time-zone = '+8:00' max_connections = 2000 max_user_connections = 1900 max_connect_errors = 100000 max_allowed_packet = 50M lower_case_table_names=1 [mysqld] skip-name-resolve sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION default-time-zone = '+8:00' #保存后退出启动
docker run -p 3307:3306 --name my-mysql8 \ -v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf \ -v /data/mysql/logs:/logs \ -v /data/mysql/data:/var/lib/mysql \ -v /data/mysql/mysql-files:/var/lib/mysql-files/ \ -e MYSQL_ROOT_PASSWORD=@Ioter \ -d mysql:8.0参数说明:
–name mysql-8:所建容器的名称
-p 3307:3306 :映射容器服务的 3306 端口到宿主机的 3307 端口,外部主机可以直接通过 宿主机ip:3307 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码
mysql:8.0:使用的镜像,即镜像名:tag
启动后:使用命令docker ps
可以查看镜像状态:
使用docker stop命令停止要删除的容器
docker stop ck10_mariadb
使用以下命令删除单个或多个容器
docker container rm ck10_mariadb
使用以下命令一次删除所有停止的容器
docker rm $(docker ps -a -q)
查看dockers日志
docker logs my-mysql8
配置Mysql远程链接
1.进入镜像
docker exec -it my-mysql8 /bin/bash2.登陆Mysql
mysql -uroot -p[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uj4SAIhY-1652839897436)(D:\TyporaWord\Java图片\watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ2hlcnJ5X0tpbmc=,size_20,color_FFFFFF,t_70,g_se,x_16)]
3.切换数据库
use mysqldocker 中 mysql 执行sql文件
# 查询MySQL 容器 > docker ps -a # 拷贝sql文件到指定路径 91e0e7187765 为容器id > docker cp all.sql 91e0e7187765:/opt/all.sql # 进入容器内部 > docker exec -it 91e0e7187765 bash # 进入mysql root:/ mysql -u用户名 -p用户密码 # 执行sql mysql> use database mysql> source /opt/all.sql
参考文章
https://blog.csdn.net/Cherry_King/article/details/122710591
https://blog.csdn.net/qq_32534855/article/details/107694446
五.安装JDK
官网下载最新稳定JDK:https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html
执行以下命令,新建 JDK 安装目录。
mkdir /usr/java执行以下命令,将 JDK 源码包解压到指定位置。
tar xzf jdk-8u221-linux-x64.tar.gz -C /usr/java执行以下命令,打开
profile文件vim /etc/profile按i切换至编辑模式,在
export PATH USER ...后另起一行,根据您实际使用的 JDK 版本添加以下内容。
export JAVA_HOME=/usr/java/jdk1.8.0_221(您的 JDK 版本) export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib export PATH=$JAVA_HOME/bin:$PATH添加完成后,如下图所示:
按 Esc,输入 :wq,保存文件并返回。
执行以下命令,读取环境变量。
source /etc/profile执行以下命令,查看 JDK 是否已经安装成功。
java -version有版本号,则表示安装成功。
六.安装rabbitMq
创建文件夹 mkdir -p /data/mq/data
# 拉取镜像 docker pull rabbitmq # 查看镜像 docker images # 拉取镜像到本地仓库,这里是直接安装最新的, # 如果需要安装其他版本在rabbitmq后面跟上版本号即可 # docker pull rabbitmq # 启动rabbitMq docker run -d \ -v /data/mq/data:/var/lib/rabbitmq \ -p 5672:5672 -p 15672:15672 --name rabbitmq --restart=always \ --hostname myRabbit rabbitmq:3-management # 启动rabbitmq_management, rabbitmq 为容器的名称,使用id也可以 docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management # ip+端口号登录,用户名和密码默认都是guestrabbitmq管理界面
- 浏览器访问http://ip:15672
- 初始账号密码 guest guest
- 创建admin用户,密码123456
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1shh8Wl1-1652839897437)(D:\TyporaWord\Java图片\watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5p6a5bCP54iq5ZOH,size_20,color_FFFFFF,t_70,g_se,x_16)] - 点击admin
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m8qLw58R-1652839897437)(D:\TyporaWord\Java图片\watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5p6a5bCP54iq5ZOH,size_20,color_FFFFFF,t_70,g_se,x_17)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TZHjjY0X-1652839897438)(D:\TyporaWord\Java图片\watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5p6a5bCP54iq5ZOH,size_20,color_FFFFFF,t_70,g_se,x_18)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5FO4snOB-1652839897438)(D:\TyporaWord\Java图片\watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA5p6a5bCP54iq5ZOH,size_20,color_FFFFFF,t_70,g_se,x_19)]
七.安装nginx
拉取镜像
docker pull nginx
准备挂载的文件目录,并配置文件
mkdir /data/nginx/html
mkdir /data/nginx/conf
mkdir /data/nginx/logstouch /data/nginx/conf/nginx.conf
配置nginx.cnf 文件
user root; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; #tcp_nopush on; #keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #location ^~ /pub/ { # root /home/prod/ftp/ftpuser; # } location / { index index.html index.htm; root /usr/share/nginx/html; #固定的 } location /api { proxy_pass http://172.17.0.1:8082; #配置的是docker0的网关地址 } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } #include /etc/nginx/conf.d/*.conf; }运行并建立带目录映射的容器
docker run -d -p 80:80 --name my-nginx \ -v /data/nginx/html:/usr/share/nginx/html \ -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /data/nginx/logs:/var/log/nginx nginx其中各个配置项含义如下:
-d 后台运行
-p 端口映射 3000宿主机端口 80 docker监听端口
–name 指定容器名称
-v 目录映射 前者是宿主机路径 后者是docker容器路径 具体路径根据自己情况设定
html为网页内容
conf 为nginx配置
logs 为 日志docker 中 nginx 重要命令合集
docker restart my-nginx docker stop my-nginx docker start my-nginx docker rm my-nginx //删除容器 docker exec my-nginx /bin/bash //进入容器在宿主机(windows/mac/linux)安装并启动docker后,会自动创建3个docker network:bridge、host、none。可以用docker network ls命令查看。
用docker network inspect bridge、docker network inspect host、docker network inspect none命令查看各docker network,会发现只有bridge有网段,假如是
{
“Subnet”:“192.168.10.0/24”,
“Gateway”:“192.168.10.1”
}一、假如宿主机是linux系统,有一个监听8000端口的其他进程
在宿主机上执行ifconfig命令,可以发现有一个docker0网卡,注意观察其网段和docker network inspect bridge的网段是一致的,宿主机在此网段下也分配了一个ip,一般是网段中的第一个ip,假如是192.168.10.1。
1)假如用默认的bridge模式启动容器,即在启动时不指定network参数或者指定了–network bridge,
在容器中执行ifconfig命令,可以发现容器的ip也在上面的网段中,假如是192.168.10.2。
在容器中,ping 192.168.10.1,可以ping通。在宿主机中ping 192.168.10.2,可以ping通。
在容器中,可以用192.168.10.1:port的方式访问宿主机的服务。
八.安装项目并启动
创建文件夹 ,并把jar包拷贝到文件中
mkdir -p /data/web/
准备启动文件 exec.sh
#!/bin/bash WORK_HOME=/data/web #export JAVA_HOME=$WORK_HOME/jre1.8.0_261 export PATH=$PATH #chmod +x $JAVA_HOME/bin/java APP_NAME=yihong JAR_NAME=${APP_NAME}.jar cd $WORK_HOME #使用说明,用来提示输入参数 usage() { echo "Usage: sh ${APP_NAME}.sh [start|stop|restart|status]" exit 1 } #检查程序是否在运行 is_exist(){ pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}'` #如果不存在返回1,存在返回0 if [ -z "${pid}" ]; then return 1 else return 0 fi } #启动方法 start(){ is_exist if [ $? -eq 0 ]; then echo "${APP_NAME} is already running. pid=${pid}" else nohup java -jar -Xms128m -Xmx1024m -jar ${JAR_NAME} --spring.profiles.active=hw& fi } #停止方法 stop(){ is_exist if [ $? -eq "0" ]; then kill -9 $pid else echo "${APP_NAME} is not running" fi } #输出运行状态 status(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is running. Pid is ${pid}" else echo "${APP_NAME} is NOT running." fi } #重启 restart(){ stop sleep 10 start } #根据输入参数,选择执行对应方法,不输入则执行使用说明 case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac数据库配置完整
启动 ./exec.sh
启动报错可以查看nohup.out文件
清空文件数据 echo “” > nohup.out