docker-compose hello word
Compose 是 Docker 容器进行编排的工具, 是一个整合发布docker应用的利器,可定义和运行多容器的应用,在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。
使用 Compose 基本会有如下三步流程:
- 在 Dockfile 中定义你的应用环境,可以是多个docker应用。
- 在 docker-compose.yml 中定义组成应用程序的服务。
- 使用dcoker-compose up命令 运行整个应用程序解决方案。
1,docker-compose 安装:
docker-compose 在GitHub发布,可以在这里获取到最新版本:https://github.com/docker/compose/releases
根据官方安装方法,执行下面命令安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
设置目录权限
sudo chmod +x /usr/local/bin/docker-compose
测试安装
docker-compose --version
#或
docker-compose -v
2,在你的服务器上获取你的docker images
略
3,编排 docker-compose.yml
Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)
Docker Compose project 文件的默认路径是 ./docker-compose.yml,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例
version: '2' # 表示该 Docker-Compose 文件使用的是 Version 2 file
services: # 要启动的 docker 服务列表
demo-docker: # 第一个服务(注意格式:相对上一行两个空格)
image: "ejiyuan/demo-docker:latest" # 镜像名称 (注意格式:image相对上一行,空两格 ,: 后空一格,以下类推)
ports:
- "9000:8080" # 启动端口(注意格式:“-”前面两个空格,后面一个空格)
volumes: #挂载一个路径
- .:/code
redis: # 第二个服务
image: "redis:alpine"
PS:Compose目前为止有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1没有声明版本默认是"version 1"。Version 1将来会被弃用。
4,在 Compose 中构建并运行你的应用:
在 docker-compose.yml 所在路径下执行该命令 Compose 就会自动构建镜像并使用镜像启动容器
docker-compose up
docker-compose -f -p up -d // 后台启动并运行容器
参数:
Options:
-f, --file FILE Specify an alternate compose file (default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name (default: directory name)
默认如果没有指定具体的compose配置文件,那么就docker-compose.yml,并且如果不指定项目名称,默认就是文件夹的name
结果如下:

5,查看
docker-compose images #查看镜像
docker-compose ps #查看进程
查看docker运行状态

两个都启动了
6,config 显示 docker-compose.yml配置
docker-compose [-f] config [--services]
结果如下:

7,down:停止并删除容器、网络、镜像、数据卷
docker-compose down
结果如下:

Options:
--rmi type Remove images. Type must be one of:
'all': Remove all images used by any service.
'local': Remove only images that don't have a custom tag
set by the `image` field.
-v, --volumes Remove named volumes declared in the `volumes` section
of the Compose file and anonymous volumes
attached to containers.
--remove-orphans Remove containers for services not defined in the
Compose file
8,build
服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器
设定上下文根目录,然后以该目录为准指定 Dockerfile
build:
context: ../
dockerfile: path/of/Dockerfile
args:
user:zhangsan
- context 选项可以是 Dockerfile 的文件路径,也可以是到链接到 git 仓库的 url
- 使用此 dockerfile 文件来构建,必须指定构建路径context
- args 指定构建参数的值。首先要在 Dockerfile 中指定参数名,然后再使用该选项指定参数值
例子:
文件结构如下:

Dockerfile文件
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD demo-docker-0.0.1-SNAPSHOT.war app.war
RUN sh -c 'touch /app.war'
RUN echo "Asia/Shanghai" > /etc/timezone
ARG active #占位符,等待从compose 中带入
ENV JAVA_OPTS=""
ENV spring.profiles.active=${active}
ENTRYPOINT ["java","-jar","/app.war"]
docker-compose.yml文件配置
version: '2'
services:
db: #对应 docker run --name my_postgres -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 -e PGDATA=/data/ -e POSTGRES_USER=admin -e POSTGRES_DB=my_db postgres
restart: always
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD:
PGDATA: /data/
POSTGRES_USER: admin
POSTGRES_DB: my_db
web:
build:
context: .
args:
active: prod #将值带入到Dockerfile文件中
ports:
- "8080:8081"
links:
- db
执行
docker-compose up -d
结果如下:

9,volumes 挂在数据卷
指定服务要使用的卷。如果仅针对某一服务,可以只指定卷主机路径。但若要多个服务使用,应该使用在顶层范围下的 volumes 选项中指定的卷名。
docker-compose.yml文件配置
version: '3'
services:
db:
restart: always
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD:
PGDATA: /data/
POSTGRES_USER: admin
POSTGRES_DB: my_db
volumes:
- ./code:/data # 将宿主的当前目录(docker-compose.yml所在目录)映射到docker容器中的/data 目录
web:
build:
context: .
args:
active: prod #将值带入到Dockerfile文件中
ports:
- "8080:8081"
volumes:
- data_volume:/tmp
links: - db volumes: data_volume: #设置一个可用作共享的券,很遗憾 无法挂载到本地指定目录
执行
docker-compose up -d
查看本地code目录并登陆到 docker 容器中对比文件

内容是一致的
修改 “./code:/data” 为 “data_volume:/data” ,docker-compose up 启动
搜索定义的卷名称
docker volume ls | grep data_volume

查看卷详细信息
docker volume inspect docker_data_volume

cd /var/lib/docker/volumes/docker_data_volume/_data

登陆到两个 容器终端分别查看 /data与/tmp 内容是一致的

10,networks 加入指定网络
docker-compose.yml文件配置
version: '3'
services:
db:
restart: always
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD:
PGDATA: /data/
POSTGRES_USER: admin
POSTGRES_DB: my_db
networks:
- new_net_1
web:
build:
context: .
args:
active: prod #将值带入到Dockerfile文件中
ports:
- "8080:8081"
networks:
- new_net_1
links:
- db
networks:
new_net_1:
启动
docker-compose up -d
查看网络
docker network ls

查看网络详情

两个服务都加入到定义的新网络中了
11. 其他
docker-compose hello word的更多相关文章
- 通过 Docker Compose 组合 ASP NET Core 和 SQL Server
目录 Docker Compose 简介 安装 WebApi 项目 创建项目 编写Dockfile Web MVC 项目 创建项目 编写Dockfile 编写 docker-compose.yml文件 ...
- Docker Compose集成式应用组合及service编排
Compose简介 Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.其代码目前在 https://github.com/docker/compose 开源.C ...
- 25.docker compose 简介 和 docker-compose.yml 参数介绍
1. docker compose概念 文档 https://docs.docker.com/compose/compose-file/compose-versioning 一个基于 docker ...
- Docker compose学习笔记
一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...
- docker compose 笔记
https://www.youtube.com/watch?v=Uez88TWOECg 是基于这个视频做的笔记. Docker Compose: Compose is a tool for defin ...
- 利用docker compose启动gitlab及runner
添加docker compose配置文件 新建文件docker-compose.yml,输入如下内容: gitlab: image: 'gitlab/gitlab-ce:latest' contain ...
- Docker Compose to CoreOS
taken from https://docs.docker.com/compose/install/ the only thing is that /usr is read only, but /o ...
- Docker Compose—简化复杂容器应用的利器
Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- Docker Compose容器编排
Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...
随机推荐
- ElasticSearch CPU和内存占用高的优化记录
公司最近使用ElasticSearch作为数据报表汇总引擎.上线三个月累计数据800万,但是今天突然大面积出现查询超时,上服务器查看服务运行情况,发现cpu使用率高达300% mem 使用率也到了90 ...
- redis命令String类型(四)
String 字符串类型 命令: 1> 赋值 语法:set key value 比如:set test 123 2> 取值 语法:get key 比如:get test 3> 取值并 ...
- PHP博大精深,入门容易,精通难,怎么才能真正学好PHP
基础最重要 (1)熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作完整的网页,对元素属性达到熟悉程度 (2)理解动态语言的概念,运做机制,熟悉PHP语法 (3)学习如何将PHP与HT ...
- iOS保持待续连接
当iphone应用程序进行网络编程时,切到后台后,socket连接会断掉,ios的设计就是这样. 但是好在apple公司也没有那么绝,还是有一些东西可以在后台运行的(backgroundmodes), ...
- Linux 环境下安装Redis的步骤
#进入usr/local目录cd /usr/local#下载1.wget http://download.redis.io/releases/redis-4.0.10.tar.gz#解压2.tar x ...
- zuul1.3源码扒一扒(1)
先开个头吧 作为偶尔点进源码的时候看到东西,或是学到,或是不解,或是惊讶,之后的一些记录.从springcloud各个组件开始吧,计划文段保持间断,只道出核心点,不过各个文段保持连续. zuul作为s ...
- 前端代理----whistle
场景一:如何将本地的请求代理到服务器上(如果接口没有校验登陆的情况) 最简单的方法:在项目文件中找到webpack开发环境的配置文件,配置devServer对象 devServer: { conten ...
- PAT乙级考前总结(一)
数学相关的题目 1001 害死人不偿命的(3n+1)猜想 (15 分) 直接一步步计数 1005 继续(3n+1)猜想 (25 分) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目 ...
- 小妖精的完美游戏教室——buff系统
作者:小妖精Balous,未经作者允许,任何个人与单位不得将此源代码用于商业化项目 #region buff /// <summary> /// 是否魔法免疫,魔法免疫的生物不会受到除自己 ...
- java——————基础总结2
一 程序中常见的错误: 1,语法错误 2, 逻辑错误 3,运行时错误 二 定义class类的时候,如果前面加个public 那么class的类名必须要和文件名一致,否则就会 出现编译错误 三 编译源文 ...