Docker镜像 容器 仓库和常用命令汇总

目录

1. 镜像

1.1 常见的Docker镜像

1.2 算法常用的Docker镜像

2. 容器

3. 仓库

4. 常用命令汇总

4.1 基础命令

4.2 镜像命令

4.3 容器命令

4.4 运维命令


Docker借鉴了标准集装箱概念,集装箱运输货物,而Docker运输软件。

Docker镜像 容器 仓库和常用命令汇总_第1张图片

1)更快速的应用交付和部署

传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

2)更便捷的升级和扩缩容

随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

3)更简单的系统运维

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。

4)更高效的计算资源利用

Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

1. 镜像

Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器它也相当于是一个root文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7 最小系统的 root 文件系统。

相当于容器的“源代码”,docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。

Docker

面向对象

容器

对象

镜像

1.1 常见的Docker镜像

1)官方镜像

  • Ubuntu:提供了不同版本的Ubuntu操作系统镜像,可以作为基础镜像构建其他应用。
  • CentOS:提供了不同版本的CentOS操作系统镜像,也是一个常见的基础镜像选择。
  • Web服务器和应用程序:
    • Nginx:提供了用于构建和运行Nginx Web服务器的镜像。
    • Apache HTTP Server:提供了用于构建和运行Apache HTTP服务器的镜像。
    • Node.js:提供了Node.js运行时环境的镜像,适用于构建和运行Node.js应用程序。
    • Ruby:提供了Ruby编程语言的镜像,适用于构建和运行Ruby应用程序。

2)数据库

  • MySQL:提供了MySQL数据库服务器的镜像,适用于构建和运行MySQL数据库实例。
  • PostgreSQL:提供了PostgreSQL数据库服务器的镜像,适用于构建和运行PostgreSQL数据库实例。
  • MongoDB:提供了MongoDB数据库服务器的镜像,适用于构建和运行MongoDB数据库实例。

3)深度学习和机器学习

  • TensorFlow:提供了TensorFlow深度学习框架的镜像,适用于构建和运行TensorFlow模型。
  • PyTorch:提供了PyTorch深度学习框架的镜像,适用于构建和运行PyTorch模型。
  • scikit-learn:提供了scikit-learn机器学习库的镜像,适用于构建和运行机器学习模型。

这只是一小部分常见的Docker镜像示例,实际上有数以千计的公共和私有Docker镜像可供使用,可以在Docker Hub (https://hub.docker.com/)中查找合适的镜像。

1.2 算法常用的Docker镜像

在算法模型训练中,使用Docker容器化技术可以提供一个独立、可重现的环境,方便在不同的计算机上运行相同的训练过程。对于算法模型训练,常见的Docker镜像包括以下几种:

  1. 基于操作系统的镜像:通常使用Ubuntu、CentOS等主流Linux发行版作为基础镜像,然后根据具体需求进行配置和定制。这种镜像适合需要自定义环境的训练任务。

  2. 深度学习框架镜像:这些镜像已经预装了各种深度学习框架,如TensorFlow、PyTorch、Keras等,并配置好它们所依赖的库和工具。这样的镜像可以简化环境搭建的过程,快速开始模型训练。

  3. GPU加速镜像:如果你的模型训练需要使用GPU进行加速,可以选择针对特定GPU驱动程序和CUDA版本进行了优化的镜像。例如,NVIDIA提供了基于CUDA的深度学习容器,可以与支持NVIDIA GPU的计算机配合使用。

  4. 特定领域的镜像:某些特定领域的算法模型训练可能需要额外的库或工具,比如计算机视觉、自然语言处理等。为了简化配置过程,一些组织或社区可能会提供特定领域的镜像,已经预装了相关的库和工具。

需要注意的是,选择合适的Docker镜像取决于具体需求和训练环境,可以从Docker Hub(https://hub.docker.com/)等镜像仓库中查找和下载适合的镜像,或者根据自己的需求构建和定制镜像。

2. 容器

1) 从面向对象角度

Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台

2) 从镜像容器角度

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

3. 仓库

仓库(Repository)是集中存放镜像文件的场所。

类似于Maven仓库,存放各种jar包的地方;github仓库,存放各种git项目的地方;Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。 

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等。

小结:

Docker 本身是一个容器运行载体或称之为管理引擎。把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

image文件可以看作是容器的模板,Docker 根据 image 文件生成容器的实例同一个 image 文件,可以生成多个同时运行的容器实例。仓库就是放一堆镜像的地方,可以把镜像发布到仓库中,需要的时候再从仓库中拉下来。

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器

Docker镜像 容器 仓库和常用命令汇总_第2张图片

4. 常用命令汇总

4.1 基础命令

  • 启动docker:systemctl start docker
  • 关闭docker:systemctl stop docker
  • 重启docker:systemctl restart docker
  • 设置docker随服务启动而自启动:systemctl enable docker
  • 查看docker 运行状态:systemctl status docker
  • 查看docker 版本号信息:docker version / docker info

4.2 镜像命令

  • 查看镜像列表:docker images
  • 搜索镜像:docker search 镜像名
  • 拉取镜像:docker pull 镜像名
  • 运行镜像:docker run 镜像名
  • 删除镜像:docker rmi -f 镜像名/镜像ID
  • 强制删除镜像:docker image rm 镜像名称/镜像ID
  • 保存镜像:docker save 镜像名/镜像ID -o 保存路径
  • 加载镜像:docker load -i 镜像保存文件位置
  • 镜像标签:docker tag source_image[:tag] target_image[:tag]
  • 提交镜像:docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag

4.3 容器命令

  • 查看正在运行容器列表:docker ps
  • 查看所有容器:docker ps -a
  • 运行容器:docker run -it -d --name 别名 镜像名:Tag /bin/bash(-it 交互运行;-d 后台运行(一般用-d后台启动,再exec进入容器实例))
  • 退出容器:exit:直接退出,容器会被关闭 / Ctrl + p + q:优雅退出,容器不会被关闭
  • 停止容器:docker stop 容器名/容器ID
  • 强制停止容器:docker kill 容器ID/容器名
  • 删除容器:docker rm -f 容器名/容器ID
  • 进入容器:docker exec -it 容器名/容器ID /bin/bash(推荐,exec在容器中打开新的终端,启动新的进程,exit退出不会导致容器停止)
  • 进入容器:docker attach 容器名/容器ID(attach进入容器启动命令的终端,不会启动新的进程,用exit退出会导致容器的停止)
  • 重启容器:docker restart 容器ID/容器名
  • 启动容器:docker start 容器ID/容器名
  • 容器文件拷贝到容器外:docker cp 容器ID/名称: 容器内路径 容器外路径
  • 容器外文件拷贝到容器:docker cp 容器外路径 容器ID/名称: 容器内路径
  • 查看容器日志:docker logs -f --tail=要查看末尾多少行 默认all 容器ID
  • 数据挂载:-v 宿主机文件存储位置:容器内文件位置(-v命令可以多次使用,即一个容器可以同时挂载多个文件)
  • 自启动容器:docker run命令时 添加参数--restart=always(已经启动了容器想用数据挂载,修改其启动配置:docker update --restart=always 容器ID/容器名 或者 docker container update --restart=always 容器Id/容器名)
  • 更换容器名:docker rename 容器ID/容器名 新容器名

4.4 运维命令

  • 查看docker工作目录:sudo docker info | grep “Docker Root Dir”
  • 查看docker磁盘占用总体情况:du -hs /var/lib/docker/
  • 查看Docker的磁盘使用具体情况:docker system df
  • 删除异常停止的容器:docker rm `docker ps -a | grep Exited | awk '{print $1}'`
  • 删除名称或标签为none的镜像:docker rmi -f `docker images | grep '' | awk '{print $3}'`
  • 清除所有无容器使用的镜像:docker system prune -a

你可能感兴趣的:(#,Docker,docker,运维,容器)