1

docker和docker compose安装使用、入门进阶案例 - 小王写博客

 2 years ago
source link: https://www.cnblogs.com/wang1221/p/16380693.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

现在可谓是容器化的时代,云原生的袭来,导致go的崛起,作为一名java开发,现在慌得一批。作为知识储备,小编也是一直学关于docker的东西,还有一些持续继承jenkins
提到docker,大家都知道,以前需要在linux中安装的,现在只需要pull下来镜像,然后运行就可以直接使用了!非常的干净又卫生,但是想想我们一个web应用,是需要mysql、redis、mq等很多个应用组成的,我们使用了docker,就需要一个个的运行,很是麻烦,而且还需要给他们建立一个网桥,因为容器之间是相互隔离的!

当微面临微服务时,比如有20个微服务项目,并且相互之间有依赖关系。
Docker Compose 来轻松高效的管理容器,定义运行多个容器。
这是一个伟大工具插件docker compose来了~

今天就带大家一起安装,然后运行,跑一个demo,体验一下docker compose的快捷之处!

二、安装docker

安装Docker

三、Docker Compose 概述

Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。

Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流程。

使用 Compose 基本上是一个三步过程:

使用定义您的应用程序的环境,Dockerfile以便可以在任何地方复制它。

定义构成您的应用程序的服务,docker-compose.yml以便它们可以在隔离环境中一起运行。

运行docker compose up,Docker compose 命令启动并运行您的整个应用程序。您也可以docker-compose up使用 docker-compose 二进制文件运行。

三、安装docker compose

之前看好多文章都是两年前的安装方式,现在小编进去官网已经变了,更加简单!我们先进入官网,一切以官网为准,任何教学都是来自于官网的教程!

docker compose官网安装地址

我们直接根据这个安装即可!
我们看到apt-get命令不是CentOS的命令而是(Debian/Ubuntu)的命令,我们使用CentOSyum进行安装即可。

在这里插入图片描述

输入:

yum install docker-compose-plugin
在这里插入图片描述

我们查看docker compose的版本,是否安装成功:

docker compose version

在这里插入图片描述

铛铛铛,安装完成,下面我们进行官网例子实战!!

四、入门案例体验

入门案例官网网址

1. 创建文件

创建一个文件夹来存放这次案例的文件,并切换到此文件夹下:

mkdir composetest
cd composetest/
pwd

在这里插入图片描述

2. 创建python程序

创建一个app.py的文件

vim 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)

输入i,粘贴进行,按下Esc,输入:wq保存并退出!

在这里插入图片描述

细节分析:
我们看到脚本的第五行,cache = redis.Redis(host='redis', port=6379)
redis是应用程序网络上的 redis 容器的主机名。本来是host是指向ip的,现在我们交给docker compose,他会帮我们维护一个网络(后面我们在查看),实现容器名称之间的调用,就像我们微服务之间使用nacos作为注册中心,各个服务的调用使用服务名称进行调用即可,这样更加灵活,切换主机ip,不影响各个应用之间的调用。

3. 创建requirements.txt文件

vim requirements.txt
flask
redis

这里一个python需要的框架,还有一个就是实现计数的redis服务,创建文件的目的是为了方便书写docker-compose.yml,里面可以直接引用此文件!

输入i,粘贴,按下Esc,输入:wq保存并退出!

在这里插入图片描述

4. 创建 Dockerfile

vim 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"]

命令解释:

从 Python 3.7 映像开始构建映像
将工作目录设置为/code
设置命令使用的环境变量flask
安装 gcc 和其他依赖项
复制requirements.txt并安装 Python 依赖项
向镜像添加元数据以描述容器正在侦听端口 5000
将项目中的当前目录复制.到镜像中的workdir
将容器的默认命令设置为flask run

输入i,粘贴,按下Esc,输入:wq保存并退出!

在这里插入图片描述

5. 编写docker-compose.yml

vim docker-compose.yml
version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

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

web服务:

该服务使用从当前目录中web构建的图像,build: .是使用Dockerfile构建出来镜像,然后它将容器和主机绑定到暴露的端口:8000.。此示例服务使用 Flask Web 服务器的默认端口,5000。

redis服务:
该redis服务使用 从 Docker Hub 注册表中提取的公共Redis映像。

这里为我们展示了docker-compose.yml中管理的镜像的两种方式,一个是使用Dockerfile进行构建镜像,一个是通过Docker Hub直接拉去镜像。

在这里插入图片描述

6. 构建并运行

我们看到官网的命令提供的运行命令是:docker-compose up,小编试了一下没有此命令,小编试了一下这个命令就可以了。

在这里插入图片描述

docker compose up

这里云先拉去redis镜像,然后使用Dockerfile进行构建镜像!

在这里插入图片描述

小细节:

这里就是小编前面说的,会帮我们维护一个网络,就可以进行容器之间的调用了 !我们还可以发现,容器的名字是文件夹的名称-yml文件里服务名称-副本数量,不难想象最后的副本数量肯定是为了集群准备的哈!

在这里插入图片描述

停止应用程序:
方法是docker compose down 在第二个终端的项目目录中运行,或者在启动应用程序的原始终端中按 CTRL+C。

7. 访问测试

输入:http://192.168.84.135:8000/

每次刷新斗湖加1,使用redis实现的计数器!

在这里插入图片描述

8. 查看运行的容器

docker ps

在这里插入图片描述

9. 编辑docker-compose.yml添加绑定挂载

vim docker-compose.yml

覆盖原来的内容:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

小提醒:

volumes密钥将主机上的项目目录(当前目录)挂载到/code容器内,允许您即时修改代码,而无需重建映像environment键设置 FLASK_ENV环境变量,它告诉flask run在开发模式下运行并在更改时重新加载代码。这种模式应该只在开发中使用。

在这里插入图片描述

我们查看挂载在linux上的文件:

在这里插入图片描述

10. 重新构建

docker compose up
在这里插入图片描述

11. 重新访问

输入:http://192.168.84.135:8000/

在这里插入图片描述

12. 修改app.py文件

由于应用程序代码现在使用安装到容器中,因此您可以对其代码进行更改并立即查看更改,而无需重建镜像

vim app.py

修改最后一行为:

return '我修改了哦! I have been seen {} times.\n'.format(count)
在这里插入图片描述

重新刷新页面:

这里就实现了测试版本的热部署

在这里插入图片描述

13. 以后台的方式构建

我们刚刚看到了刚刚的运行,我们是无法在使用其他命令了,这时就可以使用以后台的形式运行就不耽误我们使用其他命令了!

以后台形式构建运行:

docker compose up -d

查看正在运行的镜像:

docker compose ps
在这里插入图片描述

浏览器访问正常:

在这里插入图片描述

五、进阶案例WordPress

官网进阶案例地址

1. 创建新文件夹

mkdir my_wordpress
cd my_wordpress

2. 编写docker-compose.yml

vim docker-compose.yml
version: "3.9"
    
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
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

docker卷db_data挂载到wordpress_data持久化 WordPress 对数据库的更新。

在这里插入图片描述

3. 构建项目

先停止刚刚的构建的容器:

docker stop 容器id
docker compose up -d

在这里插入图片描述

4. 测试访问

输入:192.168.84.135:8000/

在这里插入图片描述

后面就不带大家操作了,小编有篇文章专门写使用和优化Wordpress的文章,大家喜欢可以看一下哦 !

5分钟搭建wordpress个人博客网站 附赠主题和md插件

这样我们对docker compose 有了一定的了解了吧,文章的目的主要为了记录一下自己跟着官网是否成功,还有就是有一些童鞋不喜欢看,还有就是看不太明白的童鞋提供一些帮助!

一句话送给大家:还是以官网为主,有的教学是以前的版本,你进去官网你会发现很多已经更新,或者有更好的方式了,所以还是要看官网!!

看到这里了还不给小编一键三连起来,有点对不起小编了 !!


有缘人才可以看得到的哦!!!

点击访问!小编自己的网站,里面也是有很多好的文章哦!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK