写点什么

docker 和 docker compose 安装使用、入门进阶案例

作者:偶尔善良
  • 2022 年 6 月 16 日
  • 本文字数:3768 字

    阅读完需:约 12 分钟

docker和docker compose安装使用、入门进阶案例

一、前言

现在可谓是容器化的时代,云原生的袭来,导致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 redisfrom 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
复制代码


flaskredis
复制代码


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


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


4. 创建 Dockerfile

vim Dockerfile
复制代码


# syntax=docker/dockerfile:1FROM python:3.7-alpineWORKDIR /codeENV FLASK_APP=app.pyENV FLASK_RUN_HOST=0.0.0.0RUN apk add --no-cache gcc musl-dev linux-headersCOPY requirements.txt requirements.txtRUN pip install -r requirements.txtEXPOSE 5000COPY . .CMD ["flask", "run"]
复制代码


命令解释:


<font size="3.5">从 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: wordpressvolumes:  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 有了一定的了解了吧,文章的目的主要为了记录一下自己跟着官网是否成功,还有就是有一些童鞋不喜欢看,还有就是看不太明白的童鞋提供一些帮助!


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


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


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


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

发布于: 刚刚阅读数: 5
用户头像

偶尔善良

关注

还未添加个人签名 2021.10.26 加入

还未添加个人简介

评论

发布
暂无评论
docker和docker compose安装使用、入门进阶案例_Docker_偶尔善良_InfoQ写作社区