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