Docker部署实践——web服务、mysql、nginx、mongo、kafka等

一、生产环境

1.镜像

Name

Tag

Description

webapp

1.0

应用服务运行环境,基于jdk1.8、python3.6

mysql

5.7

Mysql 数据库,内置smw_v2数据库

mongo

4.2.9

Mongodb,内存占用配置2G

zookeeper

3.4.13

 

wurstmeister/kafka

2.11-2.0.1

 

nginx

1.14

 

redis

4.0.14

 

2.webapp镜像全局环境变量

命令行env查看环境变量

  • MYSQL_PORT_3306_TCP_ADDR:mysql容器ip地址
  • MYSQL_PORT_3306_TCP_PORT:mysql 数据库端口号
  • KAFKA_PORT_9092_TCP_ADDR: kafka容器ip地址
  • KAFKA_PORT_9092_TCP_PORT: kafka服务端口号
  • MONGODB_PORT_9092_TCP_ADDR: mongo容器ip地址
  • MONGODB_PORT_27017_TCP_PORT: mongo数据库端口号

Host文件

  • 172.17.0.3 kafka kafka
  • 172.17.0.4 mysql 56e4fa040784
  • 172.17.0.5 mongodb e71bbebf19dd
  • 172.17.0.6 320e93708dd5

使用方式

以sprigboot 对mysql数据库为例:

方式一:引用全局变量

jdbc:mysql://${MYSQL_PORT_3306_TCP_ADDR}:${MYSQL_PORT_3306_TCP_PORT}/smw

方式二:使用hostname

jdbc:mysql://mysql:3306/smw

注意:以上环境变量尽在命令方式启动容器有效

二、Compose部署Docker容器

1.创建编排文件docker-compose.yml

version: '3'
services:
  webapp:
    image: webapp:1.0      #镜像
    container_name: webapp #容器名称
    tty: true              #交互shell外壳,相当于命令行-t
    depends_on:            #容器依赖,编排启动顺序
      - mysql
      - mongodb
      - kafka
      - redis
    links:                 #容器内部net通道,可不设置
      - mysql
      - mongodb
      - kafka
      - redis
    volumes:               #数据挂载
      - /data/docker/smw:/opt/smw
      - /data/docker/share:/data/share
    ports:                 #暴露端口号
      - "7273:7272"
      - "7374:7373"
      - "7475:7474"
        
  zookeeper:
    image: zookeeper:3.4.13
    container_name: zookeeper
    restart: always    
    ports:
      - "2182:2181"
      
  kafka:
    image: wurstmeister/kafka:2.11-2.0.1
    container_name: kafka
    hostname: kafka       #hosts 文件ip : hostname
    restart: always
    depends_on: 
          - zookeeper
    links: 
          - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092  #与hostname匹配
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_NUM_PARTITIONS: 4
    volumes:
      - /data/docker/kafka/logs:/opt/kafka/logs
    ports:
      - "9093:9092"

  mysql:
    image: smw-mysql:5.7
    container_name: mysql
    restart: always
    volumes:
      - /data/docker/mysql/conf:/etc/mysql/conf.d
      - /data/docker/mysql/data:/var/lib/mysql 
    ports:
      - "3307:3306"
      
  mongodb:
    image: smw-mongo:4.2.9
    container_name: mongodb
    restart: always
    volumes:
      - /data/docker/mongo/data:/data/db
      - /data/docker/mongo/conf:/data/configdb 
    ports:
      - "27018:27017"      
    
  redis:
    image: redis:4.0.14
    container_name: redis
    restart: always
    volumes:
      - /data/docker/redis/conf/redis.conf:/etc/redis/redis.conf 
      - /data/docker/redis/data:/data 
    ports:
      - "6380:6379"      
    command: /usr/local/bin/redis-server /etc/redis/redis.conf --appendonly yes
    
  nginx:
    image: nginx:1.14
    container_name: nginx
    restart: always
    depends_on: 
          - webapp
    links: 
          - webapp    
    volumes:
      - /data/docker/nginx/www:/var/lib/nginx/html 
      - /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
    ports:
      - "30000:20000"

2.启动容器

在docker-compose.yml所在目录,命令批量启动编排的服务容器

docker-compose up -d

3.启动springboot应用

进入webapp容器,调用对应的sh脚本启动应用

docker exec -it webapp bash

三、命令行部署Docker容器

1.创建zookeeper容器

docker run -d \

--name zookeeper \

--restart always \

-p 2182:2181 \

zookeeper:3.4.13

2.创建Kafka容器

目录挂载

Data

--docker

----kafka

------logs  日志文件,监控运行状态

容器创建命令

docker run -d --name kafka \

--link zookeeper:zookeeper \

--hostname kafka \

--restart always \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \

-e KAFKA_NUM_PARTITIONS=4 \

-v /data/docker/kafka/logs:/opt/kafka/logs

-p 9093:9092 \

wurstmeister/kafka:2.11-2.0.1

3.创建Mysql容器

目录挂载

Data

--docker

----mysql

------conf  配置文件,目前提供了服务项目特性的全面配置项

------data  数据库

容器创建命令

docker run -d --name mysql \

--restart always \

-v /data/docker/mysql/conf:/etc/mysql/conf.d \

-v /data/docker/mysql/data:/var/lib/mysql \

-p 3307:3306 \

smw-mysql:5.7

4.创建Mongodb容器

目录挂载

Data

--docker

----mongo

------conf  配置文件,目前提供了服务项目特性的全面配置项

------data  数据库

容器创建命令

docker run -d --name mongodb \

--restart always \

-p 27018:27017 \

-v /data/docker/mongo/data:/data/db \

-v /data/docker/mongo/conf:/data/configdb \

smw-mongo:4.2.9 \

5.创建Redis容器

目录挂载

Data

--docker

----redis

------conf  配置文件

------data  持久化数据

容器创建命令

docker run -d -p 6380:6379 --name redis \

--privileged=true \

-v /data/docker/redis/conf/redis.conf:/etc/redis/redis.conf \

-v /data/docker/redis/data:/data \

redis:4.0.14 \

/usr/local/bin/redis-server /etc/redis/redis.conf --appendonly yes

6.创建服务器容器

目录挂载

Data

--docker

----smw

------server  jar包等服务

------share  容器共享数据

容器创建命令

docker run -dt --name server \

--link mysql:mysql \

--link mongodb:mongodb \

--link kafka:kafka \

--link redis:redis \

-v /data/docker/smw:/opt/smw \

-p 7273:7272 \

-p 7475:7474 \

7.创建nginx 容器

目录挂载

Data

--docker

----nginx

------conf  配置文件

------www  前端代码

容器创建命令

docker run -d --name nginx \

--link server:server \

--restart always \

-p 30000:20000 \

-v /data/docker/nginx/www:/var/lib/nginx/html \

-v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \

nginx:1.14 

四、Docker镜像与容器备份&迁移

1.存出与载入镜像

导出镜像到指定tar文件中

docker save -o image-backup.tar image1:v1 image2:v2

载入镜像

docker load -i image-backup.tar

2.导出与导入容器

导出的实际是当前容器的快照版镜像

docker export -o container-backup.tar container_name

使用 docker import 载入,可以为新镜像指定name和tag

docker import container-backup.tar newimagename:tag

实际上,既可以使用 docker load 命令来导入镜像存储文件到本地镜像库,也可以使用docker [container] import 命令来导入一个容器快照到本地镜像库 这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。

猜你喜欢

转载自blog.csdn.net/qq_42022528/article/details/109100078