Linux进阶 | docker compose的安装与使用详解,超详细!

   创作不易,来了的客官点点关注,收藏,订阅一键三连❤?  


前言

运维之基础——Linux。我是一个即将毕业的大学生,超超。如果你也在学习Linux,不妨跟着萌新超超一起学习Linux,拿下Linux,一起加油,共同努力,拿到理想offer!


系列文章

Linux进阶 | Docker部署nginx的web服务,VOLUME的使用详解,实现数据持久化!

Linux进阶 | 2万字总结最详细的Docker的安装、底层隔离机制和简单使用!建议收藏,持续更新❤

Linux | 详解系统监控和常用命令(top free dstat)

Linux 超超讲解SSH的原理与SSH的实现!建议收藏❤


概述

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。本期内容为Docker第四期,通过本期内容将会掌握docker 容器编排工具——compose的安装以及使用。

目录

前言

概述

超超Docker学习思维导图 ​

compose基础

compose的优点

compose对容器进行什么样的编排?

compose对多少容器进行编排操作?

compose对多少台宿主机上的容器进行编排操作?

compose的安装

compose的使用

练习:Compose and WordPress


超超Docker学习思维导图 

 Docker思维导图将持续更新,欢迎大家订阅Linux栏目!


compose基础

compose是python编写的一个容器编排工具,docker官方推出的。可以理解为启动容器的脚本,在脚本内指明启动容器的顺序,启动多少个容器,每个容器的具体参数。

compose的优点

1.快速批量启动容器,效率高

2.出错率低,可靠

compose对容器进行什么样的编排?

启动容器,可以指定端口、卷、连接等,使用哪个镜像等

compose对多少容器进行编排操作?

一个以上

compose对多少台宿主机上的容器进行编排操作?

一台

compose的安装

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

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

或者使用daocloud链接下载

 

curl -L 

https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2.赋予可执行权限

[root@docker ~]# chmod +x  /usr/local/bin/docker-compose

[root@docker ~]# cd /usr/local/bin/

[root@docker bin]# ls

docker-compose

[root@docker bin]# ll

总用量 12440

-rwxr-xr-x. 1 root root 12737304 8月  19 10:31 docker-compose

[root@docker bin]#

3.查看compose的版本

[root@docker ~]# docker-compose -v

docker-compose version 1.29.2, build 5becea4c

[root@docker ~]#

compose的使用

1.部署环境:创建/composetest目录

[root@docker lianxi]# mkdir /composetest/

[root@docker lianxi]# cd /composetest/

2.创建app.py

[root@docker composetest]# vim app.py

[root@docker composetest]# ls

app.py

[root@docker composetest]# cat 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)

[root@docker composetest]#

3.创建requirements.txt

[root@docker composetest]# vim requirements.txt

[root@docker composetest]# cat requirements.txt

flask

redis

[root@docker composetest]#

4.创建Dockerfile

[root@docker composetest]# vim Dockerfile

[root@docker composetest]# ls

app.py  Dockerfile  requirements.txt

[root@docker composetest]# cat Dockerfile

# syntax=docker/dockerfile:1

FROM python:3.7-alpine

WORKDIR /code

ENV FLASK_APP=app.py

ENV FLASK_RUN_HOST=0.0.0.0

RUN apk add --no-cache gcc musl-dev linux-headers

COPY requirements.txt requirements.txt

RUN pip install -r requirements.txt

EXPOSE 5000

COPY . .

CMD ["flask", "run"]

[root@docker composetest]#

#这告诉Docker

从 Python 3.7 镜像开始构建映像

将容器的工作目录设置为/code

设置flask命令使用的环境变量

安装 gcc 和其他依赖项

复制requirements.txt到容器工作目录并安装 Python 依赖项(模块)

将元数据添加到图像以描述容器正在侦听端口 5000

将.项目中的当前目录复制到.镜像中的workdir

将容器的默认命令设置为flask run

5.Compose文件中定义服务

[root@docker composetest]# vim docker-compose.yml

[root@docker composetest]# ls

app.py  docker-compose.yml  Dockerfile  requirements.txt

[root@docker composetest]# cat docker-compose.yml

version: "3.9"

services:

  web:

    build: .

    ports:

      - "5000:5000"

  redis:

    image: "redis:alpine"

    ports:

      - "6379:6379"

 

# 这个 Compose 文件定义了两个服务:web和redis.

6.使用Compose构建并运行应用程序

[root@docker composetest]# docker-compose up

推荐命令(分离模式后台运行,不占用前端):docker-compose up -d

7.在浏览器中输入 http://localhost:5000/ curlhttp://localhost:5000/ 以查看应用程序正在运行。

8.查看compose中创建的镜像、容器

查看当前正在运行的内容 docker-compose ps

[root@docker composetest]# docker-compose ps

       Name                      Command               State                    Ports                 

-------------------------------------------------------------------------------------------------------

composetest_redis_1   docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp,:::6379->6379/tcp

composetest_web_1     flask run                        Up      0.0.0.0:5000->5000/tcp,:::5000->5000/tcp

[root@docker composetest]#

9.关闭compose的服务

命令1:docker-compose stop

命令2:docker-compose down  使用down命令关闭所有内容,完全删除容器。

10.docker-compose run命令

允许运行一次性命令

eg:  docker-compose run web /bin/bash


练习:Compose and WordPress

使用 Docker Compose 在使用 Docker 容器构建的隔离环境中轻松运行 WordPress。

[root@docker composetest]# mkdir /my_wordpress

[root@docker composetest]# cd /my_wordpress

[root@docker my_wordpress]# ls

[root@docker my_wordpress]# vim docker-compose.yml

[root@docker my_wordpress]# cat docker-compose.yml

version: "3.9"

   

services:

  db:

    image: mysql:5.7.35

    volumes:

      - db_data:/var/lib/mysql

    restart: always

    environment:

      MYSQL_ROOT_PASSWORD: chao123456

      MYSQL_DATABASE: wordpress

      MYSQL_USER: wordpress

      MYSQL_PASSWORD: wordpress

   

  wordpress:

    depends_on:

      - db

    image: wordpress:latest

    volumes:

      - wordpress_data:/var/www/html

    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: {}

  wordpress_data: {}

[root@docker my_wordpress]#

[root@docker my_wordpress]# docker-compose up -d

查看效果:

创作不易,客官点个赞,评论一下吧!超超和你一起加油❤?


版权声明:本文为REPCHAOCHAO原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。