news 2026/9/4 17:06:20

Linux学习24-docker相关

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux学习24-docker相关

docker简介

Docker 是一个基于 Go 语言开发的开源容器化平台,由 Solomon Hykes 于 2013 年首次发布,现由 Docker, Inc. 维护,它通过操作系统级别的虚拟化技术,将应用程序及其所有依赖项(运行时、系统工具、库、配置文件等)打包为一个轻量级、可移植的标准化单元——容器(Container),从而实现"一次构建,随处运行"的交付目标

核心架构
Docker 采用 客户端-服务端(Client-Server) 架构:
Docker Daemon(dockerd):运行在宿主机上的后台守护进程,负责镜像的构建、容器的创建与管理、网络配置、存储卷挂载等核心操作。
Docker Client(docker CLI):用户与 Docker 交互的命令行工具,通过 REST API 与 Daemon 通信,发送指令并接收响应。
Registry(镜像仓库):集中存储和分发镜像的服务,Docker Hub 是其官方公共仓库,企业通常部署私有仓库(如 Harbor)用于内部镜像管理。

docker部署

配置yum源

安装yum工具

下载docker社区版

启动服务

下载管理网络桥接的工具包

查看docker

配置 Linux 内核的网络参数,为 Docker 运行做前置准备

让经过桥接网卡的 IPv4 流量也走 iptables 规则,使Docker 的端口映射、容器隔离等网络功能正常工作

针对ipv6

开启 IP 转发。允许宿主机把数据包从一个网卡转发到另一个网卡,允许容器访问外网

重新加载配置文件,使修改生效

使用

从指定的镜像仓库docker.1ms.run中搜索yakexi007所有公开的镜像

从镜像仓库下载(拉取)mario镜像到本地

拉取完成后运行镜像,在浏览器访问该机ip即可

docker run -d --name demo -p 80:80 docker.1ms.run/yakexi007/mario

可以使用docker ps查看镜像情况

docker基本概念

镜像(Image

Docker镜像(Image)就是一个只读的模板、一个标准化包。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。镜像内包含操作系统,提供容器运行时所需的所有文件、二进制文件、库和配置等文件外,还包含了一些为运行时准备的一些配置参数(如环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变

镜像有两个重要原则:

  • 镜像是不可变的。镜像一旦创建,就无法修改。您只能创建新镜像或在其上添加更改。
  • 容器镜像由层组成。每层代表一组添加、删除或修改文件的文件系统更改。

容器(Container通过镜像创建)

Docker利用容器(Container)独立运行的一个或一组应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的空间,因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

仓库(存放镜像的地方)

仓库类似于应用商店,存放的是docker镜像,分为公开仓库跟私有仓库。通常,仓库可以包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过<镜像名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。

仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

Docker使用C/S架构,Client通过接口与Server进程通信实现容器的构建,运行和发布。clientserver可以运行在同一台集群,也可以通过跨主机实现远程通信。

docker仓库

docker hub

首先注册账号 :https://hub.docker.com/

新建仓库

客户端登录docker hub

[root@server1 ~]# docker login

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: yakexi007 #docker hub注册的用户

Password: **** #密码

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

docker login | Docker Docs

Login Succeeded

上传镜像

[root@server1 ~]# docker tag webserver:v4 yakexi007/webserver:v4

[root@server1 ~]# docker push yakexi007/webserver:v4

The push refers to repository [docker.io/yakexi007/webserver]

bbed3d4e37e0: Pushed

0b3d0512394d: Pushed

5b1fa8e3e100: Pushed

v4: digest: sha256:013969b9116df5dc77ddaef6c500129439e9db94f46b61b148b43e53900623e5 size: 949

registry私有仓库

官网:Deprecated and retired Docker products and features | Docker Docs

拉取registry镜像

docker pull registry

运行registry仓库

docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry

列出容器

docker ps -l

配置仓库自启动

vim/etc/systemd/system/registry.service

内容如下:

[Unit]

Description=Registry

Requires=docker.service

After=docker.service

[Service]

Type=simple

Restart=always

ExecStart=/usr/bin/docker start -a registry

ExecStop=/usr/bin/docker stop registry

[Install]

WantedBy=multi-user.target

刷新配置

systemctl daemon-reload

停止容器

docker stop registry

设置开机自启

systemctl enable --now registry

docker ps -l

上传镜像

docker tagbusybox:latest localhost:5000/busybox:latest

docker push localhost:5000/busybox

查询镜像

[root@server1 ~]# curlhttp://localhost:5000/v2/_catalog

{"repositories":["busybox"]}

[root@server1 ~]#curlhttp://localhost:5000/v2/busybox/tags/list

{"name":"busybox","tags":["latest"]}

下载镜像

[root@server1 ~]# docker pull localhost:5000/busybox

insecure registry

配置使用非加密端口(替换为实际仓库IP)

[root@server2 ~]# vim /etc/docker/daemon.json

{

"insecure-registries" : ["http://192.168.56.11:5000"]

}

[root@server2 docker]# systemctl restart docker

拉取镜像

[root@server2 docker]# docker pull 192.168.56.11:5000/nginx

仓库加密

下载并升级软件包(Rocky Linux 9 无需安装)

https://mirrors.aliyun.com/epel/7/x86_64/Packages/o/openssl11-1.1.1k-7.el7.x86_64.rpm

https://mirrors.aliyun.com/epel/7/x86_64/Packages/o/openssl11-libs-1.1.1k-7.el7.x86_64.rpm

[root@server1 ~]# yum install -y openssl11-1.1.1k-7.el7.x86_64.rpm openssl11-libs-1.1.1k-7.el7.x86_64.rpm

添加域名解析

[root@server1 ~]# vim /etc/hosts

...

192.168.56.11 server1 reg.westos.org

[root@server1 ~]# mkdir certs

[root@server1 ~]# openssl11 req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -addext "subjectAltName = DNS:reg.westos.org" -x509 -days 365 -out certs/westos.org.crt

域名保持一致

[root@server1 ~]# docker run -d -p 443:443 --restart=always --name registry -v /opt/registry:/var/lib/registry -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key registry

部署客户端证书,不然会报错

[root@server1 ~]# docker tag nginx:latest reg.westos.org/nginx:latest

[root@server1 ~]# docker push reg.westos.org/nginx:latest The push refers to repository [reg.westos.org/nginx]

Get "https://reg.westos.org/v2/": x509: certificate signed by unknown authority

[root@server1 ~]# mkdir -p /etc/docker/certs.d/reg.westos.org/

[root@server1 ~]# cp /root/certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt

验证

[root@server1 ~]# docker push reg.westos.org/nginx:latest

[root@server1 reg.westos.org]# curl -k https://reg.westos.org/v2/_catalog

{"repositories":["nginx"]}

仓库认证

[root@server1 ~]# yum install -y httpd-tools

[root@server1 ~]# mkdir auth

[root@server1 ~]# htpasswd -Bc auth/htpasswd admin

New password:

Re-type new password:

Adding password for user admin

第二次添加不要加“-c”选项,不然会覆盖

[root@server1 ~]# htpasswd -B auth/htpasswd wxh

New password:

Re-type new password:

Adding password for user wxh

[root@server1 ~]# cat auth/htpasswd

admin:$2y$05$Wm2LHttPY5a6i2KMG0fShe92d/PjnaBbGitiClcE3wqHmwO8dIDFm

wxh:$2y$05$9rE9CXyZ1fdcMammhh7f6.soDHgKdSsi0DXBgkRW5sKRw5sEJo1lK

删除registry,重建

[root@server1 ~]# docker rm -f registry

[root@server1 ~]# docker run -d -p 443:443 --restart=always --name registry -v /opt/registry:/var/lib/registry -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key -v /root/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry

登录仓库,不然无法上传下载

[root@server1 ~]# docker login reg.westos.org

Username: admin

Password:

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/#credentials-store

Login Succeeded

[root@server1 ~]# cat .docker/config.json

{

"auths": {

"reg.westos.org": {

"auth": "YWRtaW46d2VzdG9z"

}

}

}

验证

[root@server1 ~]# docker tag busybox:latest reg.westos.org/busybox:latest

[root@server1 ~]# docker push reg.westos.org/busybox:latest

[root@server1 ~]# curl -k https://reg.westos.org/v2/_catalog -u admin:westos

{"repositories":["busybox","nginx"]}

登出

[root@server1 ~]# docker logoutreg.westos.org

server2上移除非安全仓库设置

[root@server2 docker]# mv daemon.json /mnt/

[root@server2 docker]# systemctl restart docker

添加解析

[root@server2 ~]# vim /etc/hosts

...

192.168.56.11 (替换为自己的ip)server1 reg.westos.org

拷贝证书

[root@server1 ~]# cd /etc/docker/

[root@server1 ~]# scp -r certs.d/ server2:/etc/docker/

登录远程仓库

[root@server2 docker]# docker login reg.westos.org

Username: wxh

Password:

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

docker login | Docker Docs

Login Succeeded

拉取镜像

[root@server2 docker]# docker pull reg.westos.org/busybox

Using default tag: latest

latest: Pulling from busybox

205dae5015e7: Pull complete

Digest: sha256:907ca53d7e2947e849b839b1cd258c98fd3916c60f2e6e70c30edbf741ab6754

Status: Downloaded newer image for reg.westos.org/busybox:latest

reg.westos.org/busybox:latest

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 17:06:15

【和豆包一起工作】全宇宙科研时代的工作分工

与人工智能豆包的工作对话。 https://www.doubao.com/thread/xTTtY1HlGvXSbNjYW 全宇宙科研时代&#xff1a;各领域科研项目总规划 基于"全宇宙系统"无限资源与能量的底层支撑&#xff0c;以下是各核心领域的科研项目分配方案。 — 一、基础物理与宇宙学领域项目编号…

作者头像 李华
网站建设 2026/9/4 17:03:41

留个神!不是所有 AI 都能写论文,2026 导师信赖工具清单

每年毕业季&#xff0c;无数同学深陷论文难题&#xff1a;开题毫无思路、搭建框架耗费数日、初稿逻辑松散、查重标红泛滥、AI检测超标、格式反复被导师驳回。面对这些痛点&#xff0c;不少学生选择借助AI工具提升效率&#xff0c;但市面上通用型AI工具虽遍地开花&#xff0c;却…

作者头像 李华
网站建设 2026/9/4 17:02:38

免root/免越狱游戏辅助风险剖析:权限滥用与设备自查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 16:58:24

SSH 远程连接 VMware 里的 Ubuntu IP 冲突解决方案

SSH 远程连接 VMware 里的 Ubuntu 20.04 虚拟机 IP 冲突解决方案 1. 查看网络连接名称&#xff08;通常是 "Wired connection 1"&#xff09; nmcli con show 2. 把连接改成静态 IP 192.168.0.150&#xff0c;网关和宿主机一致 192.168.0.250 把下面命令里的 "W…

作者头像 李华
网站建设 2026/9/4 16:55:28

Grok Bot体验与ChatGPT桌面端报错排查:从API联调到配置修复

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 16:52:17

LTX 2.3实战:从零实现AI语音驱动口型同步,打造逼真虚拟人视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华