docker搭建微服务(yudaocloud)合集
防火墙
建议直接先关闭防火墙,以便测试,安装结束后再逐个端口开启
查看防火墙状态:
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
docker exec -it mysql /bin/bash
mysql -uroot -p
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123456';
# 刷新数据库
flush privileges;
docker安装nginx
下载最新Nginx镜像(等同于docker pull nginx:latest
):
docker pull nginx
创建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; #} }
创建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
结果检测(需要再/home/nginx/html 目录下放入你前端dist文件夹中的内容):
curl 127.0.0.1
补充,如果配置更改,请执行以下命令,会重新加载Nginx配置:
docker exec nginx nginx -s reload
docker安装nacos
拉取最新nacos镜像:
docker pull docker.io/nacos/nacos-server
启动nacos(单机版并且使用内置数据库):
docker run --name nacos -p 8848:8848 -p 9848:9848 --env MODE=standalone --restart=always -d nacos/nacos-server
访问nacos:
使用ip地址加端口号进行访问:
http://ip:8848/nacos
docker安装redis
拉取最新redis镜像:
docker pull redis:latest
运行容器:
docker run -d --name redis -p 6379:6379 --restart=always redis
docker安装xxl-job
拉取xxl-job镜像:
docker pull xuxueli/xxl-job-admin:2.3.0
运行容器(注意:首先,请配置自己的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