Docker入门使用指南
Docker是一个容器化平台,通过将应用程序及其依赖项打包为容器,实现了快速部署、可移植和环境一致性的优势。它简化了应用程序的构建、管理和部署过程,提高了开发和部署的效率。
1. 基础
与虚拟机类似,但Docker是一种轻量化虚拟
的丝路,与传统服务器部署相比
当然,也有不足之处
隔离性的稳定问题 存储的复杂性提高 学习成本高1. 基础1.1. 基础概念
Docker的核心概念
仓库: 类似于github
一样,docker也有提供大量的基础镜像,如ubuntu2204
/Cent7
等基础镜像,像dockerhub、docker-cn
镜像: 相当于一个虚拟机模板,引入一个基础镜像后,再加上部分工具链安装,就可以构成一个应用
容器: 基于镜像创建一个实例运行
Docker非常适合于持续交付的服务,常规的web
服务、多服务协同、微服务架构等使用场景
1.2. 基础操作
对于docker而言,以下操作是比较常见的,以hello-world
为例
docker pull hello-world
运行镜像: docker run hello-world
查看容器: docker ps
进入容器: docker exec -it hello-world bash
启动停止重启容器: docker start/stop/restart hello-world
删除容器: docker rm hello-world
更多的docker可以直接参考docker --help
1.3. Dockerfile
Dockerfile
是用于定义Docker镜像构建过程的文本文件。包含一系列指令,用于指导Docker引擎在构建镜像时执行的操作
用Dockerfile执行构建,则可以得到镜像
,类似于传统项目的打包
FROM
:指定基础镜像,即构建新镜像所依赖的基础环境。
RUN
:在镜像中运行命令,用于安装软件包、执行脚本等操作。
COPY
:将文件从主机复制到镜像中的指定目录。
ADD
:类似于COPY指令,但还支持URL和解压缩功能。
WORKDIR
:设置工作目录,即在镜像中运行命令时的默认目录。
ENV
:设置环境变量。
EXPOSE
:声明容器运行时所监听的端口。
CMD
:指定容器启动时要运行的命令,可以有多个CMD指令,但只有最后一个生效。
常见指令有如上几个
2. 实践
实践出真知,以包装一个python的flask应用为例吧,我们首先写一个简易的flask应用
2.1. Flask应用
编辑 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')
我们安装flask并运行这个应用
Bashcontent_copypip3 install flask python3 app.py
访问http://localhost:5000/
,可以看到返回hello-world
$ curl http://localhost:5000 Hello, World!
2.2. Docker部署
将上面的Flask包装成一个Docker镜像,我们需要写一个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"]
目录的形式如下
Bashcontent_copytree . ├── app.py └── Dockerfile
现在我们可以打包这个应用
Bashcontent_copy# 镜像名称flask-hello-world,标签是latest,不使用构建缓存
sudo docker build -t flask-hello-world:latest . --no-cache
打印本地所有镜像列表,可以看到我们的镜像顺利打包了
Bashcontent_copy$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE flask-hello-world latest d0bede20d8e9 7 seconds ago 59.2MB ...
2.3. Docker运行
我们运行这个镜像
Bashcontent_copy# -d表示后台运行,-p表示端口映射 sudo docker run -d -p 5000:5000 flask-hello-world
访问http://localhost:5000/
,可以看到返回hello-world
$ curl http://localhost:5000 Hello, World!
文章来源:
Author:chancel
link:http://www.chancel.me/markdown/docker-getting-started-guide
下一篇:Go语言的递归算法