docker和docker compose安装使用、入门进阶案例 - 小王写博客
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.
现在可谓是容器化的时代,云原生的袭来,导致go
的崛起,作为一名java开发,现在慌得一批。作为知识储备,小编也是一直学关于docker
的东西,还有一些持续继承jenkins
。
提到docker,大家都知道,以前需要在linux中安装的,现在只需要pull
下来镜像,然后运行就可以直接使用了!非常的干净又卫生,但是想想我们一个web应用,是需要mysql、redis、mq等很多个应用组成的,我们使用了docker,就需要一个个的运行,很是麻烦,而且还需要给他们建立一个网桥,因为容器之间是相互隔离的!
当微面临微服务时,比如有20个微服务项目,并且相互之间有依赖关系。
Docker Compose 来轻松高效的管理容器,定义运行多个容器。
这是一个伟大工具插件docker compose
来了~
今天就带大家一起安装,然后运行,跑一个demo,体验一下docker compose
的快捷之处!
二、安装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
之前看好多文章都是两年前的安装方式,现在小编进去官网已经变了,更加简单!我们先进入官网,一切以官网为准,任何教学都是来自于官网的教程!
我们直接根据这个安装即可!
我们看到apt-get
命令不是CentOS
的命令而是(Debian/Ubuntu)
的命令,我们使用CentOS
的yum
进行安装即可。
输入:
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
有了一定的了解了吧,文章的目的主要为了记录一下自己跟着官网是否成功,还有就是有一些童鞋不喜欢看,还有就是看不太明白的童鞋提供一些帮助!
一句话送给大家:还是以官网为主,有的教学是以前的版本,你进去官网你会发现很多已经更新,或者有更好的方式了,所以还是要看官网!!
看到这里了还不给小编一键三连起来,有点对不起小编了 !!
有缘人才可以看得到的哦!!!
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK