赞
踩
基于业务需求,需要部署spring cloud项目,之前用docker部署jar包,本次需要部署微服务项目记录下全套部署,从零开始。
//查看当前可用镜像 docker images //删除镜像 docker rmi 镜像名称 //从镜像源中搜索mysql相关镜像 docker search mysql //从dokcer镜像网站拉取一个mysql 8.0版本的镜像到本地,:8为指定版本,如不填写则默认为lasted最新版本 docker pull mysql:8 //创建网络,创建一个自己的网络并指定网络段。--opt com.docker.network.driver.mtu=1450 携带此参数才能在运行的容器中访问外网 mynet=网络名称 --subnet=指定网络ip段 docker network create --opt com.docker.network.driver.mtu=1450 mynet --subnet 172.19.0.0/24 //查看网络情况 docker network inspect mynet //删除网络 docker network rm mynet // 指定镜像运行一个容器到本地,--name 容器名称 --network 指定网络(非必选,指定ip时必填) --ip指定ip(非必选,如果想多个容器间通信时必填) -p 指定容器端口和宿主机端口的映射 -d 后台运行 最后一位为镜像名称,必选时已拉取到本地的 docker run --name nacos --network mynet --ip 172.19.0.1 -e MODE=standalone -p 8848:8848 -d nacos/nacos-server //查看运行的容器 docker ps //重启容器 nacos为容器名称或容器ID都可以 docker restart nacos //查看容器日志 dokcer logs nacos //查看全部容器 docker ps -a //进入容器 在容器中执行exit可退出当前容器系统,回到宿主机 docker exec -it 容器ID或名称 bash //复制文件进入容器 /home/data 宿主机文件路径 nginx 容器名称 /home为容器内路径 docker cp /home/data nginx:/home //从容器中复制文件到宿主机 同上,只是换了个位置 dokcer cp nginx:/home/data /home //容器日志查看-可支持搜索和筛选,具体的自行查询 docker logs 容器ID或名称
微服务占用内容较大,请注意此问题。
由于是微服务项目,所以要给容器固定下ip,防止后期重启服务器导致ip变动了麻烦,特别是nacos,redis,mysql这种容器ip
创建一个网络,用于固定容器启动时的ip指定,防止重启后ip地址变更。创建网络这部分是重点,因为为容器固定ip地址和容器内访问外部网络都是很重要的,是必不可少的。
docker network create --opt com.docker.network.driver.mtu=1450 mynet --subnet 172.19.0.0/24
由于docker需要指定网络,所以必须要在命令上增加 --subnet 172.190.0.0/24 ip网段可以自定义为未占用的网段,但/24不能改,如不指定在默认是/16。/16指的是子网掩码为255.255.0.0 /24为255.255.255.0 必须指定为/24时,在创建容器时才能通过–ip来进行指定ip地址。
–opt com.docker.network.driver.mtu=1450 此参数是为解决docker容器访问外部网络通信。具体原因可参考此链接
//拉取一个mysql5.7镜像
docker pull mysql:5.7
//运行容器 指定网络及ip,不然其他容器无法访问--注意设置时区,不然时间对不上,lower_case_table_names设置忽略表名忽略大小写
docker run --network mynet --ip 172.19.0.3 -p 3306:3306 -e TZ=Asia/Shanghai --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --lower_case_table_names=1 --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
//进入容器
docker exec -it mysql bash
//进入mysql
mysql -uroot -p123456
//重新创建一个root用户,赋予全部权限,并且允许远程连接
grant all privileges on *.* to root@'%' identified by 'craete@123456';
//退出容器 注意这里两次exit,第一次是退出mysql 第二次退出mysql容器回到宿主机
exit
exit
//至此mysql安装完成,可通过navicat等工具进行远程连接,配置naocs所需的数据库及表
查看nacos版本
docker search nacos
//直接拉去最新的版本,注意此处的名称,并不是nacos,不要盲目的安装
docker pull nacos/nacos-server
//运行容器
docker run --name nacos --network mynet --ip 172.19.0.2 -e MODE=standalone -p 8848:8848 -d nacos/nacos-server
//配置mysql数据源头,由于docker容器中默认没有vi编辑功能,所以我都是直接复制文件出来修改
docker cp nacos:/home/nacos/conf/application.properties /home/nacos
配置mysql的ip和密码信息。
配置之后重启nacos容器即可,docker restart nacos
[此处注意,如果nacos和mysql不在同一个网络适配器上,则需要修改docker容器对应的配置]
获取redis镜像 默认获取最新的,可以通过docker starch redis查看所有版本
//获取一个最新版本
docker pull redis
//运行到容器中
docker run --name redis --network mynet --ip 172.19.0.4 -p 6379:6379 -e redis_password=123456 -d redis redis-server --appendonly yes
//拉取nginx
docker pull nginx
//运行到容器--注意此处映射了80端口和443端口,443端口用户https配置
docker run --name nginx --network mynet --ip 172.19.0.5 -p 80:80 -p 443:443 -d nginx
//配置网站映射,通过复制文件出来,也可以直接配置为宿主机文件挂载,具体的自行查询docker文件挂载
docker cp nginx:/etc/nginx/conf.d/default.conf /home/nginx
新建Dockerfile文件,内容如下:
# 拉取jdk17作为基础镜像,这里的名称及版本就是拉取到本地的镜像名称和版本号
FROM openjdk:17
# 作者
MAINTAINER jyj <jyj@163.com>
# 添加jar到镜像目录/jar并命名为gateway.jar
ADD gateway.jar /jar/gateway.jar
# 镜像启动后映射的端口
EXPOSE 8080
# jar运行命令,参数使用逗号隔开
ENTRYPOINT ["java","-jar","-Xms256m","-Xmx256m","-XX:PermSize=256m","-XX:MaxPermSize=256m","-XX:MaxNewSize=256m","/jar/gateway.jar"]
将Dockerfile文件同jar包放在同一个目录中
首先执行build将我们的jar包运行为一个镜像
//注意,首先得进入到存放DockerFile目录下,比如我这里进入的是:/data/java/gateway目录后执行,结尾有一个点 .不能去除
docker build -t gateway .
//查看镜像
docker images
执行成功后即可看到名为gateway的镜像
运行容器
//运行一个容器 --切记要指定网络,ip可以不指定,但必须将此网络和nacos置于同一个网络中,否则无法相互通信
docker run --network mynet --ip 172.19.0.6 -e TZ=Asia/Shanghai --name gateway -p 9600:9600 -d gateway
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。