docker-compose安装使用
安装
- 安装和添加执行权限命令
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
- 如下表示安装成功
[root@localhost ~]# sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 617 0 617 0 0 832 0 --:--:-- --:--:-- --:--:-- 832 100 10605k 100 10605k 0 0 245k 0 0:00:20 0:00:20 --:--:-- 10605k [root@localhost ~]# sudo chmod +x /usr/local/bin/docker-compose
- 查看是否安装成功
[root@localhost ~]# docker-compose -version docker-compose version 1.21.2, build a133471
快速使用
1.在用户目录下新建docker-compose测试目录:
[root@localhost ~]# mkdir dockercomposetest
[root@localhost ~]# cd dockercomposetest
[root@localhost ~]# vi docker-compose.yml
2.粘贴如下内容到配置文件中:
version: '2' services: web1: image: nginx ports: - "6061:80" container_name: "web1" networks: - dev web2: image: nginx ports: - "6062:80" container_name: "web2" networks: - dev - pro web3: image: nginx ports: - "6063:80" container_name: "web3" networks: - pro networks: dev: driver: bridge pro: driver: bridge
3.授权执行:
chomd 755 docker-compose.yml
4.启动应用:
docker-compose up -d
看见一下信息表示启动成功:
[root@k8smaster dockercomposetest]# docker-compose up -d
Creating web1 ... done
Creating web2 ... done
Creating web3 ... done
5.验证:
[root@k8smaster dockercomposetest]# curl "http://127.0.0.1:6061"
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
出现以上信息,就表示已经成功使用docker-compose成功启动了三个nginx!
docker-compose理解
假如你要部署一个项目,这个项目中包含前端、后端、数据库、mq和redis等等,如果一个一个手动的docker run启动,会非常繁琐,而且后续如果需要你再次启动,那么当时启动的那些参数比较难找,而且一个一个起,没法描述这些容器之间的关联关系,对于整体来说,没有这事一整个“项目”的概念。
docker-compose就能很好的解决这个问题,他相当于是一个容器编排的工具,能把这些容器统筹成一个项目,然后在项目中分出不同的服务,然后这些服务下面又可以起不同的容器,这个容器就是我们单独拿镜像起的那种了。
使用docker-compose除了能少敲docker run的命令外,还有其他好处,如有些容器间有依赖关系,那么可以docker-compose可以让他们按序启动,这个手动启动的时候需要人去记。
docker-compose.yml文件节点解释
Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。
docker-compose.yml模板:
version: '2' services: web: image: dockercloud/hello-world ports: - 8080 networks: - front-tier - back-tier redis: image: redis links: - web networks: - back-tier lb: image: dockercloud/haproxy ports: - 80:80 links: - web networks: - front-tier - back-tier volumes: - /var/run/docker.sock:/var/run/docker.sock networks: front-tier: driver: bridge back-tier: driver: bridge
1. version
Compose目前有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1将来会被弃用。
2. services
services就是你要起的那些个服务,web啊redis啊这些。
3. image
你起的这个容器镜像名称或者镜像ID,这里本地有用本地的,本地没有会自动拉取。
4. build
服务除了可以基于指定的镜像,还可以基于一份Dockerfile,在使用up启动时执行构建任务,构建标签是build,可以指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。
build: /path/to/build/dir
也可以是相对路径,只要上下文确定就可以读取到Dockerfile。
build: ./dir
设定上下文根目录,然后以该目录为准指定Dockerfile。
build都是一个目录,如果要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定。
build: context: ../ dockerfile: path/of/Dockerfile
如果同时指定image和build两个标签,那么Compose会构建镜像并且把镜像命名为image值指定的名字。
5. context
context选项可以是Dockerfile的文件路径,也可以是到链接到git仓库的url,当提供的值是相对路径时,被解析为相对于撰写文件的路径,此目录也是发送到Docker守护进程的context.
build:
context: ./dir
6. dockerfile
指定构件容器的dockerfile
build:
context: .
dockerfile: Dockerfile-alternate
7. container_name
Compose的容器名称格式是:<项目名称><服务名称><序号>
可以自定义项目名称、服务名称,但如果想完全控制容器的命名,可以使用标签指定:
container_name: app
8. depends_on
在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。
services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
9. ports
ports用于映射端口的标签。
使用HOST:CONTAINER格式 或者只是指定容器的端口,宿主机会随机映射端口。
ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"
当使用HOST:CONTAINER格式来映射端口时,如果使用的容器端口小于60可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。
10. volumes
挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER]格式,或者使用[HOST:CONTAINER:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。
Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。
数据卷的格式可以是下面多种形式
volumes: // 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。 - /var/lib/mysql // 使用绝对路径挂载数据卷 - /opt/data:/var/lib/mysql // 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。 - ./cache:/tmp/cache // 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。 - ~/configs:/etc/configs/:ro // 已经存在的命名的数据卷。 - datavolume:/var/lib/mysql
11. networks
网络模式,这个决定了各个容器是以什么方式连进局域网的,这样,各个容器都能在一个局域网中通讯了。
networks:
dev:
driver: bridge
pro:
driver: bridge
常用的docker-compose命令
1. 启动
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...] 选项包括: -d 在后台运行服务容器 -no-color 不是有颜色来区分不同的服务的控制输出 -no-deps 不启动服务所链接的容器 --force-recreate 强制重新创建容器,不能与-no-recreate同时使用 –no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用 –no-build 不自动构建缺失的服务镜像 –build 在启动容器前构建服务镜像 –abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用 -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒) –remove-orphans 删除服务中没有在compose文件中定义的容器
2. 停止
docker-compose stop [options] [SERVICE...] 选项包括 -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒) docker-compose stop 停止正在运行的容器,可以通过docker-compose start 再次启动
3. 列出项目中所有容器
docker-compose ps [options] [SERVICE...]
4. 删除已经有的容器
docker-compose rm [options] [SERVICE...] 删除所有(停止状态的)服务容器。 选项包括: –f, –force,强制直接删除,包括非停止状态的容器 -v,删除容器所挂载的数据卷 docker-compose rm 删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。
5.所有的都删了
docker-compose down [options] 停止和删除容器、网络、卷、镜像。 选项包括: –rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像 -v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷 –remove-orphans,删除服务中没有在compose中定义的容器 docker-compose down 停用移除所有容器以及网络相关
6. 看日志
docker-compose logs [options] [SERVICE...] 查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。 docker-compose logs 查看服务容器的输出 -f 跟踪日志输出
7.重启现有的容器
docker-compose restart [options] [SERVICE...] 重启项目中的服务。 选项包括: -t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒) docker-compose restart 重启项目中的服务

浙公网安备 33010602011771号