Docker(九)Docker Compose

Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。

安装Docker compose

官方文档

pip安装:
pip install docker-compose

从github安装:
curl -L --fail https://github.com/docker/compose/releases/download/1.17.0/run.sh -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

卸载:

rm /usr/local/bin/docker-compose # 使用curl安装的
pip uninstall docker-compose # 使用pip卸载

基本使用

#查看帮助
docker-compose -h

# -f  指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d 

#启动所有容器,-d 将会在后台启动并运行所有的容器
docker-compose up -d

#停用移除所有容器以及网络相关
docker-compose down

#查看服务容器的输出
docker-compose logs

#列出项目中目前的所有容器
docker-compose ps

#构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务
docker-compose build

#拉取服务依赖的镜像
docker-compose pull

#重启项目中的服务
docker-compose restart

#删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
docker-compose rm 

#在指定服务上执行一个命令。
docker-compose run ubuntu ping docker.com

#设置指定服务运行的容器个数。通过 service=num 的参数来设置数量
docker-compose scale web=3 db=2

#启动已经存在的服务容器。
docker-compose start

#停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
docker-compose stop		

快速入门

通过搭建一个WordPress来熟悉compose的使用
https://hub.docker.com//wordpress/
https://hub.docker.com/
/mysql/

编写docker-compose.yml文件
docker-compose.yml 文件是 Compose 使用的主模板文件,包含三大概念:Services、networks、Volumes
一个service代表一个container,这个container可以从dockerhub的image来创建,或者从本地的Dockerfile build出来的image来创建,Service的启动类似docker run,我们可以给其指定network和volume,所以可以给service指定network和volume的引用。

version: '3'

services:

  wordpress:
	image: wordpress
	restart: always
	ports:
	  - 8080:80
	environment:
	  WORDPRESS_DB_HOST: mysql
	  WORDPRESS_DB_PASSWORD: root
	networks:
	  - my-bridge

  mysql:
	image: mysql:5.7
	restart: always
	environment:
	  MYSQL_ROOT_PASSWORD: root
	  MYSQL_DATABASE: wordpress
	volumes:
	  - mysql-data:/var/lib/mysql
	networks:
	  - my-bridge

volumes:
  mysql-data:


networks:
  my-bridge:
	driver: bridge

上述文件中的定义等价于在命令行中手动启动WordPress和mysql容器:

docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql:5.7
docker run -d --name wordpress -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 wordpress 

启动应用:

# docker-compose up -d
Creating network "tmp_my-bridge" with driver "bridge"
Creating tmp_wordpress_1 ... done
Creating tmp_mysql_1     ... done

这样就成功了,然后浏览器访问http://host-ip:8080即可
在这里插入图片描述

服务后台启动后查看状态:

# docker-compose ps 
     Name                    Command               State          Ports        
-------------------------------------------------------------------------------
tmp_mysql_1       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp 
tmp_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp

# docker-compose logs
Attaching to tmp_wordpress_1, tmp_mysql_1
wordpress_1  | WordPress not found in /var/www/html - copying now...
wordpress_1  | Complete! WordPress has been successfully copied to /var/www/html
wordpress_1  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
wordpress_1  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
wordpress_1  | [Wed Dec 12 02:11:39.611507 2018] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.2.13 configured -- resuming normal operations
....

注意:这里最好不要使用mysql最新的镜像,因为在MySQL 8.0以上版本中,caching_sha2_password取代了mysql_native_password成为默认的身份验证插件,运行中会报MySQL Connection Error: (2002) Connection refused的错误

docker-compose.yml参考

每个docker-compose.yml必须定义image或者build中的一个,其它的是可选的。

image
指定镜像tag或者ID:

image: wordpress
image: mysql:5.7

build
用来指定一个包含Dockerfile文件的路径。一般是当前目录.

build: ./dir
---------------
build:
    context: ./dir
    dockerfile: Dockerfile
    args:
        buildno: 1

context为路径,dockerfile为需要替换默认docker-compose的文件名,args为构建(build)过程中的环境变量,用于替换Dockerfile里定义的ARG参数,容器中不可用

command
覆盖容器启动后默认执行的命令

command: bundle exec thin -p 3000
----------------------------------
command: [bundle,exec,thin,-p,3000]

links
用于链接另一容器服务,如需要使用到另一容器的mysql服务。可以给出服务名和别名;也可以仅给出服务名,这样别名将和服务名相同。同docker run --link

links:
 - db
 - db:mysql
 - redis

使用了别名将自动会在容器的/etc/hosts文件里创建相应记录:

172.17.2.186  db
172.17.2.186  mysql
172.17.2.187  redis

ports
用于暴露端口。同docker run -p

ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"

expose
expose提供container之间的端口访问,不会暴露给主机使用。同docker run --expose

expose:
 - "3000"
 - "8000"

volumes
挂载数据卷。同docker run -v

volumes:
 - /var/lib/mysql
 - cache/:/tmp/cache
 - ~/configs:/etc/configs/:ro

volumes_from
挂载数据卷容器,挂载是容器。同docker run --volumes-from

volumes_from:
 - service_name
 - service_name:ro
 - container:container_name

environment
添加环境变量。同docker run -e。可以是数组或者字典格式:

environment:
  RACK_ENV: development
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SESSION_SECRET

logs
日志输出信息

--no-color          单色输出,不显示其他颜.
-f, --follow        跟踪日志输出,就是可以实时查看日志
-t, --timestamps    显示时间戳
--tail              从日志的结尾显示,--tail=200

extra_hosts
添加主机名映射。

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

将会在/etc/hosts创建记录:

162.242.195.82  somehost
50.31.209.229   otherhost

参考链接

https://www.cnblogs.com/52fhy/p/5991344.html
https://hub.docker.com//wordpress/
https://hub.docker.com/
/mysql/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CentOS是一种开源的操作系统,它是基于Linux内核的一个发行版。CentOS提供了稳定、安全以及与商业操作系统相似的功能,因此在企业中得到了广泛的应用。CentOS支持多种应用软件和工具,其中包括DockerDocker ComposeDocker是一种开源的容器化平台,它允许开发者将应用程序及其依赖打包成一个称为容器的轻量级可移植单位。通过使用Docker,开发者可以在不同的环境中快速部署、扩展和管理应用程序。Docker可以提供隔离效果,使得应用程序可以在不同的主机上运行,而不会相互干扰。 Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过使用Docker Compose,开发者可以使用YAML文件来定义一个基于容器的应用程序的服务、网络和卷等。Docker Compose提供了一个简单的命令行工具,可以帮助开发者轻松地启动、停止和管理多个Docker容器。 在CentOS中使用DockerDocker Compose非常简便。首先,需要安装Docker CE(社区版)或Docker EE(企业版)。安装完成后,就可以使用Docker命令来创建、运行和管理容器。要使用Docker Compose,需要安装并配置Compose工具。然后,可以使用docker-compose命令来启动、停止和管理基于Compose文件定义的多容器应用程序。 总结来说,CentOS是一种流行的操作系统,而DockerDocker Compose是常用的容器化工具。通过使用这些工具,开发者可以快速构建、部署和管理容器化的应用程序。它们为应用程序的开发和运行提供了更方便和灵活的环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值