百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

容器化 docker-compose(容器化改造)

wptr33 2025-01-27 00:37 16 浏览

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高性能服务器设计

C10K和C10M计算机领域的很多技术都是需求推动的,上世纪90年代,由于互联网的飞速发展,网络服务器无法支撑快速增长的用户规模。1999年,DanKegel提出了著名的C10问题:一台服务器上同时...

独立游戏开发者常犯的十大错误

...

学C了一头雾水该咋办?

学C了一头雾水该怎么办?最简单的方法就是你再学一遍呗。俗话说熟能生巧,铁杵也能磨成针。但是一味的为学而学,这个好像没什么卵用。为什么学了还是一头雾水,重点就在这,找出为什么会这个样子?1、概念理解不深...

C++基础语法梳理:inline 内联函数!虚函数可以是内联函数吗?

上节我们分析了C++基础语法的const,static以及this指针,那么这节内容我们来看一下inline内联函数吧!inline内联函数...

C语言实战小游戏:井字棋(三子棋)大战!文内含有源码

井字棋是黑白棋的一种。井字棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、三子旗等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时...

C++语言到底是不是C语言的超集之一

C与C++两个关系亲密的编程语言,它们本质上是两中语言,只是C++语言设计时要求尽可能的兼容C语言特性,因此C语言中99%以上的功能都可以使用C++完成。本文探讨那些存在于C语言中的特性,但是在C++...

在C++中,如何避免出现Bug?

C++中的主要问题之一是存在大量行为未定义或对程序员来说意外的构造。我们在使用静态分析器检查各种项目时经常会遇到这些问题。但正如我们所知,最佳做法是在编译阶段尽早检测错误。让我们来看看现代C++中的一...

ESL-通过事件控制FreeSWITCH

通过事件提供的最底层控制机制,允许我们有效地利用工具箱,适时选择使用其中的单个工具。FreeSWITCH是一个核心交换与混合矩阵,它周围有几十个模块提供各种功能特性。我们完全控制了所有的即时信息,这些...

物理老师教你学C++语言(中篇)

一、条件语句与实验判断...

C语言入门指南

当然!以下是关于C语言入门编程的基础介绍和入门建议,希望能帮你顺利起步:C语言入门指南...

C++选择结构,让程序自动进行决策

什么是选择结构?正常的程序都是从上至下顺序执行,这就是顺序结构...

C++特性使用建议

1.引用参数使用引用替代指针且所有不变的引用参数必须加上const。在C语言中,如果函数需要修改变量的值,参数必须为指针,如...

C++程序员学习Zig指南(中篇)

1.复合数据类型结构体与方法的对比C++类:...

研一自学C++啃得动吗?

研一自学C++啃得动吗?在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C++的资料从专业入门到高级教程」,点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!个人...

C++关键字介绍

下表列出了C++中的常用关键字,这些关键字不能作为变量名或其他标识符名称。1、autoC++11的auto用于表示变量的自动类型推断。即在声明变量的时候,根据变量初始值的类型自动为此变量选择匹配的...