一、Docker基本知识
写DockerFile文件创建自己的镜像
volumn挂载目录
容器间通信:同一network下
docker-compose进行多容器部署
二、部署过程(docker-hub网站里有现成容器部署方案)
1.部署nacos
docker-compose中内容如下:
version: "3.3" services: nacos: image: nacos/nacos-server:2.0.2 #镜像 ports: #端口映射,容器端口映射到服务器端口上 - "8848:8848" environment: #运行参数配置 - "JVM_XMS=256m" - "JVM_XMX=256m" - "MODE=standalone"
2.部署mysql
docker-compose中内容更新如下:
version: "3.9" networks: yingxue_network: volumes: data: services: nacos: image: nacos/nacos-server:2.0.2 ports: - "8848:8848" environment: - "JVM_XMS=256m" - "JVM_XMX=256m" - "MODE=standalone" networks: - yingxue_network mysql: image: mysql:5.7 ports: - "3306:3306" networks: - yingxue_network volumes: - data:/var/lib/mysql #挂载数据卷,参考的docker-hub - ./yingxue.sql:/docker-entrypoint-initdb.d/yingxue.sql #将这个sql文件挂载到初始化位置,让这个sql文件执行 environment: - "MYSQL_ROOT_PASSWORD=root" - "MYSQL_DATABASE=yingxue"
3.部署redis
docker-compose中内容更新如下:
version: "3.3" networks: yingxue_network: volumes: data: redisdata: services: nacos: image: nacos/nacos-server:2.0.2 ports: - "8848:8848" environment: - "JVM_XMS=256m" - "JVM_XMX=256m" - "MODE=standalone" networks: - yingxue_network mysql: image: mysql:5.7 ports: - "3306:3306" networks: - yingxue_network volumes: - data:/var/lib/mysql - ./yingxue.sql:/docker-entrypoint-initdb.d/yingxue.sql environment: - "MYSQL_ROOT_PASSWORD=123" - "MYSQL_DATABASE=yingxue" redis: image: redis ports: - "6379:6379" volumes: - redisdata:/data
4.部署微服务后台代码
对于微服务来说,没法用maven对每一个进行打包。
maven聚合打包位置,注意不能在每个模块下边用package,要点击根目录下的package,这样就能打包所有的模块了。
上边是错的,正确的打包位置:
如果部署过程中报没有主清单属性,则需要在每个模块添加插件,并且指明主类。
打包完以后,每一个模块下都会出现一个jar包。
然后我们创建一个image文件夹,下边有各个模块的文件夹,然后把对应jar包放入对应文件夹,并在每一个文件夹下创建一个DockerFile文件,借助这个将其构建为镜像。
我们以其中两个DockerFile文件为例。来看一下它是如何构建镜像的。
FROM openjdk:8-jre ENV APP_PATH=/apps WORKDIR $APP_PATH COPY yingxue-admins-1.0-SNAPSHOT.jar $APP_PATH/app.jar EXPOSE 8980 ENTRYPOINT ["java","-jar"] CMD ["app.jar"]
FROM openjdk:8-jre ENV APP_PATH=/apps WORKDIR $APP_PATH COPY yingxue-category-1.0-SNAPSHOT.jar $APP_PATH/app.jar EXPOSE 8981 ENTRYPOINT ["java","-jar"] CMD ["app.jar"]
然后我们在Docker-compose文件中增加这几个镜像,运行docker-compose让这些镜像在容器中运行。
version: "3.9" networks: yingxue_network: volumes: data: redisdata: services: nacos: image: nacos/nacos-server:2.0.2 ports: - "8848:8848" environment: - "JVM_XMS=256m" - "JVM_XMX=256m" - "MODE=standalone" networks: - yingxue_network mysql: image: mysql:5.7 ports: - "3306:3306" networks: - yingxue_network volumes: - data:/var/lib/mysql - ./yingxue.sql:/docker-entrypoint-initdb.d/yingxue.sql environment: - "MYSQL_ROOT_PASSWORD=root" - "MYSQL_DATABASE=yingxue" redis: image: redis:5.0.10 ports: - "6379:6379" volumes: - redisdata:/data admins: build: context: ./images/admins dockerfile: Dockerfile ports: - "8980:8980" depends_on: - mysql - nacos - redis category: build: context: ./images/category dockerfile: Dockerfile ports: - "8981:8981" depends_on: - mysql - nacos - redis gateway: build: context: ./images/gateway dockerfile: Dockerfile ports: - "9999:9999" depends_on: - mysql - nacos - redis users: build: context: ./images/users dockerfile: Dockerfile ports: - "8982:8982" depends_on: - mysql - nacos - redis videos: build: context: ./images/videos dockerfile: Dockerfile ports: - "8983:8983" depends_on: - mysql - nacos - redis
我们在linux系统下/root目录下创建一个运行当前项目的文件夹,然后将compose文件以及image文件夹放进去。然后进入到当前项目文件夹,使用docker-compose up -d命令运行即可。
补充:docker-compose具体语法详解:
version: "3" # 指定docker-compose语法版本 services: # 从以下定义服务配置列表 server_name: # 可将server_name替换为自定义的名字,如mysql/php都可以 container_name: container_name # 指定实例化后的容器名,可将container_name替换为自定义名 image: xxx:latest # 指定使用的镜像名及标签 build: # 如果没有现成的镜像,需要自己构建使用这个选项 context: /xxx/xxx/Dockerfile # 指定构建镜像文件的路径 dockerfile: .... # 指定Dockerfile文件名,上一条指定,这一条就不要了 ports: - "00:00" # 容器内的映射端口,本地端口:容器内端口 - "00:00" # 可指定多个 volumes: - test1:/xx/xx # 这里使用managed volume的方法,将容器内的目录映射到物理机,方便管理 - test2:/xx/xx # 前者是volumes目录下的名字,后者是容器内目录 - test3:/xx/xx # 在文件的最后还要使用volumes指定这几个tests volumes_from: # 指定卷容器 - volume_container_name # 卷容器名 restarts: always # 设置无论遇到什么错,重启容器 depends_on: # 用来解决依赖关系,如这个服务的启动,必须在哪个服务启动之后 - server_name # 这个是名字其他服务在这个文件中的server_name - server_name1 # 按照先后顺序启动 links: # 与depend_on相对应,上面控制容器启动,这个控制容器连接 - mysql # 值可以是- 服务名,比较复杂,可以在该服务中使用links中mysql代替这个mysql的ip networks: # 加入指定的网络,与之前的添加网卡名类似 - my_net # bridge类型的网卡名 - myapp_net # 如果没有网卡会被创建,建议使用时先创建号,在指定 environment: # 定义变量,类似dockerfile中的ENV - TZ=Asia/Shanghai # 这里设置容器的时区为亚洲上海,也就解决了容器通过compose编排启动的 时区问题!!!!解决了容器的时区问题!!! 变量值: 变量名 # 这些变量将会被直接写到镜像中的/etc/profile command: [ #使用 command 可以覆盖容器启动后默认执行的命令 '--character-set-server=utf8mb4', #设置数据库表的数据集 '--collation-server=utf8mb4_unicode_ci', #设置数据库表的数据集 '--default-time-zone=+8:00' #设置mysql数据库的 时区问题!!!! 而不是设置容器的时区问题!!!! ] server_name2: # 开始第二个容器 server_name: stdin_open: true # 类似于docker run -d tty: true # 类似于docker run -t volumes: # 以上每个服务中挂载映射的目录都在这里写入一次,也叫作声明volume test1: test2: test3: networks: # 如果要指定ip网段,还是创建好在使用即可,声明networks my_net: driver: bridge # 指定网卡类型 myapp_net: driver: bridge
标签:docker,容器,服务项目,yingxue,nacos,mysql,服务器,Docker,ports From: https://www.cnblogs.com/worthmove/p/16995067.html