Docker(九)Docker Compose

版权声明:转载请注明出处! https://blog.csdn.net/wfs1994/article/details/84965626

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/

猜你喜欢

转载自blog.csdn.net/wfs1994/article/details/84965626