容器化 docker-compose(容器化改造)
wptr33 2025-01-27 00:37 14 浏览
docker-compose
Docker的四种网络模式
Docker服务在启动的时候会创建三种网络,bridge、host和none,还有一种共享容器的模式container
Bridge
桥接模式,主要用来对外通信的,docker容器默认的网络使用的就是bridge。
使用bridge模式配置容器自定的网络配置
# 配置容器的主机名
docker run --name t1 --network bridge -h [自定义主机名] -it --rm busybox
# 自定义DNS
docker run --name t1 --network bridge --dns 114.114 -it --rm busybox
# 给host文件添加一条
docker run --name t1 --network bridge --add-host [hostname]:[ip] -it --rm busybox
创建自定义的桥
docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0
Host
host类型的网络就是主机网络的意思,绑定到这种网络上面的容器,内部使用的端口直接绑定在主机上对应的端口,而如果容器服务没有使用端口,则无影响。
None
不使用任何网络,宿主机无法通过网络访问容器,容器也无法访问宿主机
container
共享另外一个容器的network namespace,和host模式差不多,只是这里不是使用宿主机网络,而是使用的容器网络
Tip:自定义docker0桥的网络属性信息:/etc/docker/daemon.json文件。(这个文件位置还是挺重要的)
Docker Compose
Compose的作用是“定义和运行多个Docker容器的应用”。使用Compose,使用yaml配置文件中配置应用的服务,然后使用一个命令,即可创建并启动配置中引用的所有服务。
Compose中两个重要概念:
- 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml文件中定义。
安装
Compose支持三平台Windows、Mac、Linux,安装方式各有不同。我这里使用的是Linux系统,其他系统安装方法.可以参考官方文档和开源GitHub链接:
Docker Compose官方文档链接:https://docs.docker.com/compose
Docker Compose GitHub链接:https://github.com/docker/compose
Linux上有两种安装方法,Compose项目是用Python写的,可以使用Python-pip安装,也可以通过GitHub下载二进制文件进行安装。
- 通过Python-pip安装安装Python-pipyum install -y epel-release yum install -y python-pip 安装docker-composepip install docker-compose验证是否安装docker-compose version卸载pip uninstall docker-compose
- 通过GitHub链接下载安装(非ROOT用户需使用sudo)通过GitHub获取下载链接,版本地址:https://github.com/docker/compose/releasescurl -L “https://github.com/docker/compose/releases/download/1.23.2/docker-compose-(uname -s)-(uname-s)-(uname -m)” -o /usr/local/bin/docker-compose给二进制下载文件可执行的权限chmod +x /usr/local/bin/docker-compose可能没有启动程序,设置软连接ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose验证是否安装docker-compose version卸载rm /usr/local/bin/docker-compose
Docker Compose模板文件常用指令
image
指定镜像名称或者镜像id,如果该镜像在本地不存在,Compose会尝试pull下来。
image: java:8
build
1、指定Dockerfifile文件的路径。可以是一个路径,
build: ./dir
2、也可以是一个对象,用以指定Dockerfifile和参数,
build: context: ./dir dockerfifile: Dockerfifile-alternate args: buildno: 1
command
覆盖容器启动后默认执行的命令。
command: bundle exec thin -p 3000
也可以是一个list,类似于Dockerfifile总的CMD指令,
command: [bundle, exec, thin, -p, 3000]
links
链接到其他服务中的容器。可以指定服务名称和链接的别名使用SERVICE:ALIAS 的形式,或者只指定服务名称
web: links: - db - db:database - redis
external_links
表示链接到docker-compose.yml外部的容器,甚至并非Compose管理的容器,特别是对于那些提供共享容器或共同服务。格式跟links类似
external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql
ports
暴露端口信息。使用宿主端口:容器端口的格式,或者仅仅指定容器的端口(此时宿主机将会随机指定端口),类似于docker run -p ,
ports:
“3000”
“3000-3005”
“8000:8000”
“9090-9091:8080-8081”
“49100:22”
“127.0.0.1:8001:8001”
“127.0.0.1:5000-5010:5000-5010”
expose
暴露端口,只将端口暴露给连接的服务,而不暴露给宿主机。
expose: - “3000” - “8000”
volumes
端挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。
volumes:
1、Just specify a path and let the Engine create a volume
/var/lib/mysql
2、Specify an absolute path mapping
/opt/data:/var/lib/mysql
3、Path on the host, relative to the Compose fifile
./cache:/tmp/cache
4、User-relative path
~/confifigs:/etc/confifigs/:ro
5、Named volume
datavolume:/var/lib/mysq
volumes_from
从另一个服务或者容器挂载卷。可以指定只读或者可读写,如果访问模式没有指定,则默认是可读写。volumes_from:
service_name
service_name:ro
container:container_name
container:container_name:rw
environment
设置环境变量。可以使用数组或者字典两种方式。只有一个key的环境变量可以在运行Compose的机器上找到对应的值,这有助于加密的或者特殊主机的值。
environment: RACK_ENV: development SHOW: ‘true’ SESSION_SECRET: environment: -RACK_ENV=development - SHOW=true - SESSION_SECRET
env_fifile
从文件中获取环境变量,可以为单独的文件路径或列表。如果通过 docker-compose -f FILE 指定了模板文件,则env_fifile 中路径会基于模板文件路径。如果有变量名称与 environment 指令冲突,则以envirment 为准。
env_fifile: .env env_fifile: - ./common.env - ./apps/web.env - /opt/secrets.env
extends
继承另一个服务,基于已有的服务进行扩展。
net
设置网络模式。示例:
net: “bridge” net: “host” net: “none” net: “container:[service name or container name/id]”
dns
配置dns服务器。可以是一个值,也可以是一个列表。
dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9
dns_search
配置DNS的搜索域,可以是一个值,也可以是一个列表。
dns_search: example.com dns_search: - dc1.example.com - dc2.example.com
其它
docker-compose.yml 还有很多其他命令,可以参考docker-compose.yml文件官方文档:
https://docs.docker.com/compose/compose-fifile/
实例
准备几个微服务使用docker-compose来练习使用
# 找个文件夹放要做的部署服务
> cd /usr/local
# 创建文件夹
> mkdir dokcercompose
# 创建几个文件夹分别方式不同的微服务
> mkdir a
> mkdir b
> mkdir c
# 分别将不同的微服务jar包上传至到a、b、c文件夹中并创建编写dockerfile文件(参考上一篇)
# 使用docker build命令创建镜像(我是使用image方式写入的docker-compose,如果用build在编写文件时需要注意文件夹层级)
# 创建docker-compose.yml文件
> vim docker-compose.yml
#----------------------
version: '2.2'
services:
eureka:
image: a
ports:
- 8080:8080
user:
image: b
ports:
- 8081:8081
power:
image: c
ports:
- 8082:8082
#----------------------
# 执行docker-compose
> docker-compose up -d
几个服务之间关联需要配置docker的网络文件。就是前面提到的/etc/docker/daemon.json
这里主要是需要配置一个bip
{
"registry-mirrors": ["https://o3addn2g.mirror.aliyuncs.com"],
"bip":"10.105.1.1/24"
}
这里需要注意配置的bip不要和宿主机在一个网段(我是用的虚拟机,最开始配置在一个网段的时候导致SSH无法远程且虚拟机和本地互相ping不通)。
相关推荐
- 【推荐】一款开源免费、美观实用的后台管理系统模版
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍...
- Android架构组件-App架构指南,你还不收藏嘛
-
本指南适用于那些已经拥有开发Android应用基础知识的开发人员,现在想了解能够开发出更加健壮、优质的应用程序架构。首先需要说明的是:AndroidArchitectureComponents翻...
- 高德地图经纬度坐标批量拾取(高德地图批量查询经纬度)
-
使用方法在桌面上新建一个index.txt文件,把下面的代码复制进去保存,再把文件名改成index.html保存,双击运行打开即可...
- flutter系列之:UI layout简介(flutter ui设计)
-
简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。...
- Android开发基础入门(一):UI与基础控件
-
Android基础入门前言:...
- iOS的布局体系-流式布局MyFlowLayout
-
iOS布局体系的概览在我的CSDN博客中的几篇文章分别介绍MyLayout布局体系中的视图从一个方向依次排列的线性布局(MyLinearLayout)、视图层叠且停靠于父布局视图某个位置的框架布局(M...
- TDesign企业级开源设计系统越发成熟稳定,支持 Vue3 / 小程序
-
TDesing发展越来越好了,出了好几套组件库,很成熟稳定了,新项目完全可以考虑使用。...
- WinForm实现窗体自适应缩放(winform窗口缩放)
-
众所周知,...
- winform项目——仿QQ即时通讯程序03:搭建登录界面
-
上两篇文章已经对CIM仿QQ即时通讯项目进行了需求分析和数据库设计。winform项目——仿QQ即时通讯程序01:原理及项目分析...
- App自动化测试|原生app元素定位方法
-
元素定位方法介绍及应用Appium方法定位原生app元素...
- 61.C# TableLayoutPanel控件(c# tabcontrol)
-
摘要TableLayoutPanel在网格中排列内容,提供类似于HTML元素的功能。TableLayoutPanel控件允许你将控件放在网格布局中,而无需精确指定每个控件的位置。其单元格...
- 12个python数据处理常用内置函数(python 的内置函数)
-
在python数据分析中,经常需要对字符串进行各种处理,例如拼接字符串、检索字符串等。下面我将对python中常用的内置字符串操作函数进行介绍。1.计算字符串的长度-len()函数str1='我爱py...
- 如何用Python程序将几十个PDF文件合并成一个PDF?其实只要这四步
-
假定你有一个很无聊的任务,需要将几十个PDF文件合并成一个PDF文件。每一个文件都有一个封面作为第一页,但你不希望合并后的文件中重复出现这些封面。即使有许多免费的程序可以合并PDF,很多也只是简单的将...
- Python入门知识点总结,Python三大数据类型、数据结构、控制流
-
Python基础的重要性不言而喻,是每一个入门Python学习者所必备的知识点,作为Python入门,这部分知识点显得很庞杂,内容分支很多,大部分同学在刚刚学习时一头雾水。...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
面试官:git pull是哪两个指令的组合?
-
git pull命令使用实例 git pull--rebase
-
git 执行pull错误如何撤销 git pull fail
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mysql max (33)
- vba instr (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)