🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] 参考 :[https://deepzz.com/post/docker-compose-file.html#toc\_30](https://deepzz.com/post/docker-compose-file.html#toc_30) ## 安装 ``` $ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose ``` 参考链接:[https://yeasy.gitbooks.io/docker\_practice/compose/install.html](https://yeasy.gitbooks.io/docker_practice/compose/install.html) ## yaml配置 ***** ### 构建服务示例 Dockerfile文件配置 ``` FROM centos:7 RUN yum install -y net-tools \ libgomp.x86_64 \ libtool-ltdl-devel.x86_64 \ psmisc.x86_64 \ gdb \ gd WORKDIR /usr/src/ ADD ./im_server/linux_oneinstack_pla_2020-04-14-11-15-09.tar.gz /usr/src/ RUN cd /usr/src/oneinstack \ && ./install.sh -a WORKDIR /home/im_user/im_server/im_server/im_common/ CMD /bin/bash ``` 通过Dockerfile构建镜像示例: ``` version: "3" services: webapp: build: . ports: - "80:80" volumes: - "/data" ``` 通过镜像配置文件示例: ``` version: "3" services: webapp: image: examples/web ports: - "80:80" volumes: - "/data" ``` ### 网络配置 普通网络配置 ``` ``` ### 容器固定ip 如果没有`macvlan`类型的网络驱动则-创建容器+容器固定ip: ``` version: '3.2' services: c1: build: . restart: always tty: true networks: mynet: ipv4_address: 192.168.1.14 c2: build: . restart: always tty: true networks: mynet: ipv4_address: 192.168.1.15 networks: mynet: driver: macvlan driver_opts: parent: en0 ipam: config: - subnet: 192.168.1.0/24 ``` 如果有 `macvlan`类型的网络驱动则: ``` version: '3.7' services: x1: image: XXX restart: always tty: true networks: mynet: ipv4_address: 172.19.0.2 networks: outside: external: true ``` 说明: mynet是自定义的网络名称 ` ` ### external 如果设置为true,则指定此网络已在Compose之外创建。`docker-compose up`不会尝试创建它,并且如果它不存在将会引发一个错误。 外部不能与其他网络配置键(`driver`,`driver_opts`,`group_add`,`ipam`,`internal`)一起使用。 在下面的示例中,`proxy`是到外部世界的网关。 而不是尝试创建一个名为`[projectname] _outside`的网络,Compose将查找一个现有的网络,简单地调用外`outside`并连接`outside`服务的容器: ``` version: '2' services: proxy: build: . networks: - outside - default app: build: ./app networks: - default networks: outside: external: true ``` 可以单独指定网络的名称,与用于在Compose文件中引用它的名称: ``` networks: outside: external: name: actual-name-of-network ``` 启动指令 ``` docker-compose up -d ``` ## **voluems** ***** ### docker-compose 使用数据卷进行持久化 1.使用绝对路径 ``` c1: image: c1 volumes: - ./ghost/config.js:/var/lib/ghost/config.js ``` 2.使用卷标 ``` services: mysql: image: mysql container_name: mysql volumes: - mysql:/var/lib/mysql ... volumes: mysql: ``` >第一种情况路径直接挂载到本地,比较直观,但需要管理本地的路径 第二种使用卷标的方式,比较简洁,但你不知道数据存在本地什么位置,下面说明如何查看`docker的卷标` 查看所有卷标: ``` docker volume ls ``` 查看批量的卷标 ``` $ docker volume ls | grep mysql] local vagrant_mysql ``` 查看具体的volume对应的真实地址 ``` $ docker volume inspect vagrant_mysql [ { "Name": "vagrant_mysql", "Driver": "local", "Mountpoint": "/var/lib/docker/volumes/vagrant_mysql/_data" } ] ``` ## docker-compose-UI ***** docker-compose ~~~ docker run \ --name docker-compose-ui \ -p 5000:5000 \ -w /opt/docker-compose-projects/ \ -v /var/run/docker.sock:/var/run/docker.sock \ francescou/docker-compose-ui:1.13.0 ~~~