docker镜像、容器、仓库介绍

docker

    • docker介绍
    • docker镜像命令
    • docker容器命令
    • docker仓库

docker介绍

官网

Docker 是一种开源的容器化平台,用于开发、部署和运行应用。它通过将应用程序及其依赖项打包到称为“容器”的单一包中,使得应用能够在任何环境下运行,不受底层系统的限制。Docker提供了一种标准化的软件交付方式,使得应用在开发、测试和生产环境中的运行更加一致。

Docker的核心概念

  • 镜像(Image):Docker镜像是容器的“模板”,包含了操作系统、应用程序以及相关依赖库。镜像是只读的,用于创建和运行容器。

  • 容器(Container):容器是镜像的一个运行实例,是一个隔离的进程环境,拥有独立的文件系统、网络等资源。一个镜像可以创建多个容器,每个容器之间是相互隔离的。

  • Dockerfile:Dockerfile是一个文本文件,定义了如何构建Docker镜像。它包含了一系列指令,用于描述镜像的构建步骤,例如选择基础镜像、安装依赖、复制文件、设置环境变量等。

  • 仓库(Registry):Docker仓库用于存储和分发Docker镜像,类似于代码的版本控制系统。Docker Hub是官方的公共镜像仓库,用户也可以搭建私有仓库。

Docker的底层架构与组件

Docker的底层架构主要由以下几个核心组件组成:

Docker Daemon(守护进程):

  • Docker Daemon是Docker的后台进程,负责管理容器的生命周期、构建和运行镜像。它接受客户端(CLI)命令并执行相应操作。

Docker CLI:

  • Docker CLI是Docker的命令行界面,用于与Docker Daemon进行通信,执行容器的启动、停止、删除等操作。

Containerd:

  • Containerd是一个容器管理的守护进程,负责管理容器的生命周期。它是Docker的一部分,但也可以作为独立组件使用,直接与OCI(Open Container Initiative)兼容。

RunC:

  • RunC是一个轻量级的、符合OCI标准的容器运行时工具。RunC的核心作用是创建和启动容器,通过Namespace、Cgroups等
  • Linux内核特性实现容器的隔离与资源控制。

Libnetwork:

  • Libnetwork是Docker的网络管理库,用于处理容器的网络连接,包括创建虚拟网络、网络隔离等操作。
    图像和存储管理:

Docker支持多种存储驱动(如OverlayFS、AUFS、Device Mapper等),用于管理镜像的分层存储结构。每一层只保存了增量数据,这种分层存储可以提高资源利用率并减少冗余。

Docker 使用客户端-服务器架构。Docker 客户端与 Docker 守护程序通信,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护程序使用 REST API、通过 UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许使用由一组容器组成的应用程序。

在这里插入图片描述

Docker的底层原理

Docker的底层原理主要依赖于Linux内核的几个关键技术,包括Namespace、Cgroups、Union File System等,这些技术实现了容器的隔离、资源管理和文件系统支持。

  1. Namespace(命名空间)
    Namespace是Linux内核提供的资源隔离技术,它允许系统资源(如进程ID、网络、文件系统等)被隔离到独立的命名空间中。不同命名空间内的资源是相互独立的,从而使得一个容器中的进程无法影响另一个容器中的进程。Docker主要使用了以下几种Namespace:

    • PID Namespace:隔离进程ID,使得每个容器中的进程彼此独立。
      NET Namespace:隔离网络资源,如网卡、IP地址、端口等,使得容器拥有独立的网络栈。
      IPC Namespace:隔离进程间通信(如信号、消息队列等),确保容器间通信安全。
      Mount Namespace:隔离文件系统挂载点,每个容器可以拥有独立的文件系统视图。
      UTS Namespace:隔离主机名和域名,使得容器可以设置自己的主机名。
  2. Cgroups(Control Groups)
    Cgroups是Linux内核提供的资源管理功能,可以限制和隔离进程组使用的资源(如CPU、内存、磁盘I/O等)。在Docker中,Cgroups用于限制每个容器的资源使用,确保系统稳定。比如,可以设置一个容器的CPU最大使用率不超过50%、内存不超过1GB等,从而避免单个容器过度占用资源影响其他容器。

  3. Union File System(联合文件系统)
    Docker的镜像由多层只读层叠加而成,这种分层结构依赖于Union File System的支持。常见的联合文件系统有AUFS、OverlayFS等。每层镜像都只记录了文件系统的增量,只有在容器运行时创建一个可写层。分层文件系统使得镜像可以高效共享、重复利用,提高了存储空间的利用率。

  4. 容器镜像的分层结构与存储管理
    Docker镜像的分层结构使得不同镜像可以共享相同的底层资源。在镜像构建时,Docker会为每个操作创建一个新的层,这些层按顺序叠加构成完整的镜像。在容器启动时,Docker会在镜像的顶部添加一个可写层,即“容器层”,以便容器可以对文件系统进行读写操作。

Docker的运行流程

构建镜像:根据Dockerfile构建镜像,镜像分为多个只读层,每层对应Dockerfile的一条指令。

启动容器:从镜像创建容器实例,并为容器创建一个可写层。

隔离资源:启动容器时,Docker通过Namespace隔离容器的进程、网络、文件系统等资源。

分配资源:Docker通过Cgroups为容器分配资源,并监控其资源使用情况。

容器网络:Docker使用Libnetwork为容器创建网络连接,实现容器间通信和网络隔离。

文件系统管理:Docker使用联合文件系统挂载镜像层,并为容器提供可写层。

Docker的优势与应用场景

一致性:Docker打包了应用和依赖,确保在不同环境中运行的一致性,解决了“运行在我电脑上”的问题。

资源高效:相比虚拟机,容器不需要完整的操作系统和硬件模拟,启动速度快,资源占用少。

弹性伸缩:通过编排工具(如Kubernetes)管理容器集群,容器化应用易于实现水平扩展和自动恢复。

快速交付:Docker简化了软件的开发、测试、部署流程,使得开发、测试、运维团队之间的协作更加高效。

容器与虚拟机 (VM)

简单来说,虚拟机是一个完整的操作系统,拥有自己的内核、硬件驱动程序、程序和应用程序。启动虚拟机只是为了隔离单个应用程序,这会带来很大的开销。

容器只是一个独立的进程,其中包含运行所需的所有文件。如果运行多个容器,它们都共享同一个内核,这样您就可以在更少的基础设施上运行更多的应用程序。

结合使用虚拟机和容器

容器和虚拟机经常一起使用。例如,在云环境中,配置的机器通常是虚拟机。但是,具有容器运行时的虚拟机可以运行多个容器化应用程序,而不是配置一台机器来运行一个应用程序,从而提高资源利用率并降低成本。

容器和镜像的关系

容器是一个独立的进程,它从哪里获取文件和配置?如何共享这些环境?这就是容器镜像发挥作用的地方!容器镜像是一个标准化包,其中包含运行容器所需的所有文件、二进制文件、库和配置。

对于 PostgreSQL映像,该映像将打包数据库二进制文件、配置文件和其他依赖项。对于 Python Web 应用,它将包括 Python 运行时、应用代码及其所有依赖项。

镜像有两个重要原则:

  • 镜像是不可变的。镜像一旦创建,就无法修改。只能创建新镜像或在其上添加更改。

  • 容器镜像由层组成。每层代表一组添加、删除或修改文件的文件系统更改。

可以理解为镜像就是一个流水线工厂,容器就是最终加工出来的产品

docker镜像命令

安装docker:Ubuntu2410使用阿里源安装最新docker

apt -y install apt-transport-https ca-certificates curl software-properties-commoncurl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"apt-get -y install docker-ce
systemctl enable --now docker
root@huhy:~# docker version
Client: Docker Engine - CommunityVersion:           27.3.1API version:       1.47Go version:        go1.22.7Git commit:        ce12230Built:             Fri Sep 20 11:40:42 2024OS/Arch:           linux/amd64Context:           defaultServer: Docker Engine - CommunityEngine:Version:          27.3.1API version:      1.47 (minimum version 1.24)Go version:       go1.22.7Git commit:       41ca978Built:            Fri Sep 20 11:40:42 2024OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.7.22GitCommit:        7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311crunc:Version:          1.1.14GitCommit:        v1.1.14-0-g2c9f560docker-init:Version:          0.19.0GitCommit:        de40ad0

Docker 使用 Linux 内核的 iptables 机制来处理容器的网络通信和地址转发。因此需要启用参数

加载 br_netfilter 内核模块。这是一个负责管理桥接网络过滤的模块

modprobe br_netfilter
vi /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
root@huhy:~# sysctl -p
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
  • 搜索镜像:docker search
    可以指定全称,不然就返回包含名称的所有镜像
root@huhy:~# docker search centos
NAME                           DESCRIPTION                                     STARS     OFFICIAL
centos                         DEPRECATED; The official build of CentOS.       7756      [OK]
centos/postgresql-10-centos7   PostgreSQL is an advanced Object-Relational …   20
centos/httpd-24-centos8                                                        3
corpusops/centos               centos corpusops baseimage                      0
centos/systemd                 systemd enabled base container.                 115
centos/redis-5-centos8                                                         0
centos/postgresql-96-centos7   PostgreSQL is an advanced Object-Relational …   45
centos/mariadb-102-centos7     MariaDB 10.2 SQL database server                6
centos/postgresql-10-centos8                                                   0
centos/mysql-80-centos8                                                        0
centos/mongodb-36-centos7      MongoDB NoSQL database server                   12
centos/nginx-112-centos7       Platform for running nginx 1.12 or building …   16
centos/mariadb-103-centos8                                                     2
centos/postgresql-12-centos8                                                   0
centos/mysql-57-centos7        MySQL 5.7 SQL database server                   95
centos/mariadb-101-centos7     MariaDB 10.1 SQL database server                13
centos/mysql-56-centos7        MySQL 5.6 SQL database server                   23
centos/httpd-24-centos7        Platform for running Apache httpd 2.4 or bui…   46
centos/redis-32-centos7        Redis in-memory data structure store, used a…   6
centos/redis-5-centos7         Redis in-memory data structure store, used a…   0
centos/ruby-25-centos7         Platform for building and running Ruby 2.5 a…   3
centos/postgresql-12-centos7   PostgreSQL is an advanced Object-Relational …   5
centos/php-56-centos7          Platform for building and running PHP 5.6 ap…   34
centos/postgresql-94-centos7   PostgreSQL is an advanced Object-Relational …   16
centos/nginx-18-centos7        Platform for running nginx 1.8 or building n…   14
  • 拉取镜像:docker pull
    需要指定版本,否则默认拉取最新版本的镜像
root@huhy:~# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
root@huhy:~#
  • 查看镜像:docker images
    获取镜像的名称大小,版本、id等信息
root@huhy:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       latest    5d0da3dc9764   3 years ago   231MB
  • 删除镜像:docker rmi
    通过名称或者id都可以删除:需要注意的是,删除的镜像是不能有已经启动过的容器实例,不然会失败
root@huhy:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       latest    5d0da3dc9764   3 years ago   231MB
root@huhy:~# docker rmi centos
Untagged: centos:latest
Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6
Deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59
  • 批量删除镜像
    通过组合命令使用,先执行查看镜像,然后删除查看到的镜像
root@huhy:~# docker rmi $(docker images)
Untagged: redis:latest
Untagged: redis@sha256:a06cea905344470eb49c972f3d030e22f28f632c1b4f43bbe4a26a4329dd6be5
Deleted: sha256:f02a7f56692880b88d5fabe631da5547ae1d8c30d7050c3d004347a9fa5e5a3c
Deleted: sha256:685583ae93732862468e2a7edba217ed8165dfc730c363c30bb9405c4c81aac5
Deleted: sha256:fd8efb49fd2763acfd6a07881e62713a246858a4cdfe4b9a31c9cb3336a9c710
Deleted: sha256:3895fdb072213028eed326869c37d52d4b4003c6b0d0b4e6faf57bf18e5d439a
Deleted: sha256:7c9bf6b85511bdf143188f915e200ff94b46dc75d6d218845a939bfa8701f1e2
Deleted: sha256:ba40754911b8313098bdacb32d5044d6105f72a3b9cfe4a9ea16b8f05861614d
Deleted: sha256:93588577b39273261aea628c7f6aab541a86ff37e1f2674ee421300a2ff34d02
Deleted: sha256:1408254577b9d64420dcf7d4ba1b0df9a3ddd7a29d3d4736ad2ff4672baf4a8a
Untagged: centos:latest
Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6
Deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59
Untagged: nginx:latest
Untagged: nginx@sha256:28402db69fec7c17e179ea87882667f1e054391138f77ffaf0c3eb388efc3ffb
Deleted: sha256:3b25b682ea82b2db3cc4fd48db818be788ee3f902ac7378090cf2624ec2442df
Deleted: sha256:3e8a4396bcdb62aeb916ec1e4cf64500038080839f049c498c256742dd842334
Deleted: sha256:8dd6a711fbdd252eba01f96630aa132c4b4e96961f09010fbbdb11869865f994
Deleted: sha256:9368c52198f80c9fb87fc3eaf7770afb7abb3bfd4120a8defd8a8f1a68ff375d
Deleted: sha256:46834c975bf2d807053675d76098806736ee94604c650aac5fe8b5172ab008c8
Deleted: sha256:6e433330e8b1553bee0637fac3b1e66c994bb2c0cab7b2372d2584171d1c93d8
Deleted: sha256:fbc611fa4a4aff4cf0bfd963c49e2c416ff8047c9f84c2dc9328d3b833f1118d
Deleted: sha256:98b5f35ea9d3eca6ed1881b5fe5d1e02024e1450822879e4c13bb48c9386d0ad
  • 清理镜像:docker image prune
    默认情况下,docker image prune 只会删除 未被任何容器使用 的镜像。
    使用 -a 标志,删除所有没有标签的镜像。
root@huhy:/opt# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tmt          v1        f77539e7e45f   2 weeks ago   467MB
tomcat       latest    f77539e7e45f   2 weeks ago   467MB
nginx        latest    3b25b682ea82   7 weeks ago   192MB
root@huhy:/opt# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: tmt:v1
untagged: tomcat:latest
deleted: sha256:f77539e7e45f7c6337c681589fe18ee6407640e4066c450fcfb8c6a4ba5575b2
untagged: nginx:latest
deleted: sha256:3b25b682ea82b2db3cc4fd48db818be788ee3f902ac7378090cf2624ec2442df
deleted: sha256:3e8a4396bcdb62aeb916ec1e4cf64500038080839f049c498c256742dd842334
deleted: sha256:8dd6a711fbdd252eba01f96630aa132c4b4e96961f09010fbbdb11869865f994
deleted: sha256:9368c52198f80c9fb87fc3eaf7770afb7abb3bfd4120a8defd8a8f1a68ff375d
deleted: sha256:46834c975bf2d807053675d76098806736ee94604c650aac5fe8b5172ab008c8
deleted: sha256:6e433330e8b1553bee0637fac3b1e66c994bb2c0cab7b2372d2584171d1c93d8
deleted: sha256:fbc611fa4a4aff4cf0bfd963c49e2c416ff8047c9f84c2dc9328d3b833f1118d
deleted: sha256:98b5f35ea9d3eca6ed1881b5fe5d1e02024e1450822879e4c13bb48c9386d0adTotal reclaimed space: 191.7MB
root@huhy:/opt# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
root@huhy:/opt#
  • 保存镜像:docker save
    o, --output:指定保存的 tar 文件的名称或路径。默认为标准输出

保存单个镜像

root@huhy:/opt# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tomcat       latest    f77539e7e45f   2 weeks ago   467MB
nginx        latest    3b25b682ea82   7 weeks ago   192MB
root@huhy:/opt# docker save -o nginx.tar nginx:latest
root@huhy:/opt# ls
nginx.tar
root@huhy:/opt#

保存两个镜像

root@huhy:/opt# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tomcat       latest    f77539e7e45f   2 weeks ago   467MB
nginx        latest    3b25b682ea82   7 weeks ago   192MB
root@huhy:/opt# docker save -o image.tar nginx:latest tomcat:latest
root@huhy:/opt# ls
image.tar

批量保存所有镜像到一个压缩包里面

#!/bin/bash# 设置输出文件名称
output_file="all_docker_images.tar"# 获取所有镜像名称和标签
images=$(docker images --format "{{.Repository}}:{{.Tag}}")# 打包所有镜像
echo "正在将以下镜像保存到 $output_file:"
echo "$images"
docker save -o "$output_file" $imagesecho "所有镜像已保存到 $output_file"
root@huhy:/opt# vi images.sh
iroot@huhy:/opt# bash images.sh
正在将以下镜像保存到 all_docker_images.tar:
tomcat:latest
nginx:latest
所有镜像已保存到 all_docker_images.tar
root@huhy:/opt# ls
all_docker_images.tar  images.sh
root@huhy:/opt#
  • 导入镜像:docker load
    -i, --input:指定要加载的 tar 文件路径
root@huhy:/opt# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
root@huhy:/opt# docker load -i all_docker_images.tar
Loaded image: tomcat:latest
98b5f35ea9d3: Loading layer [==================================================>]  77.83MB/77.83MB
b33db0c3c3a8: Loading layer [==================================================>]  117.9MB/117.9MB
63d7ce983cd5: Loading layer [==================================================>]  3.584kB/3.584kB
296af1bd2844: Loading layer [==================================================>]  4.608kB/4.608kB
8ce189049cb5: Loading layer [==================================================>]   2.56kB/2.56kB
6ac729401225: Loading layer [==================================================>]   5.12kB/5.12kB
e4e9e9ad93c2: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest
root@huhy:/opt# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tomcat       latest    f77539e7e45f   2 weeks ago   467MB
nginx        latest    3b25b682ea82   7 weeks ago   192MB
root@huhy:/opt#
  • 添加标签:dockr tag
root@huhy:/opt# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tomcat       latest    f77539e7e45f   2 weeks ago   467MB
nginx        latest    3b25b682ea82   7 weeks ago   192MB
root@huhy:/opt# docker tag tomcat:latest tmt:v1
root@huhy:/opt# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tmt          v1        f77539e7e45f   2 weeks ago   467MB
tomcat       latest    f77539e7e45f   2 weeks ago   467MB
nginx        latest    3b25b682ea82   7 weeks ago   192MB

docker容器命令

  • 启动容器:docker run
    • -d:表示后台运行容器(即“分离模式”),这样容器启动后会在后台运行,不会阻塞当前终端
    • –name:指定容器的名称,方便后续管理。否则系统会随机生成一个名称
    • -p:端口映射,将主机的端口映射到容器的端口,格式是 主机端口:容器端口(如果p是大写,就是随机分配端口)
    • -v:数据卷挂载,用于将主机的文件夹挂载到容器中,这在 Web 服务中很常见,可以将 Nginx 配置文件或网页文件挂载到容器。格式是 主机路径:容器路径
    • –rm:容器停止后自动删除容器。适用于临时测试环境
    • -e:设置环境变量,用于在启动时配置容器内部的环境
    • -it:用于交互模式启动容器,加上 -t 表示为容器分配一个伪终端
    • –network:设置容器的网络模式。Docker 提供了多种网络模式,如 bridge、host、none 等,或使用自定义网络。
    • -h, --hostname:设置容器的主机名。
    • –memory:限制容器的内存使用。可以指定具体的内存大小。
    • –cpu-shares:为容器设置 CPU 共享权重,用于调度时分配 CPU 资源
    • –restart:设置容器的自动重启策略。常见的选项有:
      no:不会自动重启容器(默认行为)。
      always:容器停止时总是重启。
      unless-stopped:除非容器被手动停止,否则总是重启。
      on-failure:仅在容器非正常退出(退出码非 0)时重启

启动一个nginx容器

root@huhy:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    3b25b682ea82   5 weeks ago   192MB
root@huhy:~# docker run -itd --name nginx -p 8081:80 3b25b682ea82
6eefa8c342cfef7142fb000172727b757f1686a4d0bcc835df19e310d3d18ef9
root@huhy:~# ss -tlun | grep 80
tcp   LISTEN 0      4096         0.0.0.0:8081       0.0.0.0:*
tcp   LISTEN 0      4096            [::]:8081          [::]:*
  • 查看容器:docker ps
    • -a:列出所有容器(包括已停止的容器)
    • -q:仅显示容器 ID,不显示其他详细信息
root@huhy:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                     NAMES
6eefa8c342cf   3b25b682ea82   "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   0.0.0.0:8081->80/tcp, [::]:8081->80/tcp   nginx
root@huhy:~# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                     NAMES
6eefa8c342cf   3b25b682ea82   "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   0.0.0.0:8081->80/tcp, [::]:8081->80/tcp   nginx
root@huhy:~# docker ps -q
6eefa8c342cf
  • 查看容器详细信息:docker inspect
root@huhy:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                     NAMES
6eefa8c342cf   3b25b682ea82   "/docker-entrypoint.…"   7 minutes ago   Up 7 minutes   0.0.0.0:8081->80/tcp, [::]:8081->80/tcp   nginx
root@huhy:~# docker inspect nginx
[{"Id": "6eefa8c342cfef7142fb000172727b757f1686a4d0bcc835df19e310d3d18ef9","Created": "2024-11-11T02:35:58.084126042Z","Path": "/docker-entrypoint.sh","Args": ["nginx","-g","daemon off;"
............
  • 查看容器日志:docker logs
    • -f:跟随实时输出日志
    • –tail:查看日志的最后几行
root@huhy:~# docker logs -f nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/11/11 02:35:58 [notice] 1#1: using the "epoll" event method
2024/11/11 02:35:58 [notice] 1#1: nginx/1.27.2
2024/11/11 02:35:58 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14)
2024/11/11 02:35:58 [notice] 1#1: OS: Linux 6.8.0-45-generic
2024/11/11 02:35:58 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2024/11/11 02:35:58 [notice] 1#1: start worker processes
  • 进入容器:docker exec
    • -i(–interactive):开启交互模式,使得容器中的命令可以接收标准输入。适用于需要交互输入的命令
    • -t(–tty):分配一个伪终端(TTY)。通常与 -i 一起使用来打开一个交互式的终端,比如 bash 或 sh
    • -e(–env):设置环境变量,为执行的命令添加指定的环境变量。可以添加多个 -e 参数
    • –privileged:允许容器有更多的权限,适用于执行一些需要高权限的操作
    • –workdir:指定容器中执行命令的工作目录(工作路径),相当于切换到指定目录再执行命令
root@huhy:~# docker exec -it nginx bash
root@6eefa8c342cf:/# ls
bin   dev                  docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc                   lib   media  opt  root  sbin  sys  usr
root@6eefa8c342cf:/#
  • 停止容器:docker stop
root@huhy:~# docker stop nginx
nginx
root@huhy:~# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@huhy:~# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                      PORTS     NAMES
6eefa8c342cf   3b25b682ea82   "/docker-entrypoint.…"   39 minutes ago   Exited (0) 10 seconds ago             nginx
root@huhy:~#
  • 强制停止:docker kill
root@huhy:/opt# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
df30594547df   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 5 seconds   80/tcp    optimistic_mirzakhani
root@huhy:/opt# docker kill df30594547df
df30594547df
root@huhy:/opt# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@huhy:/opt#
  • 启动容器:docker start
root@huhy:~# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@huhy:~# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                      PORTS     NAMES
6eefa8c342cf   3b25b682ea82   "/docker-entrypoint.…"   39 minutes ago   Exited (0) 10 seconds ago             nginx
root@huhy:~# docker start nginx
nginx
root@huhy:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS         PORTS                                     NAMES
6eefa8c342cf   3b25b682ea82   "/docker-entrypoint.…"   40 minutes ago   Up 3 seconds   0.0.0.0:8081->80/tcp, [::]:8081->80/tcp   nginx
root@huhy:~#
  • 暂停容器中所有进程:docker pause
root@huhy:~# docker pause nginx
nginx
root@huhy:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                   PORTS                                     NAMES
6eefa8c342cf   3b25b682ea82   "/docker-entrypoint.…"   41 minutes ago   Up 57 seconds (Paused)   0.0.0.0:8081->80/tcp, [::]:8081->80/tcp   nginx
root@huhy:~#
  • 恢复被暂停的容器:docker unpause
root@huhy:~# docker unpause nginx
nginx
root@huhy:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                     NAMES
6eefa8c342cf   3b25b682ea82   "/docker-entrypoint.…"   51 minutes ago   Up 10 minutes   0.0.0.0:8081->80/tcp, [::]:8081->80/tcp   nginx
root@huhy:~#
  • 查看 Docker 的实时事件流:docker events
    • –since:指定从特定时间开始获取事件。时间格式可以是时间戳或格式化的日期字符串。
      例如,查看最近 1 小时的事件:
docker events --since 1h
  • –until:指定事件结束时间,和 --since 搭配使用。
    例如,查看指定时间段内的事件:
docker events --since "2023-10-01T00:00:00" --until "2023-10-01T12:00:00"
  • –filter:用于过滤特定的事件,docker events 支持多种过滤器,最常用的包括:
    event:按事件类型过滤,例如 start、stop、die 等。
    container:指定某个容器的事件。
    image:指定某个镜像的事件。
    label:按标签过滤事件。
    例如,查看特定容器的事件:
docker events --filter container=my-container
  • 容器导出为镜像:docker commit
    此命令只会记录文件系统和容器状态,不会记录启动参数和卷挂载等等,可搭配inspect使用,达到容器迁移的效果
root@huhy:/opt# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
9448eb29f64e   nginx     "/docker-entrypoint.…"   14 seconds ago   Up 13 seconds   80/tcp    elated_beaver
root@huhy:/opt# docker commit 9448eb29f64e new_nginx:v1
sha256:885f36e25bdfc0dcff244ab96c0c6f4d4dd4f2e11fa7b1e38e2014e66070edac
root@huhy:/opt# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
new_nginx    v1        885f36e25bdf   5 seconds ago   192MB
nginx        latest    60c8a892f36f   7 weeks ago     192MB
  • 容器导出为快照:docker export
    Docker 支持将容器完整导出为文件快照,这个方式更适合迁移,可以间接保存所有数据
root@huhy:/opt# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
9448eb29f64e   nginx     "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   80/tcp    elated_beaver
root@huhy:/opt# docker export  -o nginx_test.tar 9448eb29f64e
root@huhy:/opt# cat nginx_test.tar | docker import - my_nginx_image:latest
sha256:6bf3501bd2b49601f158c5905d4eae05f135c19eb3a89fd9f201284a7153bf28
root@huhy:/opt#
root@huhy:/opt# docker images
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
my_nginx_image   latest    6bf3501bd2b4   17 seconds ago   190MB
new_nginx        v1        885f36e25bdf   8 minutes ago    192MB
nginx            latest    60c8a892f36f   7 weeks ago      192MB

使用 docker commit:

  • 在容器中做了修改(例如安装了软件、修改配置文件),希望将这些修改保存为镜像,供后续使用。
    快速创建一个基于现有容器的自定义镜像。
    希望能够在以后使用该镜像启动新容器,并保留容器的所有修改。

使用 docker export:

  • 需要导出容器的文件系统以便迁移到其他地方(例如,将容器的文件系统导出为 tar 包,并上传到另一个机器上)。
    只关心容器内的数据,不关心容器的配置。
    备份容器的文件系统内容,但不需要容器的运行时配置。

docker仓库

Docker仓库是用于存储和管理Docker镜像的地方,可以是公共的也可以是私有的。通过Docker仓库,开发者可以方便地上传、下载和共享Docker镜像。常见的Docker仓库包括Docker Hub、Harbor、 Google ContainerRegistry(GCR)、Amazon Elastic ContainerRegistry(ECR)和 Azure ContainerRegistry(ACR)。这些仓库支持镜像的版本控制存储、分发,通常还提供镜像扫描、加密、权限管理等安全功能

Harbor官网

配置最新harbor,安装要求:docker 20.10.10-ce+ and docker-compose 1.18.0+ .

在这里插入图片描述

tar -xf harbor-offline-installer-v2.11.2.tgz
root@huhy:~# cd harbor/
root@huhy:~/harbor# ls
common.sh  harbor.v2.11.2.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

在 Docker 20.10 及更高版本中,Docker 引入了 docker compose 作为一个插件命令,逐渐取代了 docker-compose。这个命令作为 Docker CLI(命令行界面)的一部分,允许直接通过 docker 命令来管理 Docker Compose 功能,而不再需要单独安装docker-compose 工具

root@huhy:~/harbor# docker compose version
Docker Compose version v2.29.7

配置daemon

vi /etc/docker/daemon.json
{"registry-mirrors": ["https://o90diikg.mirror.aliyuncs.com"],"insecure-registries" : ["0.0.0.0/0"]
}
systemctl daemon-reload
systemctl restart docker

修改yml

mv harbor.yml.tmpl harbor.yml

yml文件官网配置详解

vi harbor.yml

修改为本机IP,并注释https

hostname: 192.168.200.160# http related config
http:# port for http, default is 80. If https enabled, this port will redirect to https portport: 80# https related config
#https:# https port for harbor, default is 443# port: 443# The path of cert and key files for nginx#certificate: /your/certificate/path#private_key: /your/private/key/path# enable strong ssl ciphers (default: false)# strong_ssl_ciphers: false

使用默认启动

./install.sh

启动harbor时可带一些可选参数

--with-trivy             # 启用 Trivy 漏洞扫描
--with-clair             # 启用 Clair 漏洞扫描
--with-notary            # 启用镜像签名与验证(Notary)
--with-chartmuseum       # 启用 Helm Chart 仓库
--with-registry          # 启用 Docker 镜像仓库
--with-database          # 启用数据库服务(通常是 PostgreSQL)
--with-redis             # 启用 Redis 服务
--with-log               # 启用日志记录
--with-https             # 启用 HTTPS 配置
--with-clair-scanner     # 启用 Clair 扫描器
--with-clair-metadata    # 启用 Clair 元数据
--with-jobservice        # 启用任务服务
--with-core              # 启用 Harbor 核心服务
--with-portal            # 启用 Harbor Web UI

界面访问:IP(admin/Harbor12345)

在这里插入图片描述

在这里插入图片描述

界面创建公开项目

在这里插入图片描述

查看推送命令

在这里插入图片描述

推送镜像:打标签

root@huhy:~# docker images
REPOSITORY                      TAG       IMAGE ID       CREATED       SIZE
goharbor/harbor-exporter        v2.11.2   520de0cd30c7   10 days ago   108MB
goharbor/redis-photon           v2.11.2   bb0d92ddf3ec   10 days ago   165MB
goharbor/trivy-adapter-photon   v2.11.2   0962772f9c8f   10 days ago   347MB
goharbor/harbor-registryctl     v2.11.2   075c10d45191   10 days ago   162MB
goharbor/registry-photon        v2.11.2   1365718c5208   10 days ago   84.8MB
goharbor/nginx-photon           v2.11.2   2949037133e7   10 days ago   154MB
goharbor/harbor-log             v2.11.2   9ae20475f5ca   10 days ago   163MB
goharbor/harbor-jobservice      v2.11.2   8dbbe22ef281   10 days ago   159MB
goharbor/harbor-core            v2.11.2   6c2be6bdb874   10 days ago   185MB
goharbor/harbor-portal          v2.11.2   a3440cd04321   10 days ago   162MB
goharbor/harbor-db              v2.11.2   a5fc5485967b   10 days ago   271MB
goharbor/prepare                v2.11.2   74c41ed4e2a9   10 days ago   205MB
root@huhy:~# docker tag goharbor/prepare:v2.11.2 192.168.200.160/test/goharbor/prepare:test

登录harbor

root@huhy:~# docker login -u "admin" -p "Harbor12345" "192.168.200.160"
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-storesLogin Succeeded
root@huhy:~#
root@huhy:~# docker push 192.168.200.160/test/goharbor/prepare:test
The push refers to repository [192.168.200.160/test/goharbor/prepare]
c6844997789a: Pushed
ee793768fa5f: Pushed
659dc40ce3b7: Pushed
029c27b3f91b: Pushed
7db7ce7738f9: Pushed
771d6693db72: Pushed
9c15ef707b0c: Pushed
e8d8565c9983: Pushed
faebe453cc4b: Pushed
7e3e085aad00: Pushed
test: digest: sha256:3761801ca8f76e7df2ab1c4f7c35913cf0540a3d34510cb54274939568bcc346 size: 2413
root@huhy:~#

界面查看镜像已经推送成功

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/478631.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《用Python画蔡徐坤:艺术与编程的结合》

简介 大家好!今天带来一篇有趣的Python编程项目,用代码画出知名偶像蔡徐坤的形象。这个项目使用了Python的turtle库,通过简单的几何图形和精心设计的代码来展示艺术与编程的结合。 以下是完整的代码和效果介绍,快来试试看吧&…

网络层协议IP

对于网络层我们直接通过IP协议来了解其内容 一.IP协议 首先我们先来了解几个概念: 主机:配有IP地址,但是不进行路由控制的设备 路由器:配有IP地址,同时进行路由控制的设备 节点:主机和路由器的统称 所以现在…

国土安全部发布关键基础设施安全人工智能框架

美国国土安全部 (DHS) 发布建议,概述如何在关键基础设施中安全开发和部署人工智能 (AI)。 https://www.dhs.gov/news/2024/11/14/groundbreaking-framework-safe-and-secure-deployment-ai-critical-infrastructure 关键基础设施中人工智能的角色和职责框架 https:/…

Windows系统电脑安装TightVNC服务端结合内网穿透实现异地远程桌面

文章目录 前言1. 安装TightVNC服务端2. 局域网VNC远程测试3. Win安装Cpolar工具4. 配置VNC远程地址5. VNC远程桌面连接6. 固定VNC远程地址7. 固定VNC地址测试 前言 在追求高效、便捷的数字化办公与生活的今天,远程桌面服务成为了连接不同地点、不同设备之间的重要桥…

lua除法bug

故事背景,新来了一个数值,要改公式。神奇的一幕出现了,公式算出一个非常大的数。排查是lua有一个除法bug,1除以大数得到一个非常大的数。 function div(a, b)return tonumber(string.format("%.2f", a/b)) end print(1/73003) pri…

洛谷 B3635 硬币问题 C语言 记忆化搜索

题目: https://www.luogu.com.cn/problem/B3635 用贪心可以但是会有测试点不过。比如15,11111115.或者55515,如果你是贪心把最大值的硬币放在第一个,那么这个测试点就错误了。用记忆化搜索可以,因为贪心只能测一次,记…

【数据结构与算法】合并链表、链表分割、链表回文结构

主页:HABUO🍁主页:HABUO 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 1.合并链表 题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链…

NuGet如何支持HTTP源

今天是2024年11月21号,最近更新了VisualStudio后发现HTTP的包源已经默认禁止使用了,生成时会直接报错。如下图: 官方也明确指出了要想使用HTTP包源的解决办法,这里就简单总结一下。 一、全局配置 1、全局NuGet包的配置文件路径在…

ArcGIS API for Javascript学习

一、ArcGIS API for Javascript 介绍 ArcGIS API for Javascript 是由美国 Esri 公司推出,跟随ArcGIS 9.3 同时发布的,是Esri 基于dojo 框架和 REST 风格实现的一套编程接口。通过 ArcGIS API for Javascript可以对ArcGIS for Server 进行访问&#xff…

React表单联动

Ant Design 1、dependencies Form.Item 可以通过 dependencies 属性,设置关联字段。当关联字段的值发生变化时,会触发校验与更新。 一种常见的场景:注册用户表单的“密码”与“确认密码”字段。“确认密码”校验依赖于“密码”字段&#x…

Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序

在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序 IntelliJ IDEA 是一个用 Java 编写的集成开发环境 (IDE)。它用于开发计算机软件。此 IDE 由 Jetbrains 开发,提供 Apache 2 许可社区版和商业版。它是一种智能的上下文感知 IDE,可用于在各种应用程序…

丹摩征文活动|实现Llama3.1大模型的本地部署

文章目录 1.前言2.丹摩的配置3.Llama3.1的本地配置4. 最终界面 丹摩 1.前言 Llama3.1是Meta 公司发布的最新开源大型语言模型,相较于之前的版本,它在规模和功能上实现了显著提升,尤其是最大的 4050亿参数版本,成为开源社区中非常…

STM32F103外部中断配置

一、外部中断 在上一节我们介绍了STM32f103的嵌套向量中断控制器,其中包括中断的使能、失能、中断优先级分组以及中断优先级配置等内容。 1.1 外部中断/事件控制器 在STM32f103支持的60个可屏蔽中断中,有一些比较特殊的中断: 中断编号13 EXTI…

docker run m3e 配置网络,自动重启,GPU等 配置渠道要点

启动命令: docker run -d --restart always -p 6008:6008 --gpus all --name m3e --network fastgpt_fastgpt stawky/m3e-large-api 配置渠道m3e base url要像我这样填写才行,不然回出问题 模型要选m3e 密钥填:sk-aaabbbcccdddeeefffggghhhi…

ubuntu24挂载硬盘记录

1、显示硬盘及所属分区情况。在终端窗口中输入如下命令: sudo fdisk -l 找到自己硬盘的分区 我的地址/dev/sda 2、显示硬盘及所属分区情况。在终端窗口中输入如下命令,格式化自己硬盘: sudo mkfs -t ext4 /dev/sda 3、在终端窗口中输入如下…

加菲工具 - 好用免费的在线工具集合

加菲工具 https://orcc.online AI 工具 加菲工具 集合了目前主流的,免费可用的ai工具 文档处理 加菲工具 pdf转word、office与pdf互转等等工具都有链接 图片图标 加菲工具 统计了好用免费的在线工具 编码解码 加菲工具 base64编码解码、url编码解码、md5计算…

网络安全与加密

1.Base64简单说明描述:Base64可以成为密码学的基石,非常重要。特点:可以将任意的二进制数据进行Base64编码结果:所有的数据都能被编码为并只用65个字符就能表示的文本文件。65字符:A~Z a~z 0~9 / 对文件进行base64编码…

Easyexcel(6-单元格合并)

相关文章链接 Easyexcel(1-注解使用)Easyexcel(2-文件读取)Easyexcel(3-文件导出)Easyexcel(4-模板文件)Easyexcel(5-自定义列宽)Easyexcel(6-单…

三种蓝牙架构实现方案

一、蓝牙架构方案 1、hostcontroller双芯片标准架构 手机里面包含很多SoC或者模块,每颗SoC或者模块都有自己独有的功能,比如手机应用跑在AP芯片上,显示屏,3G/4G通信,WiFi/蓝牙等都有自己专门的SoC或者模块&#xff0…

docker 容器运行Ruoyi-cloud

目录 1,linux系统安装openjdk1.8,mvn,dokcer,node,git 2,拉取代码 1)查看gitee仓库地址 2)创建/app文件夹,进入app目录 3)clone代码 4)修改配置文件中nacos地址 3,构建项目 1&…