容器化是一种软件部署流程,可将应用程序的代码与应用程序在任何基础设施上运行所需的所有文件和库进行捆绑。
通常,要在计算机上运行任何应用程序,必须安装与计算机操作系统匹配的应用程序版本。
例如,您需要在 Windows 计算机上安装 Windows 版本的软件包。但是,借助容器化,您可以创建能够在所有类型的设备和操作系统上运行的单个软件包或容器。
容器化是指将软件代码和所需的所有组件(例如库、框架和其他依赖项)打包在一起,让它们隔离在自己的"容器"中。
对比传统部署是指环境和项目分开搭建部署,在平台或操作系统上直接编写代码。
容器化部署在各个环境中可以实现一键安装,同时使用比较方便;而传统化部署环境复杂,配置繁琐,还经常会出现问题,安装也非常麻烦,耗时比较长。
1、便携性:软件开发人员使用容器化在多个环境中部署应用程序,而无需重新编写程序代码。
2、可扩展性:容器是可以高效运行的轻量级软件组件。
3、容错能力:软件开发团队使用容器来构建容错应用程序。
4、敏捷性:容器化应用程序在独立的计算环境中运行。
容器引擎种类有哪些?
1、Docker Engine:Docker Engine是最流行的容器引擎之一,它提供了构建、运行和管理Docker容器的功能。Docker Engine支持多种操作系统平台,并提供了丰富的命令行和API接口,用于管理和监控Docker容器。
2、Containerd:Containerd是一个开源的容器运行时,它提供了容器的核心功能,如镜像管理、容器启动和停止、存储管理等。Containerd由Docker维护,并在Docker Engine 1.11及以上版本中作为默认的运行时组件。
(1.24版本后K8s默认用这个,废弃了Docker)
3、CRI-O:CRI-O是一个轻量级的容器运行时,它专门针对Kubernetes容器编排系统进行了优化。CRI-O提供了符合OCI标准的容器运行时接口,并支持多种容器镜像格式和存储后端。
4、rkt:rkt是一个开源的容器运行时,它旨在提供更高的安全性和容器隔离性。rkt可以与Docker容器格式兼容,并支持Pod概念,用于管理多个相关的容器。
5、LXC/LXD:LXC是一个Linux容器技术,它提供了轻量级的虚拟化和快速、安全的隔离。LXD是LXC的一个高级管理工具,它提供了易于使用的命令行界面和REST API,用于管理和监控LXC容器。
容器引擎是容器技术的核心组件,它们提供了容器的基本功能,如镜像管理、容器启动和停止、存储管理等,为容器化应用程序的部署和管理提供了强大的基础设施。
后边所有讲到的容器,默认都是Docker容器,有特殊情况会单独说明。
[每周一更]-(第23期):Docker 逻辑图及常用命令汇总
Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux服务器,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类iphone的app),并且容器开销极其低。
Docker是一个Client-Server结构的系统, Docker守护进程运行的主机上,然后通过 Socket连接从客户端访问, 守护进程从客户端接受命令并管理 运行在主机上的容器
镜像、容器、仓库关联
镜像构建:
docker build -t myapp:latest .
容器运行:
docker run --name nginx-test -p 80:80 -d nginx
仓库使用:
docker pull ubuntu:latest(镜像名:版本号)
docker push myubuntu:v1(镜像名:版本号)
在本地创建一个名为 myapp 的文件夹,并在其中创建一个名为 index.php 的PHP文件,里面包含以下代码:
<?php
echo "Hello, World!";
这个PHP代码创建了一个简单的Web应用,当我们访问应用根目录时,返回"Hello, World!"。
在 myapp 文件夹中创建一个名为 Dockerfile 的文件,这是Docker镜像的构建文件。添加以下代码:
FROM php:7.4-apache
COPY . /var/www/html
这个Dockerfile文件告诉Docker从PHP 7.4的官方Docker镜像开始构建,将整个应用复制到 /var/www/html 目录下。
在 myapp 文件夹中,打开终端或命令行窗口,运行以下命令来构建Docker镜像:
docker build -t myapp:latest .
这个命令使用当前文件夹中的Dockerfile文件构建一个名为 myapp 的Docker镜像,并将其标记为 latest 版本。
运行Docker容器并将应用程序映射到主机的端口。运行以下命令:
docker run -p 8080:80 -d myapp:latest
其中,-p参数指定将容器的80端口映射到宿主机的8080端口,-d参数指定以后台模式启动容器。
这个命令告诉Docker运行一个名为 myapp 的容器,并将容器内的Apache服务器的80端口映射到主机的端口8080。如果一切正常,你应该可以在浏览器中访问 http://localhost:8080,并看到 “Hello, World!” 消息。
这个例子非常简单,但是可以让你快速了解如何将PHP项目部署到Docker中。
在本地创建一个名为 myapp 的文件夹,并在其中创建一个名为 main.go 的Go文件,里面包含以下代码:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))
}
这个Go代码创建了一个简单的Web应用,当我们访问应用根目录时,返回"Hello, World!"。
在 myapp 文件夹中创建一个名为 Dockerfile 的文件,这是Docker镜像的构建文件。添加以下代码:
FROM golang:1.18-alpine
WORKDIR /app
COPY . .
RUN go build -o myapp
CMD [ "./myapp" ]
这个Dockerfile文件告诉Docker从Go 1.18的官方Docker镜像开始构建,设置工作目录为 /app,将整个应用复制到镜像中,使用 go build 命令编译应用,并使用CMD指令运行 myapp。
在 myapp 文件夹中,打开终端或命令行窗口,运行以下命令来构建Docker镜像:
docker build -t myapp:latest .
这个命令使用当前文件夹中的Dockerfile文件构建一个名为 myapp 的Docker镜像,并将其标记为 latest 版本。
运行Docker容器并将应用程序映射到主机的端口。运行以下命令:
docker run -p 8080:8080 myapp:latest
这个命令告诉Docker运行一个名为 myapp 的容器,并将容器内的端口8080映射到主机的端口8080。如果一切正常,你应该可以在浏览器中访问 http://localhost:8080,并看到 “Hello, World!” 消息。
下面是一个简单的将Python代码部署到Docker的实例:
在本地创建一个名为 myapp 的文件夹,并在其中创建一个名为 app.py 的Python文件,里面包含以下代码:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
这个Python代码使用Flask框架创建了一个简单的Web应用,当我们访问应用根目录时,返回"Hello, World!"。
创建一个名为 Dockerfile 的文件,这是Docker镜像的构建文件。在 myapp 文件夹中创建 Dockerfile 文件,添加以下代码:
FROM python:3.7-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./app.py" ]
这个Dockerfile文件告诉Docker从Python 3.7的官方Docker镜像开始构建,设置工作目录为 /app,复制 requirements.txt 文件并安装其中的Python依赖,最后将整个应用复制到镜像中,并使用CMD指令运行 app.py。
在 myapp 文件夹中创建一个名为 requirements.txt 的文件,里面包含以下代码:
Flask
这个文件告诉Docker需要安装Flask依赖。
在 myapp 文件夹中,打开终端或命令行窗口,运行以下命令来构建Docker镜像:
docker build -t myapp:latest .
这个命令使用当前文件夹中的Dockerfile文件构建一个名为 myapp 的Docker镜像,并将其标记为 latest 版本。
运行Docker容器并将应用程序映射到主机的端口。运行以下命令:
docker run -p 5000:5000 myapp:latest
这个命令告诉Docker运行一个名为 myapp 的容器,并将容器内的端口5000映射到主机的端口5000。如果一切正常,你应该可以在浏览器中访问 http://localhost:5000,并看到 “Hello, World!” 消息。
后续我们的应用陆续构建: 社区、解读工具、大健康项目BAP等