docker-compose

目录

一、docker-compose简介:

1.docker-compose概述:

2.docker-compose与传统构建的区别:

[3.docker-compose 的三大概念:](#3.docker-compose 的三大概念:)

二、YAML文件格式及编写注意事项:

[1. YAML文件格式:](#1. YAML文件格式:)

[2. YAML格式的注意事项:](#2. YAML格式的注意事项:)

[3. YAML 的写法格式:](#3. YAML 的写法格式:)

[3. YAML数据结构案例:](#3. YAML数据结构案例:)

[三、Docker compose字段和命令:](#三、Docker compose字段和命令:)

[1. Docker Compose配置常用字段:](#1. Docker Compose配置常用字段:)

[2. Docker Compose 常用命令:](#2. Docker Compose 常用命令:)

[四、Docker Compose 环境安装:](#四、Docker Compose 环境安装:)

五、docker-compose部署nginx:

1.准备依赖文件:

[2. 编写Dockerdile文件:](#2. 编写Dockerdile文件:)

[3. 编写配置文件docker-compose.yml文件:](#3. 编写配置文件docker-compose.yml文件:)

[4. 生成镜像容器:](#4. 生成镜像容器:)

[5. 查看目录结构:](#5. 查看目录结构:)

[6. 访问测试:](#6. 访问测试:)


一、docker-compose简介:

1.docker-compose概述:

  • docker-compose 实现在单机上对容器集群编排管理的工具。使用python开发的,能运行docker的平台也都能用docker-compose编排管理容器。
  • 本质就是在yaml格式的docker-compose配置模板文件里定义多个容器的启动参数和依赖关系,并使用docker-compose根据这个模板文件的配置来启动和管理容器集群

2.docker-compose与传统构建的区别:

Dockerfile 文件 --> docker build 一个个构建镜像 --> docker run 一个个创建并启动容器

Dockerfile 文件 --> docker-compose 自动完成所有的镜像的构建和容器的创建、启动、管理

3.docker-compose 的三大概念:

工程(project),服务(service)以及容器(containner)

  • 默认使用项目的目录名做project项目名,支持使用 -p 或 --project-name 来指定项目名
  • 在项目目录里要包含一个 docker-compose 配置模板文件,默认为 docker-compose.yml,支持使用 -f 或 --file 来指定项目的配置模板文件
  • 在配置模板文件里要包含一个或者多个服务,每个服务包含启动容器的名称、镜像、映射端口、环境变量、挂载点、网络模式、依赖关系等容器启动的配置参数

二、YAML文件格式及编写注意事项:

1. YAML文件格式:

  • YAML是一种标记性语言,它可以很直观的展示数据序列化格式,可读性高。
  • 类似于json数据描述语言,但是语法要比json简单很多。
  • YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号[ ] 括起来,bash用花括号{ } 括起来。

2. YAML格式的注意事项:

  • 不支持制表符tab键缩进,只能使用空格缩进

  • 通常开头缩进2个空格

  • 字符后缩进1个空格,如冒号【:】、逗号【,】、横杠【-】

  • 用#号表示注释

  • 如果包含特殊字符用单引号【' '】引起来作为普通字符,如果用双引号【" "】表示特殊字符本身的意思,

  • 布尔值必须用【" "】括起来

  • YAML区分大小写

3. YAML 的写法格式:

bash 复制代码
横向写法:
ky31: ["qqq", "www", "eee"]

纵向写法:
ky32:
- "qqq"
- "www"
- "eee"

3. YAML数据结构案例:

bash 复制代码
#键值对表示
animal:pets
 
#数组:一组按次序排列的列表
- cat
- dog
- goldfish
 
#布尔值
debug: "true"
debug: "false"
 
#yaml实例
languages:        #序列的映射 
  - java
  - Golang
  - Python
  
websites:         #映射的映射
  Baidu: www.baidu.com
  Wangyi: www.163.com
  Souhu: www.souhu.com
 
#或者
languages: ["java","Golong","Python"]
websites:
  Baidu:
    www.baidu.com
  Wangyi:
    www.163.com
  Souhu:
    www.souhu.com
 
#Json格式
{
  languages: [
    'Java',
    'Golong',
    'Python',
  ],
  websites: [
    Baidu: 'www.baidu.com',
    Wangyi: 'www.163.com',
    Souhu: 'www.souhu.com',
  ]
}

三、Docker compose字段和命令:

1. Docker Compose配置常用字段:

字段 描述
build 指定Dockerfile文件名(要指定的Dockerfile文件需要在build标签的子级标签中用dockefile标签指定)
dockerfile 构建镜像上下文路径
context 可以是dockerfile路径,或者时执行git仓库的url地址
context 可以是dockerfile路径,或者时执行git仓库的url地址
images 指定镜像(已存在)
command 执行命令,会覆盖容器启动后默认执行的命令(会覆盖dockefile中的CMD指令)
container_name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量。
deploy 指定部署和运行服务相关配置,只能在swarm模式使用
environment 添加环境变量
networks 加入网络,引用顶级networks下条目
network-mode 设置容器的网络模式
ports 暴露容器端口,与-p相同,但是端口不能低于60
volumes 挂载一个宿主机目录或命令卷到容器,命令卷要在顶级volumes定义卷名称
volumes_from 从另一个服务或容器挂载卷,可选参数:ro和rw(仅版本'2'支持)
hostname 在容器内设置内核参数
links 连接诶到另一个容器,- 服务名称[ : ]
privileged 用来给容器root权限,注意是不安全的,true
restart 重启策略,定义是否重启容器 1、no,默认策略,在容器退出时不重启容器 2、on-failure,在容器非正常退出时(退出状态非0),才会重启容器 3、on-failure:3 在容器非正常退出时,重启容器,最多重启3次 4、always,在容器退出时总是重启容器, 5、unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。
depends_on 此标签用于解决容器的依赖,启动先后问题。如启动应用容器,需要先启动数据库容器。php:depends_on:- apache- mysql

2. Docker Compose 常用命令:

运行这些命令需要结合docker-compose一起使用。

命令 描述
build 重新构建服务
ps 列出容器
up 创建和启动容器
exec 在容器里面执行命令
scale 指定一个服务容器启动数量
top 显示正在运行的容器进程
logs 查看服务容器的输出
down 删除容器、网络、数据卷和镜像
stop/start/restart 停止/启动/重启服务

四、Docker Compose 环境安装:

Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose

bash 复制代码
#下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安装
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version

五、docker-compose部署nginx:

1.准备依赖文件:

bash 复制代码
mkdir -p /opt/compose_nginx/nginx /opt/compose_nginx/wwwroot
cd /opt/compose_nginx/nginx
cp nginx-1.12.0.tar.gz ./

2. 编写Dockerdile文件:

bash 复制代码
cd /opt/compose_nginx/nginx
vim Dockerfile
#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <wl>
#添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传nginx软件压缩包,并解压
ADD nginx-1.12.0.tar.gz /usr/local/src/
#指定工作目录
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

3. 编写配置文件docker-compose.yml文件:

bash 复制代码
vim /opt/compose_nginx/docker-compose.yml
version: '3' 
  #定义编排版本,共3版(1,2,3),1被淘汰,2的话只能单机编排,3的话即可以实现单机编排,也可以实现多机编排。
services:
  nginx:
    container_name: web1
    hostname: nginx     #容器的主机名为nginx
    build:              #定义创建容器的过程   如果使用已有镜像,直接写images:
      context: ./nginx  #指定创建容器的目录位置(存储dockerfile的目录)当前路径的nginx/
      dockerfile: Dockerfile
    ports:              #定义端口
      - 1216:80
      - 1217:443
    networks:           #指定网络
      lnmp:
        ipv4_address: 172.18.0.10
    volumes:            #数据卷,挂载目录
      - ./wwwroot:/usr/local/nginx/html
networks:               #自定义网络
  lnmp:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16


echo "this is wzw" >/opt/compose_nginx/wwwroot/index.html

4. 生成镜像容器:

bash 复制代码
cd /opt/compose_nginx/
docker-compose -f docker-compose.yml up -d

-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml

-p, --project-name NAME :指定项目名称,默认使用目录名称

-d :在后台运行


5. 查看目录结构:

bash 复制代码
cd /opt/compose_nginx
tree

6. 访问测试:

bash 复制代码
curl 20.0.0.55:1234
或
网页访问:http:20.0.0.55:1234
相关推荐
云飞云共享云桌面2 小时前
昆山精密机械公司8个Solidworks共用一台服务器
运维·服务器·网络·3d·自动化·制造
恒创科技HK2 小时前
中国香港服务器中常提到的双向/全程CN2是什么意思?
运维·服务器
MyCollege19992 小时前
win10使用ssh访问vmware虚拟机
linux·运维·centos
a栋栋栋6 小时前
wsl 环境下用Docker 安装多版本MySQL
mysql·docker·容器
潮落拾贝6 小时前
k8s部署kafka三节点集群
容器·kafka·kubernetes
大霞上仙6 小时前
jmeter实现两个接口的同时并发
运维·服务器·jmeter
饱饱要坚持可持续发展观6 小时前
docker 拉取本地镜像
docker
我就要用Cx3307 小时前
配置docker常见问题
运维·docker·容器
nmxiaocui7 小时前
openssl升级
linux·运维·服务器
最小的帆也能远航9 小时前
2018年下半年 系统架构设计师 综合知识
linux·运维·服务器