Docker——compose

一、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地址:端口号

相关推荐
笃励18 分钟前
Java面试题二
java·开发语言·python
易雪寒36 分钟前
IDEA在git提交时添加忽略文件
java·git·intellij-idea
程序那点事儿1 小时前
k8s 之安装busybox
云原生·容器·kubernetes
打码人的日常分享1 小时前
企业人力资源管理,人事档案管理,绩效考核,五险一金,招聘培训,薪酬管理一体化管理系统(源码)
java·数据库·python·需求分析·规格说明书
27669582921 小时前
京东e卡滑块 分析
java·javascript·python·node.js·go·滑块·京东
爱写代码的刚子1 小时前
C++知识总结
java·开发语言·c++
-$_$-1 小时前
【黑马点评】 使用RabbitMQ实现消息队列——1.Docker与RabbitMQ环境安装
分布式·docker·rabbitmq
芯的一天1 小时前
windows下DockerDesktop命令行方式指定目录安装
windows·docker
冷琴19961 小时前
基于java+springboot的酒店预定网站、酒店客房管理系统
java·开发语言·spring boot
daiyang123...2 小时前
IT 行业的就业情况
java