DockerCompose入门

DockerCompose

1.1 为什么要使用DockerCompose?

Docker(手动操作,单个容器)
    1. 编写:手动编写一个符合file规范的 DockerFile文件
    2. 构建: 有了这个文件后,直接docker build命令执行,获得一个自定义的镜像
    3. 执行: docker run
DockerCompose(轻松高效的管理容器,定义运行多个容器)

1.2 官方介绍

	Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
	注:
	1.定义、运行多个容器
	2.YAML file配置文件
	3.a single command(一个命令):命令有哪些?
	
	Compose可在所有环境中使用,比如:生产(production),登台(staging),开发(development),测试(test)以及CI工作流。
	
使用Compose基本上是一个三步过程:
    1.使用Dockerfile定义您的应用环境,以便可以它在任何地方reproduced(复制)。
    	注:DockerFile保证我们的项目在任何地方都可以运行。
    2.在docker-compose.yml里 定义组成应用程序的服务, 以便它们可以在隔离的环境中一起运行。
    	注:1.service 什么是服务?
    	   2.docker-compose.yml这个文件怎么写?
    3.Run docker-compose up and Compose启动并运行您的整个应用程序。
    	注:启动项目
    	
Compose 作用:批量容器编排 !!!
Compose是Docker官方的开源项目,需要安装。
DockerFile 让程序在任何地方运行。一个web服务(包含:redis、mysql、nginx...)多个容器,需要一个一个的启动。因此,诞生了Compose。
Compose  重要概念:
	1.服务 services:如容器、应用。(web、redis、mysql、nginx...)
	2.项目 project:一组关联的容器。(博客:包含 web、redis、mysql、nginx...)
一个docker-compose.yml看起来像这样:

version: '2.0'
services:
  #服务一
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    #连接redis,运行docker-conpose.yml文件时,先运行redis
    links:
    - redis
  #服务二
  redis:
    image: redis
#持久化
volumes:
  logvolume01: {}
Compose具有用于管理应用程序整个生命周期的命令:
    * 启动,停止和重建服务
    * 查看正在运行的服务的状态
    * 流运行服务的日志输出
    * 在服务上运行一次性命令

1.3 compose 安装

官网安装教程地址:https://docs.docker.com/compose/install/

1.运行以下命令以下载Docker Compose的当前稳定版本:

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-'uname -s'-'uname -m' > /usr/local/bin/docker-compose"

2.将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose

3.测试是否安装成功

docker-compose --version

1.4 快速开始

官网教程地址:https://docs.docker.com/compose/gettingstarted/

1.4.1 步骤:

	1.Setup(准备)
        1.1 为项目创建目录:
                $ mkdir composetest
                $ cd composetest
        1.2 在项目目录中创建一个名为 app.py 的文件。
        1.3 在项目目录中创建另一个名为 requirements.txt 的文件,并将以下粘贴进去
                flask
                redis
                
	2.创建 Dockerfile
		为了 build 成为 镜像。您将编写一个构建Docker镜像的Dockerfile。该镜像包含Python应用程序所需的所		有依赖关系,包括Python本身。
		
	3.在 Docker-compose.yml 中定义整个服务。
	
	4.Build and run 你的应用程序
		4.1 在项目目录中,运行来启动应用程序docker-compose up。
		4.2 在浏览器中输入http://106.53.237.51:5000/以查看应用程序正在运行

1.4.2 流程:

	1.创建网络
	2.执行Docker-compose.yml
	3.启动服务(当前yml文件所在的文件夹 docker-compose up   /    stop    /     down --vulomes)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-12NgrdCD-1596425433612)(img/21.Docker-compose_up.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mNf9QCHi-1596425433614)(img/21.Docker-compose_up_-d.png)]

[root@VM_0_14_centos composetest]# docker service ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
默认的服务名:文件名_服务名_number。其中 _number 表示多个服务器集群时,副本的数量。

1.4.3 网络规则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EOc9xWoP-1596425433615)(img/22.1compose网络规则.png)]

通过docker-compose启动的服务,在同一个网络下,我们可以直接通过域名(composetest_default)访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BrwLU42X-1596425433616)(img/22.2compose网络规则.png)]

1.4.4 总结

* 以前是一个一个的 docker run 来启动容器。
* docker-compose 是通过编写yaml配置文件(Docker-compose.yml),可以通过compose一键启动/停止所有服务。

2 YAML 书写规则(核心)

官网compose文件参考:https://docs.docker.com/compose/compose-file/

#共三层
version: '3.8'		#版本(第一层*核心)
service:			#服务(第二层*核心)
	webapp:										#服务1
		#以下是服务配置
        build:
            context: ./dir						#在哪个目录下,找Dockerfile
            dockerfile: Dockerfile-alternate	#Dockerfile的名称
            container_name: webapp				#生成的容器的名称
            args:
            	buildno: 1
          	depends_on:							#依赖,启动顺序先启动db,再启动redis,再启动web
            	- db
          		- redis
	redis:										#服务2
        image: redis:alpine
        ports:
          - "6379"
        networks:
          - frontend
        deploy:									#部署,用于集群
          replicas: 2							#副本数量(2个)
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
	db:											#服务3
		image: postgres
#其他配置(第三层)
volumes:
networks:
configs:

2.1 使用compose搭建博客

Quickstart:https://docs.docker.com/compose/wordpress/

1.创建一个空的项目目录。

mkdir my_wordpress
cd my_wordpress/

2.创建一个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: {}

3.Build the project

​ 现在,docker-compose up -d从您的项目目录运行。

docker-compose up 将以分离模式运行,提取所需的Docker镜像,并启动wordpress和数据库容器。

$ docker-compose up -d
Creating network "my_wordpress_default" with the default driver
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
efd26ecc9548: Pull complete
a3ed95caeb02: Pull complete
...
Digest: sha256:34a0aca88e85f2efa5edff1cea77cf5d3147ad93545dbec99cfe705b03c520de
Status: Downloaded newer image for mysql:5.7
Pulling wordpress (wordpress:latest)...
latest: Pulling from library/wordpress
efd26ecc9548: Already exists
a3ed95caeb02: Pull complete
589a9d9a7c64: Pull complete
...
Digest: sha256:ed28506ae44d5def89075fd5c01456610cd6c64006addfe5210b8c675881aff6
Status: Downloaded newer image for wordpress:latest
Creating my_wordpress_db_1
Creating my_wordpress_wordpress_1

2.2 实战

1.编写一个demo.jar , 配置文件:

#使用docker-compose
server.port: 8088
spring.thymeleaf.cache=false

paypal.mode=sandbox
paypal.client.app=Ad_kZuteCxr5m13GaYBlyTPzY_qaK8jLIiz2U2WlBZaTidInWwzqEU4excZdsoSJiiU42PYRv5q5SQKc
paypal.client.secret=ECtio4lo0lf_Jql7z1UKrj7QGKVrcjlXg7cnvwMytoI6FrS16dHs2rga6mITUKgb46n4AercD5L9FXS1

spring.redis.host=redis
spring.redis.port=6379
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.max-idle=500
spring.redis.jedis.pool.min-idle=0
spring.redis.lettuce.shutdown-timeout=0

spring.datasource.url=jdbc:mysql://mysql:9999/webtest?characterEncoding=utf-8&useSSL=true&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver

mybatis.config-location=classpath:config/mybatis-config.xml
mybatis.mapper-locations= classpath:mapper/*.xml

2.编写Dockerfile

FROM java:8
COPY *.jar /docker/demo.jar

ENV MY_WORK_PATH /docker
WORKDIR $MY_WORK_PATH

CMD ["--server.port=8088"]

EXPOSE 8088

ENTRYPOINT ["java","-jar","demo.jar"]

3.编写docker-compose.yml

version: "3.8"
services:
  demo:
    build: .
    image: demo
    depends_on:
      - mysql
      - redis
    ports:
      - "8088:8088"
  redis:
    image: "redis:alpine"
  mysql:
    network_mode: "bridge"
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    image: "mysql:5.7"
    restart: always
    volumes:
      - "./db:/var/lib/mysql"
      - "./conf/my.cnf:/etc/my.cnf"
      - "./init:/docker-entrypoint-initdb.d/"
    ports:
      - "9999:3306"

4.访问项目路径(http://106.53.237.51:8088)

docker-compose up 构建项目

docker-compose up --build 重构项目

onment:
MYSQL_ROOT_PASSWORD: “123456”
image: “mysql:5.7”
restart: always
volumes:
- “./db:/var/lib/mysql”
- “./conf/my.cnf:/etc/my.cnf”
- “./init:/docker-entrypoint-initdb.d/”
ports:
- “9999:3306”


4.访问项目路径(http://106.53.237.51:8088)

docker-compose up 构建项目

docker-compose up --build 重构项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9riIPwi1-1596425433617)(img/23.docker-compose-demo.png)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值