一文搞清楚 Docker 镜像、容器、仓库 您所在的位置:网站首页 docker容器内部保存的python文件找不到 一文搞清楚 Docker 镜像、容器、仓库

一文搞清楚 Docker 镜像、容器、仓库

2023-07-11 05:45| 来源: 网络整理| 查看: 265

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌

Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 ,不然下次找不到哟💕💕

一文搞清楚 Docker 镜像、容器、仓库_镜像

文章目录1、什么是 Docker 镜像、容器、仓库2、镜像、容器、仓库之间的关系3、Docker 镜像3.1、镜像列表3.2、查找镜像3.3、拉取镜像3.4、删除镜像3.5、更新镜像3.6、生成镜像3.7、镜像标签4、Docker 容器4.1、容器启动4.2、容器查看4.3、容器停止和重启4.4、后台模式和进入4.5、容器导入和导出4.6、强制停止容器4.7、清理停止的容器4.8、容器别名及操作4.9、容器错误日志5、Docker 仓库5.1、公有仓库5.2、私有仓库

1、什么是 Docker 镜像、容器、仓库

Docker 镜像、容器、仓库是 Docker 技术中的三个重要概念。

Docker 镜像是一个只读的模板,可以用来创建 Docker 容器。镜像可以包含操作系统、应用程序、依赖库、配置文件等。

Docker 容器是 Docker 镜像的一个运行实例,可以理解为一个轻量级的虚拟机。容器包含了运行应用程序所需的所有组件,包括操作系统、应用程序、依赖库等。

Docker 仓库是用来存储和管理 Docker 镜像的地方,类似于代码仓库。Docker 官方提供了 Docker Hub 仓库,可以在其中存储和分享 Docker 镜像。用户也可以自建私有仓库来存储和管理自己的 Docker 镜像。

通过使用 Docker 镜像、容器、仓库,可以实现应用程序的快速部署、运行和管理,提高了应用程序的可移植性和可伸缩性。

2、镜像、容器、仓库之间的关系

一文搞清楚 Docker 镜像、容器、仓库_容器_02

Docker 镜像、容器、仓库之间的关系如下:

Docker 镜像是一个只读的模板,包含了操作系统、应用程序、依赖库、配置文件等,用来创建 Docker 容器。Docker 容器是 Docker 镜像的一个运行实例,可以理解为一个轻量级的虚拟机。容器包含了运行应用程序所需的所有组件,包括操作系统、应用程序、依赖库等。Docker 仓库是用来存储和管理 Docker 镜像的地方,类似于代码仓库。Docker 镜像可以从仓库中拉取,也可以推送到仓库中进行存储和分享。Docker 官方提供了 Docker Hub 仓库,用户也可以自建私有仓库来存储和管理自己的 Docker 镜像。

综上所述,Docker 镜像是创建 Docker 容器的基础,Docker 容器是 Docker 镜像的运行实例,Docker 仓库是存储和管理 Docker 镜像的地方。通过使用 Docker 镜像、容器、仓库,可以实现应用程序的快速部署、运行和管理,提高了应用程序的可移植性和可伸缩性。

3、Docker 镜像3.1、镜像列表docker images

该命令将列出所有本地镜像的名称、标签、镜像 ID、创建时间和大小等信息。例如:

REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 16.04 4c108a37151f 3 weeks ago 130MB nginx latest 6f715f503b62 4 weeks ago 133MB mysql 5.7 4a3c9c5a0a3d 4 weeks ago 448MB

其中,REPOSITORY 列表示镜像的名称,TAG 列表示镜像的标签(通常是版本号),IMAGE ID 列表示镜像的唯一 ID,CREATED 列表示镜像的创建时间,SIZE 列表示镜像的大小。

3.2、查找镜像

要查找 Docker Hub 上的镜像,可以使用以下命令:

docker search

搜索 MySQL 镜像可以使用以下命令:

docker search mysql[root@ecs-32f7 ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 14221 [OK] mariadb MariaDB Server is a high performing open sou… 5432 [OK] percona Percona Server is a fork of the MySQL relati… 614 [OK] phpmyadmin phpMyAdmin - A web interface for MySQL and M… 818 [OK] bitnami/mysql Bitnami MySQL Docker Image 89 [OK] circleci/mysql MySQL is a widely used, open-source relation… 29 bitnami/mysqld-exporter 5 ubuntu/mysql MySQL open source fast, stable, multi-thread… 49 cimg/mysql 0 rapidfort/mysql RapidFort optimized, hardened image for MySQL 23 rapidfort/mysql8-ib RapidFort optimized, hardened image for MySQ… 9 google/mysql MySQL server for Google Compute Engine 23 [OK] hashicorp/mysql-portworx-demo 0 rapidfort/mysql-official RapidFort optimized, hardened image for MySQ… 7 newrelic/mysql-plugin New Relic Plugin for monitoring MySQL databa… 1 [OK] databack/mysql-backup Back up mysql databases to... anywhere! 86 linuxserver/mysql A Mysql container, brought to you by LinuxSe… 38 bitnamicharts/mysql 0 mirantis/mysql 0 docksal/mysql MySQL service images for Docksal - https://d… 0 linuxserver/mysql-workbench 50 vitess/mysqlctld vitess/mysqlctld 1 [OK] eclipse/mysql Mysql 5.7, curl, rsync 0 [OK] drupalci/mysql-5.5 https://www.drupal.org/project/drupalci 3 [OK] drupalci/mysql-5.7 https://www.drupal.org/project/drupalci 0 [root@ecs-32f7 ~]#3.3、拉取镜像

拉取 Docker 镜像可以使用以下命令:

docker pull :

其中, 是要拉取的 Docker 镜像的名称, 是要拉取的 Docker 镜像的版本号或标签。例如,要拉取官方的 Nginx 镜像,可以使用以下命令:

docker pull nginx:latest

该命令将从 Docker Hub 上拉取最新版本的 Nginx 镜像,并将其保存到本地。如果要拉取指定版本的 Nginx 镜像,可以将 latest 替换为相应的版本号或标签。拉取完成后,可以使用 docker images 命令查看本地已有的 Docker 镜像列表。

[root@ecs-32f7 ~]# docker pull nginx:latest latest: Pulling from library/nginx f03b40093957: Pull complete eed12bbd6494: Pull complete fa7eb8c8eee8: Pull complete 7ff3b2b12318: Pull complete 0f67c7de5f2c: Pull complete 831f51541d38: Pull complete Digest: sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest [root@ecs-32f7 ~]#3.4、删除镜像

删除 Docker 镜像可以使用以下命令:

docker rmi :

其中, 是要删除的 Docker 镜像的名称, 是要删除的 Docker 镜像的版本号或标签。例如,要删除本地的 Nginx 镜像,可以使用以下命令:

docker rmi nginx:latest

该命令将删除本地最新版本的 Nginx 镜像。如果要删除指定版本的 Nginx 镜像,可以将 latest 替换为相应的版本号或标签。注意,如果该镜像正在被使用,则无法删除。可以使用 docker ps 命令查看当前正在运行的 Docker 容器列表,如果某个容器正在使用该镜像,则需要先停止该容器,再删除镜像。

[root@ecs-32f7 ~]# docker rmi nginx:latest Untagged: nginx:latest Untagged: nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305 Deleted: sha256:f9c14fe76d502861ba0939bc3189e642c02e257f06f4c0214b1f8ca329326cda Deleted: sha256:419f8948c50c723f2a5ac74428af3d804b5d0079d6df8f7f827663cf10cbc366 Deleted: sha256:1030aac4f1a8096ed58d3d4a2df55dd1b1b27d919ad156d97ad1f68081d0051a Deleted: sha256:7d90b49d96c3036539ef144ecc27c01de03902d8ea166a0f7b77d11d3779c4bd Deleted: sha256:551acb210764654af31b6cd51adaa74edc9a202587c3395fe0e9f95a2e097f8b Deleted: sha256:3c530958db4c75c6fb409f339367aaf9a1e163c84718c035d4b09bebc83f43e7 Deleted: sha256:8cbe4b54fa88d8fc0198ea0cc3a5432aea41573e6a0ee26eca8c79f9fbfa40e3 [root@ecs-32f7 ~]#3.5、更新镜像

更新 Docker 镜像可以使用以下命令:

docker pull :

其中, 是要更新的 Docker 镜像的名称, 是要更新的 Docker 镜像的版本号或标签。例如,要更新本地的 Nginx 镜像,可以使用以下命令:

docker pull nginx:latest

该命令将会从 Docker Hub 中下载最新版本的 Nginx 镜像,并覆盖本地的同名镜像。如果要更新指定版本的 Nginx 镜像,可以将 latest 替换为相应的版本号或标签。注意,如果本地已经有了最新版本的镜像,则不需要执行该命令。

3.6、生成镜像

生成 Docker 镜像的步骤如下:

编写 Dockerfile:Dockerfile 是用于构建 Docker 镜像的脚本文件,其中包含了构建镜像所需的指令和配置信息。构建 Docker 镜像:使用 docker build 命令根据 Dockerfile 构建 Docker 镜像。构建过程中会执行 Dockerfile 中的指令,并生成一个新的 Docker 镜像。上传 Docker 镜像:使用 docker push 命令将生成的 Docker 镜像上传到 Docker 镜像仓库中。如果没有自己的 Docker 镜像仓库,可以使用 Docker 官方提供的 Docker Hub 镜像仓库。

下面是一个简单的 Dockerfile 示例,以 ubuntu 系统为例:

FROM ubuntu:18.04 # 安装必要的软件包 RUN apt-get update && apt-get install -y \ python3 \ python3-pip \ && rm -rf /var/lib/apt/lists/* # 设置工作目录 WORKDIR /app # 复制应用程序文件到镜像中 COPY . /app # 安装 Python 依赖包 RUN pip3 install --no-cache-dir -r requirements.txt # 暴露应用程序端口 EXPOSE 8000 # 设置启动命令 CMD ["python3", "app.py"]

以上 Dockerfile 文件用于构建一个 Python Web 应用程序的 Docker 镜像。在构建完成后,可以使用 docker push 命令将镜像上传到 Docker 镜像仓库中。

3.7、镜像标签

Docker 镜像标签是用来标识 Docker 镜像版本的一种方式,可以让用户更方便地管理和使用 Docker 镜像。Docker 镜像标签由两部分组成,用冒号分隔,例如: ubuntu:18.04 。其中, ubuntu 表示镜像仓库名称, 18.04 表示镜像标签。

Docker 镜像标签可以是任意字符串,但建议使用语义化的版本号或者日期作为标签,以便于管理和使用。例如, v1.0.0 、 latest 、 20210720 等都可以作为 Docker 镜像标签。

使用 Docker 镜像标签,可以方便地管理和使用不同版本的 Docker 镜像。例如,可以使用 docker pull ubuntu:20.04 命令拉取 Ubuntu 20.04 版本的 Docker 镜像,也可以使用 docker pull ubuntu:18.04 命令拉取 Ubuntu 18.04 版本的 Docker 镜像。

docker tag 命令用于为 Docker 镜像打标签,其语法格式如下:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

其中, SOURCE_IMAGE 表示要打标签的 Docker 镜像, TARGET_IMAGE 表示要打的标签后的目标镜像。

例如,要为本地的 ubuntu:20.04 镜像打上 my-ubuntu:latest 的标签,可以使用以下命令:

docker tag ubuntu:20.04 my-ubuntu:latest

执行该命令后,本地的 ubuntu:20.04 镜像就会被打上 my-ubuntu:latest 的标签,可以使用 docker images 命令查看。

4、Docker 容器4.1、容器启动

启动容器的命令是 docker start ,其语法格式如下:

docker start [OPTIONS] CONTAINER [CONTAINER...]

其中, CONTAINER 表示要启动的容器名称或 ID,可以同时启动多个容器。 OPTIONS 包括以下常用选项:

-a ,表示将容器的标准输入、标准输出和标准错误输出连接到当前终端。-i ,表示以交互模式启动容器。-d ,表示以守护进程模式启动容器。–attach ,等同于 -a 选项。–interactive ,等同于 -i 选项。

例如,要启动名称为 my-nginx 的 Nginx 容器,可以使用以下命令:

docker start my-nginx

如果要以交互模式启动该容器,可以使用以下命令:

docker start -ai my-nginx

如果要以守护进程模式启动该容器,可以使用以下命令:

docker start -d my-nginx4.2、容器查看

查看容器的命令是 docker ps ,其语法格式如下:

docker ps [OPTIONS]

其中, OPTIONS 包括以下常用选项:

-a ,表示查看所有容器,包括已经停止的容器。 -q ,表示只显示容器的 ID。 -n ,表示显示最近创建的 n 个容器。 -s ,表示显示容器所占用的磁盘空间大小。 --format ,表示指定输出格式。 例如,要查看当前正在运行的容器,可以使用以下命令:docker ps

如果要查看所有容器,包括已经停止的容器,可以使用以下命令:

docker ps -a

如果只想显示容器的 ID,可以使用以下命令:

docker ps -q

如果只想显示最近创建的 5 个容器,可以使用以下命令:

docker ps -n 5

如果想显示容器所占用的磁盘空间大小,可以使用以下命令:

docker ps -s

如果想指定输出格式,可以使用以下命令:

docker ps --format "{{.ID}}\t{{.Names}}\t{{.Status}}"

上述命令将输出容器的 ID、名称和状态信息。

4.3、容器停止和重启

要停止容器,可以使用 docker stop 命令。其语法格式如下:

docker stop [OPTIONS] CONTAINER [CONTAINER...]

其中, OPTIONS 包括以下常用选项:

-t ,表示停止容器的等待时间,单位为秒,默认为 10 秒。 例如,要停止 ID 为 123456 的容器,可以使用以下命令:docker stop 123456

要重启已经停止的容器,可以使用 docker start 命令。其语法格式如下:

docker start [OPTIONS] CONTAINER [CONTAINER...]

其中, OPTIONS 包括以下常用选项:

-i ,表示启动容器并进入交互模式。 -a ,表示启动容器并附加到容器的标准输入、输出和错误输出。 -d ,表示以后台模式启动容器。 -p ,表示将容器的端口映射到主机的端口。 -v ,表示将主机的目录或文件挂载到容器中。 例如,要重新启动 ID 为 123456 的容器,可以使用以下命令:docker start 123456

如果想以交互模式启动容器,可以使用以下命令:

docker start -i 123456

如果想以后台模式启动容器,可以使用以下命令:

docker start -d 123456

如果想将容器的端口映射到主机的端口,可以使用以下命令:

docker start -p 80:80 123456

上述命令将容器的 80 端口映射到主机的 80 端口。 如果想将主机的目录或文件挂载到容器中,可以使用以下命令:

docker start -v /host/path:/container/path 123456

上述命令将主机的 /host/path 目录或文件挂载到容器的 /container/path 目录中。

4.4、后台模式和进入

后台模式是指在容器中运行应用程序时,不占用当前终端窗口,而是在后台运行。这样可以让终端窗口继续执行其他命令,而不会被占用。

在 Docker 中,要在后台模式下运行容器,可以使用 -d 参数。例如,运行一个名为 myapp 的容器,并在后台模式下运行,可以使用以下命令:

docker run -d myapp

进入容器是指在已经运行的容器中打开一个新的终端窗口,以便在容器中执行命令。在 Docker 中,可以使用 docker exec 命令进入容器。例如,进入名为 myapp 的容器,可以使用以下命令:

docker exec -it myapp /bin/bash

其中, -it 参数表示进入交互模式,并打开一个新的终端窗口。 /bin/bash 表示进入容器后执行的命令,这里是打开一个新的 Bash 终端。在进入容器后,可以在容器中执行各种命令,如查看文件、修改配置文件等。

4.5、容器导入和导出

Docker 容器导入和导出是指将容器及其文件系统导出为一个压缩文件,或将一个压缩文件导入为 Docker 容器的过程。 容器导出可以用于备份容器或迁移容器到其他机器上。容器导入可以用于创建一个新的容器,或者将容器恢复到之前的状态。 容器导出可以使用 docker export 命令。例如,将名为 mycontainer 的容器导出为一个 tar 文件,可以使用以下命令:

docker export mycontainer > mycontainer.tar

容器导入可以使用 docker import 命令。例如,将名为 mycontainer.tar 的 tar 文件导入为一个名为 myimage 的 Docker 镜像,可以使用以下命令:

docker import mycontainer.tar myimage

导入后,可以使用 docker run 命令创建一个新的容器,例如:

docker run -it myimage /bin/bash

这将创建一个新的容器,并进入容器的交互式终端。

4.6、强制停止容器

可以使用 docker stop 命令来停止容器。例如,停止名为 mycontainer 的容器,可以使用以下命令:

docker stop mycontainer

如果容器无法正常停止,可以使用 docker kill 命令来强制停止容器。例如,强制停止名为 mycontainer 的容器,可以使用以下命令:

docker kill mycontainer

注意,使用 docker kill 命令会直接终止容器进程,可能会导致数据丢失或其他问题,应该尽量避免使用。

4.7、清理停止的容器

可以使用 docker container prune 命令来清理停止的容器。这个命令会删除所有已经停止的容器,释放占用的系统资源。例如,可以使用以下命令清理停止的容器:

docker container prune

在执行命令之前,可以使用 docker container ls -a 命令来列出所有容器,确认哪些容器已经停止。执行 docker container prune 命令后,所有已经停止的容器都会被删除,无法恢复,请谨慎使用。

4.8、容器别名及操作

在 Docker 中,可以为容器设置别名,方便对容器进行操作。以下是设置容器别名及常用操作的命令:

为容器设置别名docker rename [容器ID或容器名] [新别名]启动容器docker start [容器ID或容器名]停止容器docker stop [容器ID或容器名]重启容器docker restart [容器ID或容器名]进入容器docker exec -it [容器ID或容器名] /bin/bash查看容器日志docker logs [容器ID或容器名]删除容器docker rm [容器ID或容器名]

通过为容器设置别名,可以方便地对容器进行操作,避免了频繁输入容器ID或容器名的麻烦。

4.9、容器错误日志

在 Docker 中,可以通过查看容器的错误日志来定位和解决容器运行中的问题。以下是查看容器错误日志的命令:

docker logs [容器ID或容器名]

该命令会输出容器的标准输出和标准错误信息。如果容器运行中出现了错误,可以通过查看错误日志来定位问题所在。可以使用以下命令来查看容器最近的错误日志:

docker logs --tail [行数] [容器ID或容器名]

其中, --tail 参数用于指定要查看的日志行数。例如,要查看容器最近的 10 行错误日志,可以使用以下命令:

docker logs --tail 10 [容器ID或容器名]

通过查看容器错误日志,可以快速定位和解决容器运行中的问题,提高容器的稳定性和可靠性。

5、Docker 仓库5.1、公有仓库

公有仓库是指可以供用户免费使用的 Docker 镜像仓库,用户可以在其中存储和分享自己的 Docker 镜像。Docker 官方提供了 Docker Hub 公有仓库,其中包含了大量的 Docker 镜像,用户可以通过搜索和下载这些镜像来快速部署和运行应用程序。除了 Docker Hub,还有一些其他的公有仓库,如 Google Container Registry、AWS Elastic Container Registry 等。用户也可以自己搭建私有仓库,用于存储和管理自己的 Docker 镜像。使用公有仓库可以方便地获取和分享 Docker 镜像,提高了应用程序的可移植性和可伸缩性。

1.Docker 官方和国内很多云服务商都提供了国内加速器服务,比如:阿里云的加速器 https://help.aliyun.com/document_detail/60750.html

2.网易加速器:http://hub-mirror.c.163.com

3.Docker官方中国加速器:https://registry.docker-cn.com

4.ustc 的镜像:https://docker.mirrors.ustc.edu.cn

5.daocloud:https://www.daocloud.io/mirror#accelerator-doc(注册后使用)

5.2、私有仓库

私有仓库是指用户自己搭建的 Docker 镜像仓库,用于存储和管理自己的 Docker 镜像。相比于公有仓库,私有仓库更加安全和可控,用户可以完全掌控自己的镜像,避免了因为公有仓库的镜像被篡改或者存在漏洞而导致的安全问题。私有仓库可以部署在本地服务器或者云服务器上,用户可以根据自己的需求进行扩容和优化。Docker 官方也提供了 Docker Registry 作为私有仓库的解决方案,用户可以在其中搭建自己的私有仓库。使用私有仓库可以提高应用程序的安全性和可控性,适用于一些对安全性要求比较高的企业或者组织。1. 安装 Docker Registry

Docker Registry 是 Docker 官方提供的镜像仓库,可以用来搭建私有仓库。可以通过以下命令来拉取 Docker Registry 镜像:

docker pull registry

2. 运行 Docker Registry 容器

可以通过以下命令来运行 Docker Registry 容器:

docker run -d -p 5000:5000 --name registry registry

其中, -p 5000:5000 表示将容器内部的 5000 端口映射到主机的 5000 端口, --name registry 表示指定容器的名称为 registry。

3. 配置 Docker 客户端

在使用私有仓库时,需要在 Docker 客户端中配置私有仓库的地址。可以通过以下命令来配置:

echo '{"insecure-registries":[":"]}' > /etc/docker/daemon.json

其中, 表示私有仓库的地址, 表示私有仓库的端口号。配置完成后,需要重启 Docker 服务:

systemctl restart docker

4. 推送和拉取镜像

在配置完成后,就可以使用 docker push 命令来推送镜像到私有仓库,使用 docker pull 命令来从私有仓库拉取镜像了。例如:

docker tag :/ docker push :/ docker pull :/

其中, 表示要推送或拉取的镜像名称, 表示私有仓库的地址, 表示私有仓库的端口号。

一文搞清楚 Docker 镜像、容器、仓库_docker_03



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有