DockerCompose容器编排(理论+实操)
⽂章⽬录
前⾔
我们知道使⽤⼀个 Dockerfile 模板⽂件可以定义⼀个单独的应⽤容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术⽅案,今天给⼤家介绍 Docker 官⽅产品 Docker-Compose
Dockerfile 可以定义⼀个单独的应⽤容器;⽽ docker-compose 则允许⽤户在⼀个模板(YAML 格式)中定义⼀组相关联的应⽤容器(被称为⼀个 project,即项⽬),例如⼀个 Web 服务容器再加上后端的数据库服务容器(LNMP)等
Docker-Compose 项⽬由 Python 编写,调⽤ Docker 服务提供的 API 来对容器进⾏管理。因此,只要所操作的平台⽀持 Docker API,就可以在其上利⽤ Compose 来进⾏编排管理
⼀、Docker Compose 概述(YML)
使⽤ Docker Compose 可以轻松、⾼效的管理容器,它是⼀个⽤于定义和运⾏多容器 Docker 的应⽤程序⼯具
Docker Compose 使⽤ YML ⽂件来配置应⽤程序所需要的的所有服务,⾮常适合组合使⽤多个容器进⾏开发的场景,且不再需要使⽤shell 脚本来启动容器
YML(重点):
1.YAML是⼀种标记语⾔很直观的数据序列化格式,通常以.yml或.yaml为后缀的⽂件,阅读性很友好
2.不⽀持制表符tab键缩进,需要使⽤空格缩进,使⽤缩进表⽰层级关系
3.通常开头缩进 2 个空格,缩进的空格数不重要,只要相同层级的元素左对齐即可
4.字符后缩进⼀个空格,如冒号、逗号、横杆,如果包含特殊字符⽤单引号引起来
5.⽤#号表⽰注释
1.Docker-Compose 配置常⽤字段
常⽤字段描述
build指定Dockerfile⽂件名,要指定Dockerfile⽂件需要在build标签的⼦级标签中使⽤dockerfile标签指定dockerfile构建镜像上下⽂路径
context可以是dockerfile的路径,或者是指向git仓库的url地址
image指定镜像
command执⾏命令,覆盖容器启动后默认执⾏的命令
container
指定容器名称,由于容器名称是唯⼀的,如果指定⾃定义名称,则⽆法scale name
deploy指定部署和运⾏服务相关配置,只能在Swarm模式使⽤
environment添加环境变量
networks加⼊⽹络,引⽤顶级networks下条⽬
ports暴露容器端⼝,与-p相同,但端⼝不能低于60
volumes挂载⼀个宿主机⽬录或命令卷到容器,命名卷要在顶级volume定义卷名称
volumes_from从另⼀个服务或容器挂载卷,可选参数:ro和:rw
hostname容器主机名
hostname容器主机名
sysctls在容器内设置内核参数
links连接到另外⼀个容器,- 服务名称[:服务别名]
restart 重启策略,默认为no,另有always/no-failure/unless-stoped no,默认策略,在容器退出时不重启容器。 no-failure,在容器⾮正常退出时(退出状态⾮0),才会重启容器。 on-failure:3,在容器⾮正常退出时重启容器,最多重启3次。 always,在容器退出时总是重启容器。 unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停⽌了的容器
depends_on 在使⽤Compose时,最⼤的好处就是少打启动命令,但⼀般项⽬容器启动的顺序是由要求的,如果直接从上到下启动容器,可能会因为容器依赖问题⽽启动失败。例如在没启动数据库容器的时候启动应⽤容器,应⽤容器会因为不到数据库⽽退出。depends_on标签⽤于
解决容器的依赖、启动先后的问题
常⽤字段描述
2.Docker-Compose 常⽤命令
字段描述
build重新构建服务
ps列出容器
up创建和启动容器
exec在容器⾥⾯执⾏命令
scale指定⼀个服务容器启动数量
top显⽰容器进程
logs查看容器输出
down删除容器、⽹络、数据卷和镜像stop/start/restart停⽌/启动/重启服务
'命令格式:'
docker-compose [选项][命令][参数]
'常⽤选项:'
-verbose:输出更多调试信息
-version:打印版本并退出
-f:使⽤特定的compose模板⽂件,默认为l
-p:指定项⽬名称,默认使⽤⽬录名称
3.Docker-Compose ⽂件结构
[root@docker ~]# yum install -y tree
[root@docker ~]# tree /opt/compose_lnmp/
/opt/compose_lnmp/
├── l
├── mysql
│├── Dockerfile
│├── myf
│└── mysql-boost-5.7.
├── nginx
│├── Dockerfile
│├── nginx-1.12.
│├── f
│└── wordpress-4.9.4-zh_
└── php
├── Dockerfile
├── php-7.1.10.tar.bz2
├── f
├── php.ini
└── f
⼆、Docker-Compose 安装
Docker-Compose 是 Docker 的独⽴产品,因此需要安装 Docker 之后再单独安装 Docker-Compose
[root@localhost ~]# cd /usr/local/bin/
[root@localhost bin]# ls
[root@localhost bin]# curl -L github/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/doc ker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
1006641006640032300:00:02 0:00:02 --:--:-- 323
10010.3M 10010.3M 00 1414k 00:00:07 0:00:07 --:--:-- 2607k
[root@localhost bin]# ls
docker-compose
[root@localhost bin]# chmod +x /usr/local/bin/docker-compose
[root@localhost bin]# ls
docker-compose
[root@localhost bin]# docker-compose -v
docker-compose version 1.21.2, build a133471
三、Docker-Compose 部署 Nginx
1. 准备依赖⽂件
[root@localhost ~]# mkdir -p /opt/compose_nginx/nginx
[root@localhost ~]# cd /opt/compose_nginx/nginx/
[root@localhost nginx]# rz
[root@localhost nginx]# ls
nginx-1.12.
[root@localhost nginx]# vim Dockerfile
[root@localhost nginx]# cat Dockerfile
FROM centos:7
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. /usr/local/src
WORKDIR /usr/local/src/nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
nginx停止命令--user=nginx \
--group=nginx \
--with-http_stub_status_module
RUN make -j 4&&make install
RUN ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#ENV PATH /usr/local/nginx/sbin/:PATH
EXPOSE 80
EXPOSE 443
RUN echo"daemon off;">> /usr/local/nginx/f
CMD ["/usr/local/nginx/sbin/nginx"]
2. 编写配置⽂件 l
[root@localhost ~]# mkdir -p /opt/compose_nginx/nginx
[root@localhost nginx]# cd ..
[root@localhost compose_nginx]# l
[root@localhost compose_nginx]# l
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1216:80
- 1216:443
networks:
- xjj
volumes:
- ./wwwroot:/usr/local/nginx/html
networks:
xjj:
参数说明:
version: '3'#compose编排版本为3
services: #服务:
nginx: #服务名称
hostname: nginx #容器主机名
build: #创建容器过程:
context: ./nginx #所需素材都在该⽬录(仓库)下
dockerfile: Dockerfile #指定Dockerfile⽂件
ports: #提供端⼝:
-
1216:80 #对外提供(暴露)的端⼝
- 1217:443
networks: #指定⽹络
- xjj #⽹络名称(集名称需⼀致)
volumes: #数据卷
- ./wwwroot:/usr/local/nginx/html #将宿主机该仓库内⽂件与nginx⾸页⽂件相关联(容器)
networks: #对外公开需要声明networks集名称
xjj:
3. ⽣成镜像容器
[root@localhost nginx]# docker-compose -l up -d
...
.
..
Successfully built 4e35d880d9ca
Successfully tagged compose_nginx_nginx:latest
————————————————
[root@localhost compose_nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
compose_nginx_nginx latest 4e35d880d9ca 49 seconds ago 729MB
centos 7 eeb6ee3f44bd 2 months ago 204MB
[root@localhost compose_nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
063f07eec655 compose_nginx_nginx "/usr/local/nginx/sb…"56 seconds ago Created compose_nginx_nginx_1 4. 访问测试
[root@localhost compose_nginx]# ls
[root@localhost compose_nginx]# echo "<h1>hello world</h1>" > index.html
[root@localhost compose_nginx]# curl 192.168.126.12:1216
<h1>hello world</h1>
5.查看结构
[root@localhost compose_nginx]# yum -y install tree
[root@localhost compose_nginx]# tree ./
./
├── l
├── nginx
│├── Dockerfile
│└── nginx-1.12.
└── wwwroot
└── index.html
2 directories, 4 files
四、Docker-Compose 部署 LNMP
1. 编写 Dockerfile ⽂件
Dockerfile ⽂件详情见往期博客
存放⽬录为:
[root@localhost ~]#mkdir -p /opt/compose_lnmp/nginx/
[root@localhost ~]#mkdir -p /opt/compose_lnmp/mysql/
[root@localhost ~]#mkdir -p /opt/compose_lnmp/php/
⽂件配置:
[root@localhost ~]#ls /opt/compose_lnmp/nginx/
Dockerfile nginx-1.12. f wordpress-4.9.4-zh_ [root@localhost ~]#ls /opt/compose_lnmp/mysql/
Dockerfile myf mysql-boost-5.7.
[root@localhost ~]#ls /opt/compose_lnmp/php/
Dockerfile php-7.1.10.tar.bz2 f php.ini f
2. 编写配置⽂件 l
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论