分享下个人开发常用的 docker-compose 模板文件 (Tomcat、Redis、ZK、MySQL、Rabbit、...
source link: https://www.skypyb.com/2020/03/jishu/1422/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
现在各种工具、中间件都是在用docker部署了。 安装了docker后 一行run命令就搞定了,确实也方便。
不过有点难受的是有些中间件的配置, 主要是环境变量我根本就不记得。 最近又要在别的服务器上用 docker 部署几个东西, 我就想着每次都临时去自己的旧记录(我有个文档记录) 里翻配置也怪麻烦的。
想了想终归还是写篇博客纯当记录, 虽说是纯使用向没什么内涵, 但多少还是有些价值的。 找这些配置实在是麻烦。 我这 docker-compose 模板文件都给你安排的明明白白了。
都是经过验证的模板编排文件, ctrl c+ctrl v 然后改下 .env
环境变量就能直接启起来,还是很香的。
注: 这篇文章排版有点奇怪的, 因为这是我用Markdown写的然后复制到WP里的, 显示的会有点诡异。 代码指定不了样式, 就这样吧 (摊手)。
环境:
docker 使用阿里云(其他的也可以, 反正最好是国内的) 镜像加速的命令 (ubuntu/centos 限定)
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://2pcnubsp.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
也可以不用命令,手动创建 /etc/docker/daemon.json
文件, 复制这个json进去也行
{ "registry-mirrors": ["https://2pcnubsp.mirror.aliyuncs.com"] }
docker-compose install:
# 先下载下来,用的是国内的源 sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose # 加权限 sudo chmod +x /usr/local/bin/docker-compose
说明
- docker-compose 命令格式:
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
-
-f 可以指定使用的 Compose 模板文件,默认为
docker-compose.yml
; 为了方便,我都用的默认的。 - docker-compose 执行的命令默认都是以 当前所在文件夹为环境 的, 所以每个容器都建个单独的文件夹
-
Compose 模板文件支持读取主机的系统环境变量和当前目录下的
.env
文件中的变量。为了方便换配置,我每个模板都使用了.env
文件
例子(bash操作):
#查看当前目录,确保是在对的目录里 1:pwd /opt/dockercompose/mysql #查看文件, 确保模板文件和.env都在。 要用 `ls -a` 查看, 因为.env会被隐藏 2:ls -a docker-compose.yml .env # 检查模板文件正确性,正确会打出配置(注入变量后的) 错误就会提示, 可以跳过这部分, 反正写的是正确的 3:docker-compose config # 使用当前目录下的模板文件启动容器, 没有的镜像都会去下载,映射的目录没有都会自动创建 # 加上-d 就是后台启动, 不然ctrl+c 启动的容器就会被关闭。 可以先普通启动看看效果, 正确就关掉重新后台启动 4:docker-compose up [-d] # 停止容器并删除容器 5:docker-compose down
注:
- 文件放好后,整个启停流程里就只涉及到 4/5 这两个命令来回用了
- docker的命令 start | stop | rm | logs | ps 之类的 docker-compose 都可以用。 好处是不用指定容器名字/hash, 只要在那个目录里边就行了。
-
不过 docke-compose 命令他操作的是模板文件描述的所有容器。比如你这个docker-compose.yml 创建了个zookeeper集群总共3个容器, 你用
docker-compose logs -f
会同时看到这三个容器的日志(会有颜色区分) 使用docker-compose stop
会把这三个容器都停掉。 如果只想处理单个, 还是得用 docker 命令指定容器
Compose 模板文件
mysql:
- docker.compose.yml
version: '3.7' services: mysql: image: "mysql:5.7" network_mode: "${DOCKER_NETWORK}" container_name: "${NAME}" hostname: "${NAME}" environment: MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}" restart: always volumes: - "${DIR_MYSQL_CONF}:/etc/mysql/conf.d" - "${DIR_MYSQL_DATA}:/var/lib/mysql" - "${DIR_MYSQL_INIT_SCRIPTS}:/docker-entrypoint-initdb.d/" ports: - "${MYSQL_PORT_MAPPING}:3306"
- .env:
DOCKER_NETWORK=bridge NAME=mysql-m1 # MYSQL_VERSION=5.7 写死了5.7版本 避免路径映射不对 MYSQL_ROOT_PASSWORD=root MYSQL_PORT_MAPPING=3306 DIR_MYSQL_CONF=/opt/dockerdata/mysql/conf DIR_MYSQL_DATA=/opt/dockerdata/mysql/data # 这个目录里的.sql/.sh 文件会在容器启动时被扫描执行 DIR_MYSQL_INIT_SCRIPTS=/opt/dockerdata/mysql/init
redis
- docker.compose.yml
version: "3.7" services: redis: image: redis:5 network_mode: "${DOCKER_NETWORK}" container_name: "${NAME}" hostname: "${NAME}" restart: always command: redis-server # 设置密码和开启AOF #command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes volumes: - "${DIR_REDIS_DATA}:/data" ports: - "${REDIS_PORT_MAPPING}:6379"
- .env:
DOCKER_NETWORK=bridge NAME=redis-r1 # REDIS_VERSION=5 REDIS_PASSWORD=pass REDIS_PORT_MAPPING=6379 DIR_REDIS_DATA=/opt/dockerdata/redis/data
zookeeper
- docker.compose.yml
version: '3.7' services: zoo1: image: zookeeper:3.4.14 network_mode: "${DOCKER_NETWORK}" container_name: "${ZOO1_NAME}" hostname: "${ZOO1_NAME}" restart: always logging: driver: "json-file" options: max-size: "1024k" max-file: "5" ports: - "${REDIS_PORT_MAPPING}:2181" environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=${ZOO1_NAME}:2888:3888 volumes: - "${DIR_ZOO_DATA}:/data"
- .env:
DOCKER_NETWORK=bridge ZOO1_NAME=zoo-z1 # ZOO_VERSION=3.4.14 REDIS_PORT_MAPPING=2181 DIR_ZOO_DATA=/opt/dockerdata/zookeeper/data
RabbitMQ
- docker-compose.yml
version: '3.7' services: rabbit: image: rabbitmq:3.7.7-management network_mode: "${DOCKER_NETWORK}" container_name: "${NAME}" hostname: "${NAME}" restart: always logging: driver: "json-file" options: max-size: "1024k" max-file: "5" ports: - "${RABBIT_PORT_MAPPING}:5672" - "${RABBIT_MANAGEMENT_PORT_MAPPING}:15672" environment: - "RABBITMQ_DEFAULT_VHOST=${RABBITMQ_DEFAULT_VHOST}" - "RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}" - "RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS}" volumes: - "${DIR_RABBIT_DATA}:/var/lib/rabbitmq"
- .env
# RABBIT_VERSION=3.7.7 NAME=rabbit-r1 DOCKER_NETWORK=bridge RABBIT_PORT_MAPPING=5672 RABBIT_MANAGEMENT_PORT_MAPPING=15672 RABBITMQ_DEFAULT_VHOST=/ RABBITMQ_DEFAULT_USER=rabbit RABBITMQ_DEFAULT_PASS=rabbit DIR_RABBIT_DATA=/opt/dockerdata/rabbitmq/data
MongoDB
- docker-compose.yml
version: '3.7' services: mongo: image: 'mongo:${MONGO_VERSION}' network_mode: "${DOCKER_NETWORK}" container_name: "${NAME}" hostname: "${NAME}" restart: always logging: driver: "json-file" options: max-size: "1024k" max-file: "5" environment: - "MONGO_INITDB_DATABASE=${MONGO_INITDB_DATABASE}" - "MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}" - "MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}" volumes: - "${DIR_MONGO_DATA}:/data/db" - "${DIR_MONGO_INIT_SCRIPTS}:/docker-entrypoint-initdb.d/" ports: - "${MONGO_PORT_MAPPING}:15672" #这是覆盖掉默认启动命令让mongo不用认证。 如果用这个命令启动上边的超级用户配置要先删掉,不然启动报错 #command: ["mongod","--noauth"]
- .env
NAME=mongo DOCKER_NETWORK=bridge MONGO_VERSION=latest MONGO_PORT_MAPPING=15672 MONGO_INITDB_DATABASE=db1 MONGO_INITDB_ROOT_USERNAME=root MONGO_INITDB_ROOT_PASSWORD=root DIR_MONGO_DATA=/opt/dockerdata/mongo/data # 这个目录里的.js/.sh 文件会在容器启动时被扫描执行 DIR_MONGO_INIT_SCRIPTS=/opt/dockerdata/mongo/init
Tomcat
docker-compose.yml
version: '3.7' services: tomcat: image: "tomcat:${TOMCAT_VERSION}" network_mode: "${DOCKER_NETWORK}" container_name: "${NAME}" hostname: "${NAME}" restart: always #容器内存限制、空间限制、CPU资源限制。 #mem_limit: 1024m #memswap_limit: 1024m #cpu_quota: 30000 logging: driver: "json-file" options: max-size: "1024k" max-file: "5" environment: - "TZ=Asia/Shanghai" #- JAVA_OPTS= #- CATALINA_OPTS= volumes: - "${DIR_TOMCAT_WEBAPPS}:/usr/local/tomcat/webapps" - "${DIR_TOMCAT_LOGS}:/usr/local/tomcat/logs" # 不能映射配置文件,启动时会找不到配置报错。想映射的话先起一个临时的tomcat然后把配置复制出来再映射 # - "${DIR_TOMCAT_CONF}:/usr/local/tomcat/conf" ports: - "${TOMCAT_PORT_MAPPING}:8080"
.env
NAME=tomcat9 DOCKER_NETWORK=bridge TOMCAT_VERSION=9.0 TOMCAT_PORT_MAPPING=8080 DIR_TOMCAT_WEBAPPS=/opt/dockerdata/tomcat9/webapps DIR_TOMCAT_LOGS=/opt/dockerdata/tomcat9/logs #DIR_TOMCAT_CONF=/opt/dockerdata/tomcat9/conf
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK