什么是容器&docker
容器(Container)
容器是一种轻量级、可移植的虚拟化技术,它允许开发者将应用程序及其所有依赖(如库、配置文件等)打包成一个统一的、可移植的包。容器通过操作系统级别的虚拟化实现了资源隔离,因此可以在不同的环境中一致地运行,而无需担心环境差异。
容器具有以下特点:
轻量级:容器共享宿主操作系统的内核,不需要额外的操作系统,因此比传统的虚拟机更加高效和快速。
隔离性:容器通过操作系统级别的资源隔离机制(如 cgroups 和 namespaces)确保每个容器的进程和文件系统相互独立。
可移植性:容器内的应用和依赖环境都被打包在一起,可以在不同的平台(如本地机器、开发环境、测试环境、生产环境等)中无缝运行。
易于扩展:容器化的应用程序可以很容易地在不同的主机上进行扩展,适合微服务架构。
Docker
Docker 是一个开源的容器化平台,用于自动化应用程序的部署、扩展和管理。Docker 提供了一个完整的解决方案,可以让开发者将应用和其依赖打包成容器,并在任何支持 Docker 的系统上运行。Docker 的核心组成包括:
Docker 引擎(Docker Engine):这是一个客户端-服务器架构,包含 Docker 守护进程(dockerd)和命令行工具(docker)。
Docker 镜像(Docker Images):镜像是容器的模板,包含了应用程序和它的运行环境。通过镜像,Docker 可以快速启动容器。
Docker 容器(Docker Containers):容器是基于镜像实例化的运行环境,是 Docker 的基本执行单元。每个容器可以运行一个应用或服务。
Docker 仓库(Docker Hub 或私有仓库):这是存储和分发 Docker 镜像的地方。用户可以从 Docker Hub 拉取公共镜像,或者上传自己的镜像到 Docker 仓库。
Docker的优势:
简化部署:开发者可以通过 Dockerfile 配置应用程序及其环境,自动化构建镜像并部署到任何支持 Docker 的平台。
一致性:无论是在开发、测试、还是生产环境中,容器都能提供一致的运行环境,避免“在我机器上能跑”的问题。
高效性:与传统虚拟机相比,容器启动速度更快,占用资源更少,且可以轻松管理和调度。
扩展性和弹性:通过 Docker Swarm、Kubernetes 等容器编排工具,可以方便地管理大量的容器实例,实现容器的自动扩展和负载均衡。
CTyunOS下部署docker
安装依赖包
yum install -y docker-engine wget tar
下载离线docker image
通过wget从ctyunos源(https://repo.ctyun.cn/hostos/)下载docker images;
例如:
wget https://repo.ctyun.cn/hostos/ctyunos-2-23.06/docker_img/aarch64/ctyunos2-docker-2-23.06.aarch64.tar.xz
查询docker服务状态
docker服务状态应为active
systemctl status docker
docker基础命令
命令 | 功能 |
---|---|
docker load -i {docker_images} | 加载docker镜像 |
docker images | 查询当前加载的镜像,并查询后续命令中使用的docker_repository和docker_tag; |
docker save -o new.tar {docker_repository}:{docker_tag} | 将当前docker保存到new.tar压缩包中 |
docker rmi {docker_repository}:{docker_tag} | 删除docker image(添加参数-f为强制删除) |
docker tag {docker_repository}:{docker_tag} {docker_repository}:{new_tag} | 将docker重新打标签为new_tag |
docker history {docker_repository}:{docker_tag} | 查询docker image的历史信息 |
docker run {docker_repository}:{docker_tag} /bin/echo “Hello” | 运行一个简单的命令,输出Hello |
docker run -it {docker_repository}:{docker_tag} /bin/bash | 运行交互式容器 |
docker run -itd --name={docker_name} {docker_repository}:{docker_tag} /bin/bash | 运行后台式容器 |
docker rename {docker_name} {new_name} | 重命名docker为{new_name} |
docker ps | 查询运行的docker,并查询后续命令中使用的docker_id |
docker stats {docker_id} | 查询docker使用的宿主机资源 |
docker inspect {docker_id} | 查询docker的所有信息 |
docker logs {docker_id} | 查看容器运行的输出 |
docker attach {docker_id} | 接入后台运行的容器 |
docker commit {docker_id} {docker_repository}:{new_tag} | 由一个docker创建一个新的image |
docker export {docker_id} >export.tar | docker文件系统内容以tar包导出 |
docker import export.tar {docker_repository}:{new_tag} | 将export导出的包导入 |
docker cp {src_dir} {docker_id}:{dir} | 将宿主机上的{src_dir}文件夹拷贝到docker的{dir}文件夹下,也可反过来将docker文件拷贝到宿主机 |
docker build -t {new_repository}:{new_tag} {src_dir} | 根据宿主机{src_dir}路径下的Dockerfile创建一个新的docker imageDockerfile至少包含“FROM {docker_repository}:{docker_tag}”内容 |
docker exec -i {docker_id} ls | 在运行的docker中执行ls命令 |
docker pause {docker_id}/{docker_name} | 根据{docker_id}或{docker_name}暂停docker |
docker unpause {docker_id}/{docker_name} | 根据{docker_id}或{docker_name}恢复docker |
docker start {docker_id}/{docker_name} | 根据{docker_id}或{docker_name}启动docker |
docker stop {docker_id}/{docker_name} | 根据{docker_id}或{docker_name}停止docker |
docker kill {docker_id}/{docker_name} | 根据{docker_id}或{docker_name}杀死docker |
docker rm {docker_id}/{docker_name} | 根据{docker_id}或{docker_name}删除docker(添加参数-f为强制删除) |