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