Docker——compose

发布于:2024-05-09 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、Docker-compose简介

  1.1 docker-compose定义

    docke-Compose主要负责实现对Docker容器集群的快速编排

    docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名

    一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖

    一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如:Consul

    docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器

    使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况

    Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)

    docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。

    docker swarm(管理跨界点):管理多个容器,即容器与容器之间相互通信

  1.2 docker-compose分层

  • 工程(项目):project LNMP
  • 服务:nginx、mysql、php
  • 容器(container):container 容器名 --name 主机名 -h 镜像 image:标签/端口 -p 网络 --network 数据卷 -v...

    使用docker-compose可以完成多个docker run的所有操作

  1.3 compose部署

    在部署compose之前需要注意的:安装 Docker 之后在单独安装 Docker Compose

  1.3.1 下载docker-compose

curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

  1.3.2 增加权限

chmod +x /usr/local/bin/docker-compose

  1.3.3 查看docker-compose权限

docker-compose --version

  1.4  YAML文件格式及编写注意事项

    YAML 数据结构通过缩进来表示,连续的项目通过-来表示键值对用:分隔数组用中括号 [] 括起来hash 用花括号{}括起来

  

  1.4.1 使用YAML时需要注意下面事项

  • 大小写敏感

  • 通过缩进表示层级关系

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

  • 相同层级左对齐,通常开头缩进2个空格

  • 用#号注释

  • 符号字符后缩进1个空格,例如冒号,顿号,逗号,横杠等

  • 包含特殊字符用单引号(''):作为普通字符处理,双引号(""):特殊字符作为本身祥表示的意思

  1.4.2 数据结构

  1.4.2.1 对象映射
  • 对象映射: 键值对的字典。

举例:animal:pets

  • 序列数组:一组按次序排序的列表

举例:

表现形式一:- Cat

                      - Dog

                      - Goldfish

表现形式二:["Cat","Dog","Goldfish"]

布尔值:debug:true/debug:false

举例:

#yaml格式

language:

  -Java

  -Golang

  -Python

wesites:

  cpu: 2

  memory: 1024M

  swap: 2048M

  disk: 60G

  • 键:{值}

# JSON格式

{

  languages: [

    'Java',

    'Golang',

    'Python'

  ],

  [

    cpu:'2',

    memory:'1024M',

    swap:'2048M',

    disk:'60G'

  ]

}

  • 键  值

school: nan jing

  hhh:

    - xixi

    - heihei

    - luelue

    - guagua

    - mimi

  dazui:

    - hama

    - tamu

  1.5 docker-compose配置常用字段

字段 描述
build 指定Dockerfie文件名,要指定Dockerfile文件需要在build标签的子标签中使用dockerfile标签
dockerfile 构建镜像上下文路径
context 可以是dockerfile的路径或者是指向git仓库的url地址
image 指定镜像
command 执行命令,覆盖容器启动后默认执行的命令
container_name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量
deploy 指定部署和运行服务相关配置,只能在Swarm模式使用
environment 添加环境变量
networks 添加网络,引起顶级network下条目
networks_mode 设置容器的网络模式,如host,bridge,...
ports 暴露容器端口,与-P相同,但端口不能低于60
volumes 挂载一个宿主机目录或命令卷到容器可选参数:ro和:rw,仅版本‘2’支持
hostname 容器主机名
sysctls 在容器内设置内核参数
links 连接到另外一个容器,- 服务名称[:服务别名]
privileged 用来给root权限
restart

设置重启策略,包括:no,always,nounless-st-failure,opend

no:默认策略,在容器退出时不重启容器

on-failure:在容器非正常退出时,才会重启服务器

on-failure:在容器非正常退出时重启容器,最多重启3次

always:在容器退出时总是重启容器

unless-stopped:在退出容器时总是重启容器,但是不考虑在docker守护进程启动时

depends_on 好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败

  1.6 doker compose常用命令

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

  1.7 Docker Compose文件结构

  1.7.1 准备依赖文件

  1.7.1.1 创建文件夹

cd /opt/

mkdir docker-compose_nginx

cd docker-compose_nginx

mkdir wwwroot

ls

  1.7.1.2 将nginx移动到创建好的文件夹下显示

cp -r nginx/ /opt/docker-compose_nginx/

cd docker-compose_nginx/

ls

cd nginx/

ls

  1.7.1.3 编辑内容到wwwroot下

echo "xxx" > /opt/docker-compose_nginx/wwwroot/index.html

  1.7.1.4 编辑Dockerfile

vim Dockerfile

FROM centos:7
MAINTAINER this is nginx image <cht>
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin 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 -j 2 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh

  1.7.2 编辑配置文件docker-compose.yml

cd /opt/docker-compose_nginx/

vim docker-compose.yml

version: '3'
services:
  nginx:
    container_name: web01
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1216:80
      - 1217:443
    networks:
      lnmp:
        ipv4_address: 172.19.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  lnmp:
   driver: bridge
   ipam:
     config:
       - subnet: 172.19.0.0/16

  1.7.3 启动配置文件,重新启动docker服务

docker-compose -f docker-compose.yml up -d

-f( --file FILE) 使用特定的 compose 模板文件,默认为 docker-compose.yml
-p(--project-name NAME) 指定项目名称,默认使用目录名称
-d 在后台运行

  1.8 docker——Compose编写nginx+tomcat镜像

  1.8.1 编辑配置文件docker-compose.yml

vim docker-compose.yml

version: '3'
services:
  nginx:
    container_name: web01
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
    - 1212:80
    - 1616:443
    networks:
      xzq:
        ipv4_address: 172.19.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
  tomcat:
    hostname: tomcat
    build:
     context: ./tomcat
     dockerfile: Dockerfile
    ports:
     - 8080:8080
    networks:
      cht:
networks:
  cht:
    driver: bridge
    ipam:
      config:
        - subnet: 172.19.0.0/16

  1.8.2 停止并删除容器

docker stop 容器名

docker rmi 容器名

  1.8.3 查看镜像状态

docker images

  1.8.4 删除docker网络

docker network ls

docker network rm 容器ID

docker network ls

  1.8.5 复制tomcat到docker-compose_nginx下

cp -r tomcat/ /opt/docker-compose_nginx/

cd docker-compose_nginx/

ls

cd tomcat/

ls

  1.8.6 后台运行docker-compose

cd /opt/docker-compose_nginx/

docker-compose -f docker-compose.yml up -d

  1.8.7 查看所有docker状态

docker ps

   1.8.8 查看容器的IP地址

docker inspect 容器ID

  1.8.9 网页测试

    您的IP地址:端口号


网站公告

今日签到

点亮在社区的每一天
去签到