docker搭建微服务(yudaocloud)基础设施合集

275 阅读4分钟

防火墙

建议直接先关闭防火墙,以便测试,安装结束后再逐个端口开启

查看防火墙状态:
sudo firewall-cmd --state

关闭防火墙(命令1关闭,命令2禁用防火墙服务,使其在系统重启后不再启动):
sudo systemctl stop firewalld
sudo systemctl disable firewalld

开启防火墙:
sudo systemctl start firewalld

该命令将显示在 public 区域中已开放的端口列表:
sudo firewall-cmd --zone=public --list-ports

查看所有开放的端口和相关规则:
sudo firewall-cmd --list-all

开放8080端口:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

关闭8080端口:
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

安装docker

一、准备

卸载旧版本:

yum remove docker docker-common docker-selinux docker-engine
yum remove docker-ce

卸载后将保留 /var/lib/docker 的内容(镜像、容器、存储卷和网络等)。

rm -rf /var/lib/docker

1.安装依赖软件包

yum install -y yum-utils device-mapper-persistent-data lvm2
# 安装前可查看device-mapper-persistent-data和lvm2是否已经安装
rpm -qa|grep device-mapper-persistent-data
rpm -qa|grep lvm2

2.设置yum源

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

3.更新yum软件包索引

yum makecache fast

二、安装

1.安装最新版本

yum install docker-ce -y
# 安装指定版本docker-ce可使用以下命令查看
yum list docker-ce.x86_64 --showduplicates | sort -r
# 安装完成之后可以使用命令查看
docker version

2.配置镜像加速器

修改daemon配置文件 -> 加速器

vim /etc/docker/daemon.json

将以下内容粘贴到daemon.json文件中,并保存退出:

{
  "registry-mirrors": ["https://请自行去阿里云镜像搜索.mirror.aliyuncs.com"]
}

执行以下命令以重新加载配置文件并重启docker服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

设置开机重启

systemctl enable docker

三、拓展docker重启相关

重启docker服务:

sudo systemctl restart docker

--restart具体参数值详细信息:

- no        // 默认策略,容器退出时不重启容器;
- on-failure    // 在容器非正常退出时(退出状态非0)才重新启动容器;
- on-failure:3    // 在容器非正常退出时重启容器,最多重启3次;
- always      // 无论退出状态是如何,都重启容器;
- unless-stopped  // 在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。

使用以下命令设置容器的重启策略:

docker update --restart=always 容器ID(或者容器名)

docker安装mysql 5.7

安装

docker pull mysql:5.7

运行容器(--net=host和宿主机共享网络命名空间,所以容器端口也是3306)

docker run -it -d --name mysql --net=host \
-m 2048m -v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/config:/etc/mysql/conf.d  \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai mysql:5.7 \
--restart=always \
--lower_case_table_names=1

配置MySQL

  1. 进入容器伪终端
docker exec -it mysql /bin/bash
  1. 进入mysql
mysql -uroot -p
  1. 配置支持远程连接
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123456';
# 刷新数据库
flush privileges;

docker安装nginx

  1. 下载最新Nginx镜像(等同于docker pull nginx:latest):

    docker pull nginx
    
  2. 创建Nginx配置文件:

  • 创建挂载目录:

    mkdir -p /home/nginx/conf
    mkdir -p /home/nginx/log
    mkdir -p /home/nginx/html
    
  • /home/nginx/conf目录下创建Nginx外部挂载的配置文件nginx.conf

    vim /home/nginx/conf/nginx.conf
    

    内容:

    user nginx;
    worker_processes auto;
    error_log  /var/log/nginx/error.log notice;
    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;
    
       keepalive_timeout  65;
    
       #gzip  on;
    
       include /etc/nginx/conf.d/*.conf;
    }
    
  • /home/nginx/conf目录下创建文件conf.d/default.conf

    vim /home/nginx/conf/conf.d/default.conf
    

    内容:

     server {
           listen       80;
           listen  [::]:80;
           server_name  localhost;
    
           #access_log  /var/log/nginx/host.access.log  main;
    
           location / {
               root   /usr/share/nginx/html;
               index  index.html index.htm;
           }
    
           #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;
           }
    
           # proxy the PHP scripts to Apache listening on 127.0.0.1:80
           #
           #location ~ \.php$ {
           #    proxy_pass   http://127.0.0.1;
           #}
    
           # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
           #
           #location ~ \.php$ {
           #    root           html;
           #    fastcgi_pass   127.0.0.1:9000;
           #    fastcgi_index  index.php;
           #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
           #    include        fastcgi_params;
           #}
    
           # deny access to .htaccess files, if Apache's document root
           # concurs with nginx's one
           #
           #location ~ /\.ht {
           #    deny  all;
           #}
       }
    
  1. 创建Nginx容器并运行:

    docker run \
    -p 80:80 -p 443:443 \
    --name nginx \
    -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
    -v /home/nginx/log:/var/log/nginx \
    -v /home/nginx/html:/usr/share/nginx/html \
    --restart=always \
    -d nginx:latest
    
  2. 结果检测(需要再/home/nginx/html 目录下放入你前端dist文件夹中的内容):

    curl 127.0.0.1
    
  3. 补充,如果配置更改,请执行以下命令,会重新加载Nginx配置:

    docker exec nginx nginx -s reload
    

docker安装nacos

  1. 拉取最新nacos镜像:

    docker pull docker.io/nacos/nacos-server
    
  2. 启动nacos(单机版并且使用内置数据库):

    docker run --name nacos -p 8848:8848 -p 9848:9848 --env MODE=standalone --restart=always -d nacos/nacos-server
    
  3. 访问nacos: 使用ip地址加端口号进行访问:

    http://ip:8848/nacos
    

docker安装redis

  1. 拉取最新redis镜像:

    docker pull redis:latest
    
  2. 运行容器:

    docker run -d --name redis -p 6379:6379 --restart=always redis
    

docker安装xxl-job

  1. 拉取xxl-job镜像:

    docker pull xuxueli/xxl-job-admin:2.3.0
    
  2. 运行容器(注意:首先,请配置自己的xxl-job,自行搜索拉取gitee/github。另外,这里使用docker部署的mysql5.7不能用127.0.0.1,请改成自己的ip):

    docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456 --xxl.job.accessToken=测试环境可以不写" -p 9090:8080 --name xxl-job-admin -d xuxueli/xxl-job-admin:2.3.0
    

docker容器部署踩坑

问题:使用docker启动nacos时,报错如下:

docker: Error response from daemon: driver failed programming external connectivity on endpoint nacos (c437a620eb1ddcf1980adc43f7200d003fb9de512a42485f2544f5504d84ca96): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9849 -j DNAT --to-destination 172.17.0.3:9849 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1)).

解决办法:重启docker服务后问题解决:

sudo systemctl restart docker