赞
踩
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务 。 —— 来自docker官网
学习最好的资料及时多去看官网!!!
Compose可在所有环境中工作:生产,登台,开发,测试以及CI工作流
使用Compose基本上是一个三步过程:
Dockerfile
以便可以在任何地方复制docker-compose.yml
以便它们可以在隔离的环境中一起运行docker-compose up
)#速度会很慢
curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安装完后,给docker-compose授权
cd /usr/local/bin
chmod +x docker-compose
#验证docker-compose安装且可以使用
docker-compose -v
docker-compose配置文件主要分为version(版本),services(服务),network,volume等都这些都属于其他类
version: '3.0' #version:语法格式的版本 services: #service:定义服务,(想要运行什么样的容器) web: build: . #根据Dockfile构建就镜像,也可以使用仓库的 ports: #指定映射的端口 - "5000:5000" volumes: #挂载的容器卷 - .:/code redis: image: "redis:alpine" #其他配置 network volumes
version 版本参考官网
重点说明:
build 可以使用dockerfile构建新的镜像,也可以直接使用官方的images
依赖关系 web —— redis redis启动以后web再正常启动
其他所有的命令官方都有实例
https://docs.docker.com/compose/compose-file/#build
PS: volumes常用的参数说明:
type:卷的类型,可以是bind,可以是volume,还可以是其他
source: 挂载宿主机的路径、 主机上绑定挂载的路径或在顶层卷键中定义的卷的名称
target:挂载的目标路径,在容器里面的路径
read_only:容器内的卷赋予只读权限
使用volume manage类型挂载的时候必须在全局顶层分volumes指定出来,如下
#可以在docker-compose.yaml自定义网络
#在services里面定义引用网络和ip,但必须在后面全局配置添加networks项
#如果没有指定网络的话,会默认生成default网路
核心学习命令——docker-compose --help
build Build or rebuild services bundle Generate a Docker bundle from the Compose file config Validate and view the Compose file create Create services down Stop and remove containers, networks, images, and volumes events Receive real time events from containers exec Execute a command in a running container help Get help on a command images List images kill Kill containers logs View output from containers pause Pause services port Print the public port for a port binding ps List containers pull Pull service images push Push service images restart Restart services rm Remove stopped containers run Run a one-off command scale Set number of containers for a service start Start services stop Stop services top Display the running processes unpause Unpause services up Create and start containers version Show the Docker-Compose version information
docker-compose一键生成一个微服务
普通的容器——100个微服务 !—— 依赖关系 ——繁琐
docker-compose
来轻松高效的管理容器,定义运行多个容器
环境准备:
应用app.py
dockerfile 应用打包成为镜像
Docker-compose.yaml 文件(定义整个服务)完整的上线
启动conpose项目(docker-compose up)
docker-compose构建python应用——计数器功能, python redis
准备app.py
import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\n'.format(count) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
准备Dockerfile
FROM python:3.7-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python","app.py"]
准备requirements.txt
flask
redis
Docker-compose.yaml文件
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
启动docker-compose.yaml
#需要在docker-compose.yaml的目录执行命令
docker-compose up
文案参考:https://docs.docker.com/compose/wordpress/
1. 创建一个空的项目目录
您可以将目录命名为易于记忆的名称。此目录是您的应用程序映像的上下文。该目录应仅包含用于构建该映像的资源。
该项目目录包含一个docker-compose.yml
对于初学者wordpress项目而言本身是完整的文件。
提示:您可以为此文件使用
.yml
或.yaml
扩展名,两者没有区别都可以识别
转到你的项目目录
cd my_wordpress/
vim docker-compose.yaml
创建一个docker-compose.yml
文件来启动您的 WordPress
博客,并创建一个单独的MySQL
实例,该实例具有用于数据持久性的卷挂载
version: '3.3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {}
现在,docker-compose up -d
从您的项目目录运行。
这docker-compose up
将以分离模式运行,提取所需的Docker映像,并启动wordpress和数据库容器,如下例所示。
[root@docker03 my_wordpress]# docker-compose up -d Creating network "my_wordpress_default" with the default driver Creating volume "my_wordpress_db_data" with default driver Pulling db (mysql:5.7)... 5.7: Pulling from library/mysql bf5952930446: Pull complete 8254623a9871: Pull complete 938e3e06dac4: Pull complete ea28ebf28884: Pull complete f3cef38785c2: Pull complete 894f9792565a: Pull complete 1d8a57523420: Pull complete 5f09bf1d31c1: Pull complete 1b6ff254abe7: Pull complete 74310a0bf42d: Pull complete d398726627fd: Pull complete Digest: sha256:da58f943b94721d46e87d5de208dc07302a8b13e638cd1d24285d222376d6d84 Status: Downloaded newer image for mysql:5.7 Pulling wordpress (wordpress:latest)... ... 7ffb0ec7cba1: Pull complete aa525bb76055: Pull complete eec98bc148f3: Pull complete Digest: sha256:d009e9d0901aff685cbde728c803635f1bcaf4e1829f5921411f342ba001a3d0 Status: Downloaded newer image for wordpress:latest Creating my_wordpress_db_1 ... done Creating my_wordpress_wordpress_1 ... done
[root@docker03 my_wordpress]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
984644a5a2a7 wordpress:latest "docker-entrypoint.s…" 27 seconds ago Up 25 seconds 0.0.0.0:8000->80/tcp my_wordpress_wordpress_1
5b38deebd3ce mysql:5.7 "docker-entrypoint.s…" 27 seconds ago Up 26 seconds 3306/tcp, 33060/tcp my_wordpress_db_1
[root@docker03 my_wordpress]#
此时,WordPress应该在8000
Docker主机的端口上运行,并且您可以以WordPress管理员的身份完成“著名的五分钟安装”。
如果您使用的是Mac的Docker桌面或Windows的Docker桌面,则可以将其 http://localhost
用作IP地址,并http://localhost:8000
在Web浏览器中打开。
按照步骤安装即可
该命令docker-compose down
将删除容器和默认网络,但会保留WordPress数据库。
该命令docker-compose down --volumes
将删除容器,默认网络和WordPress数据库。
docker-compose的文件如下:
version: "3.0" services: nginx: container_name: nginx build: . image: nginx:lnmp ports: - "80:80" volumes: - ./nginx:/etc/nginx - ./html:/usr/share/nginx/html depends_on: - php php: container_name: php image: php:7.2-fpm ports: - "9000:9000" volumes: - ./html:/usr/share/nginx/html depends_on: - mysql mysql: container_name: mysql image: mysql:5.7 ports: - "3306:3306" volumes: - ./mysql_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 123.com
到这儿,说明lnmp环境已经跑起来了
添加depends on
参数的时候,A depends on B 意思是:B启动后,A才可以启动
如果我们使用的是docker-compose start 开启服务的话,会按照我们定义的顺序一一开启
如果使用docker-compose stop 关闭,会按照反顺序关闭的
同dockerfile,如果我们想挂载文件使用,该文件的的位置必须其目录或在其子目录下
或者指定该文件的绝对路径
其中php做好了mysql连接的插件,可以在./html目录下添加,添加内容参考LNMP搭建!
version: "3.0" services: nginx: container_name: nginx image: nginx:latest ports: - "80:80" networks: net: ipv4_address: 172.10.10.11 volumes: - ./nginx:/etc/nginx - ./html:/usr/share/nginx/html depends_on: - php php: container_name: php build: . image: php:7.2 ports: - "9000:9000" networks: net: ipv4_address: 172.10.10.12 volumes: - ./html:/usr/share/nginx/html depends_on: - mysql mysql: container_name: mysql image: mysql:5.7 ports: - "3306:3306" volumes: - ./mysql_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 123.com networks: net: #(自定义网络的名字) ipv4_address: 172.10.10.13 networks: net: driver: bridge ipam: config: - subnet: 172.10.10.0/24
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。