知识为进步之母,而进步又为富强之源泉。这篇文章主要讲述docker-compose常用模板相关的知识,希望能为你提供帮助。
文章目录
- ??前言??
- ??一、docker-compose一些模板??
- 多个服务
- 单个服务
- ??二、一些可能会碰到的问题??
- docker-compose拉取不下来
- docker-compose -v报找不到
- docker镜像拉取太慢
- network以路径为前缀
- ??三. 一些可能存在的需求??
- 加入一个存在的网络, 同时创建一个新的网络
- 将已经运行的容器, 新增到一个新的网络中
- 将当前镜像备份
- ??四.查看network??
- docker network inspect docker_mysql, 查看网络里面有哪些容器
前言
- docker-compose版本: 3
- 博客里面会放少量的模板, 具体的详细的在项目里面会有
- 一些可能会碰到的问题
- 一些可能存在的需求
- 查看network
-
??项目地址: https://gitee.com/xmaxm/docker_mysql_redis??
文章图片
一、docker-compose一些模板 多个服务
# Compose 版本 Version 2支持更多的指令。Version 1将来会被弃用。
version: "3"
# 定义服务
services:
# 为project定义服务
redis:
# 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像
image: redis:4.0
# 配置端口 - "宿主机端口:容器暴露端口"
ports:
- 6379:6379
# 配置容器连接的网络,引用顶级 networks 下的条目(就是最下面配置的networks(一级目录))
networks:
network_name:
# 为单redis创建别名, REDIS_URL标记为redis服务的地址. (不配置aliases也可以, 这样就通过定义的服务名: redis链接)
aliases:
- REDIS_URL
# 挂载
volumes:
- "/docker/redis/conf/redis.conf:/etc/redis/redis.conf"
- "/docker/redis/data:/data"
# 容器总是重新启动
restart: always
# 相当于执行一些命令
command:
redis-server /etc/redis/redis.conf --appendonly yes
# 指定一个自定义容器名称,而不是生成的默认名称。
container_name: redis
# 使用该参数,container内的root拥有真正的root权限。
privileged: true
db:
image: mysql:5.7
ports:
- 3306:3306
# 添加环境变量
environment:
MYSQL_ROOT_PASSWORD: "123456"
volumes:
- "/docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf"
- "/docker/mysql/logs:/var/log/mysql"
- "/docker/mysql/data:/var/lib/mysql"
- "/docker/mysql/sql/init.sql:/docker-entrypoint-initdb.d/init.sql"
- "/etc/localtime:/etc/localtime"
networks:
network_name:
aliases:
- MYSQL_URL
restart: always
command: --init-file /docker-entrypoint-initdb.d/init.sql
container_name: mysql
privileged: true
project-name:
# 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像
image: project-name:1.0.0
# 构建镜像
build:
# 指定项目的地址
context: /root/docker_mysql_redis
# 指定Dockerfile
dockerfile: Dockerfile
ports:
- 8080:8080
# 从文件添加环境变量
env_file:
- /root/environment.env
networks:
network_name:
aliases:
- PROJECT_URL
privileged: true
restart: always
container_name: test-name
# ........可以继续添加
networks:
# bridge:默认,需要单独配置ports映射主机port和服务的port,并且开启了容器间通信
network_name:
driver: bridge
单个服务
version: "3"
services:
nacos:
image: nacos/nacos-server:1.2.1
ports:
- 8848:8848
# 加入已存在的网络 docker_network_mysql(docker-mysql.yaml), 并创建一个新的网络 network_nacos
networks:
network_nacos:
aliases:
- NACOS_URL
# 通过docker network ls 进行获取
docker_network_mysql:
restart: always
environment:
MODE: standalone
container_name: nacos
privileged: true
networks:
docker_network_mysql:
external: true
network_nacos:
driver: bridge
二、一些可能会碰到的问题 docker-compose拉取不下来
更换yum源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
hosts添加解析:
52.216.16.16 github-production-release-asset-2e65be.s3.amazonaws.com
重新安装
docker-compose -v报找不到
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker镜像拉取太慢
更换镜像源
建议配置阿里云的镜像地址: https://developer.aliyun.com/article/29941
network以路径为前缀
# -p Specify an alternate project name (default: directory name) 比如配置的network, 会以路径为前缀, 配置该值, 可以代替
# -f Specify an alternate compose file (default: docker-compose.yml) 指定yaml文件
# -d 后台运行
docker-compose -p docker -f /root/docker-init.yaml up -d
三. 一些可能存在的需求 加入一个存在的网络, 同时创建一个新的网络
# 加入已存在的网络 docker_network_mysql(docker-mysql.yaml), 并创建一个新的网络 network_nacos
services:
nacos:
# 加入已存在的网络 docker_network_mysql(docker-mysql.yaml), 并创建一个新的网络 network_nacos
networks:
network_nacos:
aliases:
- NACOS_URL
# 通过docker network ls 进行获取
docker_network_mysql:
networks:
docker_network_mysql:
external: true
network_nacos:
driver: bridge
参考文件:individually/docker-nacos.yaml
先执行docker-mysql.yaml, 然后执行docker-nacos.yaml
docker exec -it nacos bash
ping MYSQL_URL / ping db
将已经运行的容器, 新增到一个新的网络中
创建一个网络docker_mysql: docker network create docker_mysql
将已运行的容器mysql加入该网络: docker network connect --alias MYSQL_URL docker_mysql mysql
--alias MYSQL_URL可以通过别名通信. 也可以不要, 但是这样就只能通过容器的ID或者通信
docker network connect 一个已存在网络 容器名/容器ID
将当前镜像备份
docker tag docker.io/chaim2436/sentinel-dashboard:1.7.1 chaim2436/sentinel-dashboard:1.7.1
docker rmi docker.io/chaim2436/sentinel-dashboard:1.7.1后chaim2436/sentinel-dashboard:1.7.1会依旧存在
这里不能rmi id, 因为tag之后两个镜像的ID将会是一样的
四.查看network docker network inspect docker_mysql, 查看网络里面有哪些容器
这些容器之间都是可以相互通信的, 服务名或者别名都是可行的
文章图片
【docker-compose常用模板】
推荐阅读
- ICCV 2021 口罩人物身份鉴别全球挑战赛冠军方案分享
- Java中那些让你爱不释手工具库,精炼代码量
- Spark SQL知识点大全与实战
- 通过JConsoler监控Tomcat的JVM内存
- B树和B+树的区别#yyds干货盘点#
- Linux——进程和计划任务管理
- 服务器性能监控的温故知新
- C# 拼图游戏(超详细)
- linux文件传输协议