怎么做出有品牌感的网站,wordpress首页背景,什么是网站建设方案,网站seo哪里做的好Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术#xff0c;对进程进行封装隔离#xff0c;一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行#xff0c;镜像是容器的只读模板#xff0c;容器是模板的一个实例。镜像是分层结…Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术对进程进行封装隔离一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行镜像是容器的只读模板容器是模板的一个实例。镜像是分层结构一个镜像可以基于另一个镜像创建最底层的镜像是基础镜像。
安装Docker
brew install --cask --appdir/Applications docker查看docker版本
% docker --version
Docker version 20.10.17, build 100c701查看docker是否安装成功
% docker info
Client:Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc., v0.9.1)compose: Docker Compose (Docker Inc., v2.10.2)extension: Manages Docker extensions (Docker Inc., v0.2.9)sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0)scan: Docker Scan (Docker Inc., v0.19.0)
创建FastAPI镜像
依赖
% cat requirements.txt
fastapi[standard]0.113.0,0.114.0
pydantic2.7.0,3.0.0Python代码
# main.py
from fastapi import FastAPIapp FastAPI()app.get(/)
def index():return 测试容器部署
目录结构
% tree
.
├── Dockerfile
├── app
│ └── main.py
└── requirements.txtDockerfile
% cat Dockerfile
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
EXPOSE 5000
COPY ./app /code/app
CMD [fastapi, run, app/main.py, --port, 5000]Dockerfile常用指令
指令描述FROM指定基础镜像可以指定多个指定多个基础镜像时编译时也会生成对应的多个镜像MAINTAINER指定镜像维护人信息制作人根据自己情况指定WORKDIR设置工作目录后续的RUN、COPY、CMD等命令都将在工作目录下运行RUN构建镜像时运行命令可以用他安装软件等等CMD在容器实例中运行的命令格式与RUN相同。注意如果在docker run命令行里指定了命令将不会执行CMD的内容。ENTRYPOINT在容器实例中运行的命令格式与CMD相同。注意如果在docker run时指定了命令该命令会以命令行参数的形式传递到ENTRYPOINT中。COPY拷贝文件或目录到镜像中ADD拷贝文件或目录到镜像中如果源文件是gizp等压缩文件会被自动解压到目标目录ENV设置环境变量USER为RUN、CMD 和 ENTRYPOINT 执行命令指定运行用户ARG由外部启动时必须传入的参数在容器启动时用–build-arg传递参数EXPOSE声明容器暴露给宿主机的端口可以是一个或者多个以空格间隔HEALTHCHECK容器中服务健康检查VOLUME用于指定持久化目录
Docker镜像中有一个层的概念每执行一个RUN命令就会创建一个层层过多会导致镜像文件体积增大。尽量在RUN命令中使用连接多条shell命令减少RUN命令的个数可以有效减小镜像文件的体积。在更多情况下我们希望在docker run命令中为我们的服务传参而不是覆盖执行命令那么我们应该使用ENTRYPOINT而不是CMD。
创建镜像
% docker build -t myimage .
[] Building 54.4s (10/10) FINISHED [internal] load build definition from Dockerfile 0.0s transferring dockerfile: 37B 0.0s [internal] load .dockerignore 0.0s transferring context: 2B 0.0s [internal] load metadata for docker.io/library/python:3.9 4.4s [internal] load build context 0.0s transferring context: 6.57kB 0.0s [1/5] FROM docker.io/library/python:3.9sha256:ed8b9dd4e9f89c111f4bd 18.5s# 查看镜像
% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myimage latest 31030096287b 22 minutes ago 1.06GBDocker build常用参数
参数说明-t指定Repository以及Tag例如helloworld:1.0-f指定Dockerfile路径Dockerfile不在当前目录时使用—no-cache常见镜像的过程中不使用Build Cache构建镜像—pull构建镜像时总是拉取Base Image的最新版本
运行
% docker run -d --name mycontainer -p 80:5000 myimage
f23deab780852268532e6f820da33df67d6b39ba007db01d6eca2660e345a224# 查看容器
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f23deab78085 myimage fastapi run app/mai… 14 minutes ago Up 14 minutes 0.0.0.0:80-5000/tcp mycontainer# 进入容器
% docker exec -it mycontainer bash
这里docker run从镜像myimage实例了一个容器守护模式命名为mycontainer容器内部的端口是5000宿主机的端口是80。
停止和移除容器
# 关闭容器
% docker stop mycontainer
mycontainer# 启动容器
% docker start mycontainer
mycontainer# 移除容器
% docker rm mycontainer
mycontainer导入镜像到生产环境
我们可以使用docker save命令将镜像保存到指定的文件中保存的文件是一个.tar格式的压缩文件
# 导出到tar
docker save -o hello.tar hello:1.0# 导入到生产环境的docker
docker load -i hello.tar配置镜像加速器
{registry-mirrors: [https://docker.wanpeng.top]
}