linux centos 7.6 搭建docker及安装环境部署项目

linux centos 7.6 搭建docker及安装环境部署项目

一. 配置linux 环境

  1. 目前docker安装只支持centOS7、centOS6.5

    1. 也就是说centOS7 是需要3.1以上内核
    2. centOS6.5 是需要2.6以上内核

    linux输出命令

     uname -a
    
  2. 使用腾讯云 服务centos7.6 重装系统,重置实例的密码

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZG2SUIFl-1652839897434)(D:\TyporaWord\Java图片\image-20220512164436263.png)]

二.安装docker

  1. Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker ,通过 uname -r 命令查看你当前的内核版本:

uname -r

  1. 使用 root 权限登录 Centos。确保 yum 包更新到最新。

sudo yum update

  1. 卸载旧版本(如果安装过旧版本的话)

sudo yum remove docker docker-common docker-selinux docker-engine

  1. 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

  1. 设置yum源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

  1. 可以查看所有仓库中所有docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates | sort -r

  1. 安装docker

$ sudo yum install docker-ce //由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0

  1. 启动并加入开机启动

$ sudo systemctl start docker
$ sudo systemctl enable docker

  1. 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

docker version

到此安装成功

参考: https://blog.csdn.net/weixin_44704605/article/details/121871607

三. 安装redis,并挂载

  1. 下载

    docker pull redis

  2. 检查镜像

    docker images

  3. 创建实例并启动

    1. mkdir -p /mydata/redis/conf

    2. 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
  4. 检查运行的容器

    1. docker ps
  5. 进入redis容器,测试redis

    1. docker exec -it redis redis-cli
          auth 123456 //验证密码
      	set aa b
      	get aa  //输出==>b
      
  6. 配置redis持久化

    vi /mydata/redis/conf/redis.conf // 输入appendonly yes 并保存
    docker restart redis  // 重启redis容器
    

四.安装mysql

  1. 拉取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/bash
    

    2.登陆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 mysql
    

    docker 中 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

  1. 官网下载最新稳定JDK:https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html

  2. 执行以下命令,新建 JDK 安装目录。

    mkdir /usr/java
    
  3. 执行以下命令,将 JDK 源码包解压到指定位置。

    tar xzf jdk-8u221-linux-x64.tar.gz -C /usr/java
    
  4. 执行以下命令,打开profile 文件

    vim /etc/profile
    
  5. 按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
    

    添加完成后,如下图所示:

  6. Esc,输入 :wq,保存文件并返回。

  7. 执行以下命令,读取环境变量。

    source /etc/profile
    
  8. 执行以下命令,查看 JDK 是否已经安装成功。

    java -version
    

    有版本号,则表示安装成功。

六.安装rabbitMq

  1. 创建文件夹 mkdir -p /data/mq/data

  2. # 拉取镜像
    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+端口号登录,用户名和密码默认都是guest
    
  3. rabbitmq管理界面

    • 浏览器访问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

  1. 拉取镜像

    docker pull nginx

  2. 准备挂载的文件目录,并配置文件

    mkdir /data/nginx/html
    mkdir /data/nginx/conf
    mkdir /data/nginx/logs

    touch /data/nginx/conf/nginx.conf

  3. 配置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;
    }    
    
  4. 运行并建立带目录映射的容器

    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 为 日志

  5. docker 中 nginx 重要命令合集

    docker restart my-nginx
    docker stop my-nginx
    docker start my-nginx
    docker rm my-nginx         //删除容器
    docker exec my-nginx /bin/bash  //进入容器
    
    
  6. 在宿主机(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的方式访问宿主机的服务。

八.安装项目并启动

  1. 创建文件夹 ,并把jar包拷贝到文件中

    mkdir -p /data/web/

  2. 准备启动文件 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
    
  3. 数据库配置完整

  4. 启动 ./exec.sh

  5. 启动报错可以查看nohup.out文件

    清空文件数据 echo “” > nohup.out


版权声明:本文为qq_36298494原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。