一、生产环境
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 命令来导入一个容器快照到本地镜像库 这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。