作者:E4b9a6, 创建:2021-07-21, 字数:3375, 已阅:103, 最后更新:2021-07-21
Docker是一个容器化平台,通过将应用程序及其依赖项打包为容器,实现了快速部署、可移植和环境一致性的优势
与虚拟机类似,但Docker是一种 轻量化虚拟 的思路,与传统服务器部署相比,有如下优点:
学习 Docker 需要掌握一定的虚拟化技术,掌握了一定的虚拟化概念后学习曲线较为平缓
Docker的核心概念:
Docker非常适合于持续交付的服务,如多服务协同、微服务架构等使用场景
以 hub.docker.com/r/nicolargo/glances 为例,运行一个性能监控页面的 Docker 实例
首先是拉取镜像,并实例化运行成容器
# 拉取镜像
sudo docker pull nicolargo/glances
# 运行镜像
sudo docker run --name glances -p 61208-61209:61208-61209 -e GLANCES_OPT="-w" -v /var/run/docker.sock:/var/run/docker.sock:ro -name glances --pid host nicolargo/glances:latest-full
关键参数说明:
随后访问 http://localhost:62108 ,看到如下效果:
说明容器运行成功,此外常用的一些操作还包括:
# 停止容器
sudo docker stop glances
# 启动容器
sudo docker start glances
# 重启容器
sudo docker restart glances
# 进入容器内部
sudo docker exec -it glances /bin/bash
# 查看容器列表
sudo docker ps
# 查看容器资源消耗
sudo docker stats
以上已满足开发的日常指令
Dockerfile 是用于定义 Docker 镜像构建过程的文本文件,包含一系列指令,用于指导Docker引擎在构建镜像时执行的操作
用Dockerfile执行构建,则可以得到一个镜像,如下:
# 指定基础镜像
FROM ubuntu:20.04
# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive
# 设置工作目录
WORKDIR /app
# 运行命令安装必要的软件包
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& apt-get clean
# 复制文件到镜像中
COPY requirements.txt /app/
# 使用ADD指令解压并添加文件
ADD https://example.com/some-archive.tar.gz /app/
# 安装Python依赖
RUN pip3 install -r requirements.txt
# 暴露容器端口
EXPOSE 8080
# 复制应用程序代码到镜像中
COPY . /app
# 指定容器启动时要运行的命令
CMD ["python3", "app.py"]
参数说明:
实践出真知,以包装一个python的flask应用为例
先创建一个文件夹 flaskr 并进入这个文件夹
编辑: app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(host='0.0.0.0')
编辑: Dockerfile
# 使用Python 3.9作为基础镜像
FROM python:3.9-alpine
# 设置工作目录为/app
WORKDIR /app
# 安装依赖包
RUN pip install flask
# 将app.py复制到容器中
COPY app.py .
# 暴露容器的5000端口
EXPOSE 5000
# 容器启动时运行的命令
CMD ["python", "app.py"]
目录的形式如下
tree
.
├── app.py
└── Dockerfile
现在我们可以打包这个应用
# 镜像名称flask-hello-world,标签是latest,不使用构建缓存
sudo docker build -t flask-hello-world:latest . --no-cache
打印本地所有镜像列表,可以看到我们的镜像顺利打包了
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
flask-hello-world latest d0bede20d8e9 7 seconds ago 59.2MB
...
运行这个镜像
# -d表示后台运行,-p表示端口映射
sudo docker run -d -p 5000:5000 flask-hello-world
访问 http://localhost:5000/ ,将看到返回hello-world
$ curl http://localhost:5000
Hello, World!