Docker Compose

小柒博客 评论68,9951字数 1659阅读5分31秒阅读模式

Docker Compose 简介

Compose 是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从YML文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

使用Dockerfile定义应用程序的环境。

使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

最后,执行docker-compose up命令来启动并运行整个应用程序。

docker-compose.yml的配置案例如下(配置参数参考下文):

实例

version: '3'
services:
  biz:
    build: .
    image: biz
    ports:
     - "9140:9140"
    container_name: biz

Compose 安装

Linux

Linux 上我们可以 Github上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases

运行以下命令以下载Docker Compose的当前稳定版本:

[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname

-s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安装其他版本的Compose,请替换1.24.1。

将可执行权限应用于二进制文件:

[root@localhost ~]# chmod +x /usr/local/bin/docker-compose

创建软链:

[root@localhost ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

[root@localhost ~]# docker-compose --version

docker-compose version 1.24.1, build 4667896b

注意: 对于alpine,需要以下依赖包:py-pip、python-dev、libffi-dev、openssl-dev、gcclibc-dev和make。

macOS

Mac 的 Docker 桌面版和 Docker Toolbox已经包括 Compose 和其他 Docker 应用程序,因Mac用户不需要单独安装Compose。

windows PC

Windows 的Docker桌面版和 Docker Toolbox已经包括Compose和其他Docker 应用程序,因此Windows用户不需要单独安装Compose。

快速入门

1、项目准备

# 打包项目,获得jar包marktrace-edu-biz-service-0.0.1-SNAPSHOT.jar

[root@localhost ~]# mvn clean package

2、创建 Dockerfile 文件

# 在jar包所在路径创建Dockerfile文件,添加以下内容

[root@localhost ~]# vim Dockerfile

FROM centos
# 维护者信息
MAINTAINER YangXingZhen 675583110@qq.com
# 安装wget、net-tools
RUN yum -y install wget net-tools >/dev/null 2>&1
RUN yum clean all >/dev/null 2>&1
# 设置时区
RUN rm -rf /etc/localtime
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 创建项目路径
RUN mkdir -p /data/marktrace/marktrace-edu-biz-service
# 拷贝JDK软件包
COPY jdk-8u181-linux-x64.tar.gz /usr/local
# 解压JDK软件包
RUN tar xf /usr/local/jdk-8u181-linux-x64.tar.gz -C /usr/local
RUN chown -R root.root /usr/local/jdk1.8.0_181
# 删除JDK软件包
RUN rm -rf /usr/local/jdk-8u181-linux-x64.tar.gz
# 配置JAVA环境
ENV JAVA_HOME=/usr/local/jdk1.8.0_181
ENV CLASSPATH=\$CLASSPATH:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib
ENV PATH=\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin:\$PATH:\$HOMR/bin
# 加载JAVA环境
RUN source /etc/profile
# 拷贝项目包
COPY marktrace-edu-biz-service-0.0.1-SNAPSHOT.jar /data/marktrace/marktrace-edu-biz-service
# 暴露9140端口
EXPOSE 9140
# 启动biz项目
ENTRYPOINT ["java","-jar","/data/marktrace/marktrace-edu-biz-service/marktrace-edu-biz-service-0.0.1-SNAPSHOT.jar"]

3、创建 docker-compose.yml

# 在jar包所在路径创建文件docker-compose.yml,添加以下内容

[root@localhost ~]# vim docker-compose.yml

version: '3'
services:
  biz:
    build: .
    image: biz
    ports:
     - "9140:9140"
    container_name: biz

该Compose文件定义了1个服务:biz

biz:该 biz服务使用从Dockerfile当前目录中构建的镜像。然后它将容器和主机绑定到暴露的端口9140

4、使用 Compose 命令构建和运行您的应用

# 在docker-compose.yml所在路径下执行该命令Compose就会自动构建镜像并使用镜像启动容器

[root@localhost ~]# docker-compose up

[root@localhost ~]# docker-compose up -d //后台启动并运行容器

5、查询容器启动状态

Docker Compose常用命令与配置

常见命令

  • ps:列出所有运行容器

docker-compose ps

  • logs:查看服务日志输出

docker-compose logs

  • port:打印绑定的公共端口,下面命令可以输出eureka服务8761端口所绑定的公共端口

docker-compose port eureka 8761

  • build:构建或者重新构建服务

docker-compose build

  • start:启动指定服务已存在的容器

docker-compose start eureka

  • stop:停止已运行的服务的容器

docker-compose stop eureka

  • rm:删除指定服务的容器

docker-compose rm eureka

  • up:构建、启动容器

docker-compose up

  • kill:通过发送SIGKILL信号来停止指定服务的容器

docker-compose kill eureka

  • pull:下载服务镜像

Usage:pull [options] [SERVICE...]

Options:

--ignore-pull-failures 忽略pull失败的镜像,继续pull其他镜像.

pull compose文件中所指明的镜像.

  • scale:设置指定服务运气容器的个数,以service=num形式指定

docker-compose scale user=3 movie=3

  • run:在一个服务上执行一个命令

docker-compose run web bash

docker-compose.yml 属性

  • version:指定 docker-compose.yml 文件的写法格式
  • services:多个容器集合
  • build:配置构建时,Compose会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定Dockerfile参数

build: ./dir

---------------

build:

context: ./dir

dockerfile: Dockerfile

args:

buildno: 1

  • command:覆盖容器启动后默认执行的命令

command: bundle exec thin -p 3000

----------------------------------

command: [bundle,exec,thin,-p,3000]

  • 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

  • environment:环境变量配置,可以用数组或字典两种方式

environment:

RACK_ENV: development

SHOW: 'ture'

-------------------------

environment:

- RACK_ENV=development

- SHOW=ture

  • env_file:从文件中获取环境变量,可以指定一个文件路径或路径列表,其优先级低于environment指定的环境变量

env_file: .env

---------------

env_file:

- ./common.env

  • expose:暴露端口,只将端口暴露给连接的服务,而不暴露给主机

expose:

- "3000"

- "8000"

  • image:指定服务所使用的镜像

image: java

  • network_mode:设置网络模式

network_mode: "bridge"

network_mode: "host"

network_mode: "none"

network_mode: "service:[service name]"

network_mode: "container:[container name/id]"

  • ports:对外暴露的端口定义,和expose对应

ports:# 暴露端口信息 - "宿主机端口:容器暴露端口"- "8763:8763"- "8763:8763"

links:将指定容器连接到当前连接,可以设置别名,避免ip方式导致的容器重启动态改变的无法连接情况

  • links:# 指定服务名称:别名

- docker-compose-eureka-server:compose-eureka

  • volumes:卷挂载路径

volumes:

- /lib

- /var

  • logs:日志输出信息

--no-color 单色输出,不显示其他颜.

-f, --follow 跟踪日志输出,就是可以实时查看日志

-t, --timestamps 显示时间戳

--tail 从日志的结尾显示,--tail=200

Docker Compose 其它

更新容器

  • 当服务的配置发生更改时,可使用docker-compose up命令更新配置
  • 此时,Compose会删除旧容器并创建新容器,新容器会以不同的IP地址加入网络,名称保持不变,任何指向旧容器的连接都会被关闭,重新找到新容器并连接上去

links

服务之间可以使用服务名称相互访问,links 允许定义一个别名,从而使用该别名访问其它服务

version: '2'
services:
    web:
        build: .
        links:
            - "db:database"
    db:
        image: postgres

若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!

继续阅读
Wechat
微信扫一扫,加我!
weinxin
微信号已复制
微信公众号
微信扫一扫,关注我!
weinxin
公众号已复制
Docker最后更新:2024-1-24
小柒博客
  • 本文由 小柒博客 发表于 2020年6月18日 17:18:16
  • 声明:本站所有文章,如无特殊说明或标注,本站文章均为原创。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。转载请务必保留本文链接:https://www.yangxingzhen.com/7193.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖动滑块以完成验证