容器化 docker-compose(容器化改造)
wptr33 2025-01-27 00:37 21 浏览
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不通)。
相关推荐
- Linux文件系统操作常用命令(linux文件内容操作命令)
-
在Linux系统中,有一些常用的文件系统操作命令,以下是这些命令的介绍和作用:#切换目录,其中./代表当前目录,../代表上一级目录cd#查看当前目录里的文件和文件夹ls#...
- 别小看tail 命令,它难倒了技术总监
-
我把自己以往的文章汇总成为了Github,欢迎各位大佬star...
- lnav:基于 Linux 的高级控制台日志文件查看器
-
lnav是一款开源的控制台日志文件查看器,专为Linux和Unix-like系统设计。它通过自动检测日志文件的格式,提取时间戳、日志级别等关键信息,并将多个日志文件的内容按时间顺序合并显示,...
- 声明式与命令式代码(声明模式和命令模式)
-
编程范式中的术语和差异信不信由你,你可能已经以开发人员的身份使用了多种编程范例。因为没有什么比用编程理论招待朋友更有趣的了,所以这篇文章可以帮助您认识代码中的流行范例。命令式编程命令式编程是我们从As...
- linux中的常用命令(linux常用命令和作用)
-
linux中的常用命令linux中的命令统称shell命令shell是一个命令行解释器,将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的交互shell终端:我们平时输入命令,执行程序的那个...
- 提高工作效率的--Linux常用命令,能够决解95%以上的问题
-
点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf...
- 如何限制他人操作自己的电脑?(如何控制别人的电脑不让发现)
-
这段时间,小猪罗志祥正处于风口浪尖,具体是为啥?还不知道的小伙伴赶紧去补一下最近的娱乐圈八卦~简单来说,就是我们的小罗同事,以自己超强的体力,以及超强的时间管理能力,重新定义了「多人运动」的含义,重新...
- 最通俗易懂的命令模式讲解(命令模式百科)
-
我们先不讲什么是命令模式,先通过一个场景来引出命令模式,看看命令模式能解决什么样的问题。现在有一个渣男张三,他有还几个女朋友,你现在是不是还是单身狗,你就说你气不气?然后他需要每天分别叫几个女朋友起床...
- 互联网大厂后端必看!Spring Boot 中Runtime执行与停止命令?
-
你是否曾在使用SpringBoot开发项目时,遇到需要执行系统命令的场景?比如调用脚本进行文件处理,又或是启动外部程序?很多后端开发人员会使用Processexec=Runtime.get...
- Linux 常用命令(linux常用的20个命令面试)
-
日志排查类操作命令...
- Java字节码指令:if_icmpgt(0xA3)(java字节码使用的汇编语言)
-
if_icmpgt是Java字节码中的一条条件跳转指令,其全称是"IfIntegerCompareGreaterThan"。它用于比较两个整数值的大小。如果栈顶的第一个...
- 外贸干货|如何增加领英的曝光量和询盘
-
#跨境电商#...
- golang执行linux命令(golang调用shell脚本)
-
需求需要通过openssl生成rsa秘钥,然后保存该秘钥。代码实例packagemainimport("io/ioutil""bytes"&...
- LINUX磁盘挂载(linux磁盘挂载到windows)
-
1、使用root用户查看磁盘挂载情况:fdisk-l2、使用df查看当前磁盘挂载情况,根据和fdisk-l的结果进行对比,查看还有那些磁盘未使用3、挂载:mount磁盘挂载路径...
- Linux命令学习——nl命令(linux ln命令的使用)
-
nl命令主要功能为每一个文件添加行号,每一个输入的文件添加行号后发送到标准输出。当没有文件或文件为-时,读取标准输入...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
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)
- 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)
- c语言 switch (34)
- git commit (34)