内容简介:现在各种工具、中间件都是在用docker部署了。 安装了docker后 一行run命令就搞定了,确实也方便。不过有点难受的是有些中间件的配置, 主要是环境变量我根本就不记得。 最近又要在别的服务器上用 docker 部署几个东西, 我就想着每次都临时去自己的旧记录(我有个文档记录) 里翻配置也怪麻烦的。想了想终归还是写篇博客纯当记录, 虽说是纯使用向没什么内涵, 但多少还是有些价值的。 找这些配置实在是麻烦。 我这 docker-compose 模板文件都给你安排的明明白白了。
现在各种 工具 、中间件都是在用 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- golang 模板(template)的常用基本语法
- 网站模板 | 现代时尚创新创意投资组合HTML5模板设计
- ReportLibrary 报表模板库新增 21 张报表模板,加入报表导出功能!
- ReportLibrary 报表模板库新增 21 张报表模板,加入报表导出功能!
- 工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码
- Word 模板引擎 poi-tl V1.3.0 发布,新增模板语法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C程序设计(第四版)
谭浩强 / 清华大学出版社 / 2010-6-1 / 33.00元
由谭浩强教授著、清华大学出版社出版的《C程序设计》是一本公认的学习C语言程序设计的经典教材。根据C语言的发展和计算机教学的需要,作者在《C程序设计(第三版)》的基础上进行了修订。 《C程序设计(第4版)》按照C语言的新标准C99进行介绍,所有程序都符合C99的规定,使编写程序更加规范;对C语言和程序设计的基本概念和要点讲解透彻,全面而深入;按照作者提出的“提出问题―解决问题―归纳分析”三部曲......一起来看看 《C程序设计(第四版)》 这本书的介绍吧!