什么是docker compose?
docker compose是一个容器编排功能,将运行在不同容器中的不同服务器进行编排,联合在一起。
可以用于对多数容器进行统一管理:包括但不限于:网络、端口、挂载等可以用于实现容器的集群化,相关于容器、镜像的一系列操作,compose都可以进行操作,就是一个对于容器进行管理的功能
一、compose文件结构
1、yml文件
compose中文件结构通常是指yml文件的结构,那什么是yml文件?
yml文件是一种键值对格式的文件。
yml文件对于格式非常的敏感,需要注意以下几种事项:
- 只识别空格进行的缩进,不识别tab键的缩进形式
- 通常开头部分缩进两个空格
- 字符后面缩进一格空格,包括但不限于:冒号、逗号、横杠等这些字符。字符后面必须缩进一格
- 支持使用#来进行注释
- 如果包含特殊字符,需要使用单引号引用起来
- 布尔值必须使用引号括起来
例如:
house:
family:
name: Doe
parents:
- John
- Jane
children:
- Paul
- Mark
- Simone
address:
number: 34
street: Main Street
city: Nowheretown
zipcode: 1234
yml文件格式例如上面,需要进行一级级的对应,不同级之间,有两个空格的间隔。
注:如果在一个层级中,一个键有多个值,可以使用在下一个层级,同样是空余两格,以短横杠起始,有几个值写几个端横杠
2、Compose配置常用的字段
字段 | 描述 |
---|
build dockerfile centext | 指定Dockerfile文件名构建镜像上下文的路径 | images | 指定镜像 | command | 执行命令,覆盖默认命令 | container name | 指定容器名称,由于容器名称是唯一的。如果指定自定义名称,则是无法创建scale | deploy | 指定部署和运行服务相关配置,只能再Swarm模式使用 | environment | 添加环境变量 | networks | 加入网络 | ports | 暴露容器端口,与-p相同,但是端口号必须大于60 | volumts | 挂载宿主机路径或者命令卷 | restart | 重启策略,默认no,always, on-failure,unless-stoped | hostname | 容器主机名 |
build:构造一个镜像时候的一个定义方式
dockerfile:方式是使用dockerfile的方式构建
context:服务docerfile文件的路径
images:可以指定使用的镜像名字,例如:images: 镜像名,注意:后面有个空格
command:执行一个语句
container name:用于指定容器的名称,因为容器名字是唯一的。如果指定自定义名称,则无法scale(设置副本集)
#副本集:将一个镜像制作成多个容器,这多个容器之间,运行环境等方面都是一模一样。当容器架构中的一个容器挂掉之后,可以直接启动一个相同的容器,用以保持副本集的数量,这是副本集的概念,同样也是K8s的核心。可以提高微服务的速度,提高容灾,高并发性能
deploy:是一个控制器,在k8s中是控制管理副本集的一个插件
restart:一种重启策略,默认是关闭之后不启动,如果always则是不管是手动关闭还是非手动关闭,都会自动把关闭状态的容器启动,unless-stoped只拉取关闭状态的容器,on-failure,只会启动容器返回码非零的容器
3、Compose在外部的常用命令
字段 | 描述 |
---|
build | 重新构建一个镜像信息 | ps | 列出容器当前docker compose所控制的容器 | up | 创建以及启动容器 | exec | 在容器内执行命令 | scale | 指定一个服务器的启动数量,相当于副本集的数量 | top | 显示容器进程,所有docker compose控制的进程启动的容器 | logs | 查看容器的输出信息 | down | 删除容器、网络、数据卷和镜像 | stop/start/restart | 停止/启动/重启容器服务 |
docker compose基本使用格式:docker-compose [options] [COMMAND] [ARGS…]
docker-compose选项:
- –verbose:输出更多调试信息
- –version:打印版本并退出
- -f /–file FILE:使用特定的compose模板文件,默认为docker-compose.yml
- -p /–project-name NAME:指定项目名称,默认使用目录名称
二、安装docker compose工具
1、下载
curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
首次连接下载的时候,可能会提示失误或者连接不上,可能是因为网络原因,可以多试几次
2、添加权限
文件在刚下载之后,默认是没有执行权限的,所以需要手动添加执行权限
chmod +x /usr/local/bin/docker-compos
3、运行docker-compose
docker-compose
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qeTSRtdJ-1644162479473)(C:\Users\李洪坤\AppData\Roaming\Typora\typora-user-images\image-20220206213552207.png)]
可以看到,现在已经正常执行了
三、编译镜像
手动创建下面的文件(dockerfile文件之前有的话,直接拉取过来也是可以的)
tree
.
├── docker-compose.yml
├── nginx
│ ├── Dockerfile
│ ├── nginx-1.12.0.tar.gz
└── wwwroot
└── index.html
其中yml文件内部
cat docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1321:80
- 1707:443
networks:
- cluster
volumes:
- ./wwwroot: /usr/local/nginx/html
networks:
cluster:
nginx的dockerfile文件
cat ./nginx/Dockerfile
FROM centos:7
ADD nginx-1.12.0.tar.gz /tmp
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make &> /dev/null \
&& useradd -M -s /sbin/nologin nginx \
&& cd /tmp/nginx-1.12.0/ \
&& ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module &> /dev/null \
&& make &> /dev/null \
&& make install &> /dev/null
VOLUME ["/usr/local/nginx/html"]
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
index.html文件中就是自己配置的网页信息,就不多做介绍了
确定之后,编译
docker-compose -f docker-compose.yml up -d
查看运行结果
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da38007f09ab dockercompose_nginx "/usr/local/nginx/sb…" About a minute ago Up About a minute 0.0.0.0:666->80/tcp, :::666->80/tcp, 0.0.0.0:667->443/tcp, :::667->443/tcp dockercompose_nginx_1
#可以看到,这个端口信息就是我们在yml文件中设置的端口信息,直接在这个生效了
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockercompose_nginx latest b1e4b9dfa72d 3 minutes ago 478MB
访问网址端口,查看该网站页面
curl 192.168.75.51:666
hello
#显示结果
cat ./wwwroot/index.html
hello
|