docker - 镜像仓库
本文详细介绍了在Ubuntu和CentOS系统上安装Docker的完整步骤,包括环境检查、旧版本卸载、源配置、安装及验证方法。同时讲解了Docker镜像仓库的结构与管理命令(login/pull/push/search/logout),以及常用镜像和容器操作指令。此外,还提供了搭建Nginx服务的实践示例,包括镜像选取、容器运行和页面修改。最后介绍了BusyBox工具的使用及如何将镜像推送到个人仓
Docker安装
Ubuntu安装
1、确定cpu型号,如果是 arm 一般会显示 aarch64
#查看cpu架构信息
uname -a
docker支持的型号
ARM 和 X86_64
2、确定操作系统版本
#查看操作系统版本
cat /etc/*release*
docker支持的Ubuntu系统版本
Ubuntu Kinetic 22.10
Ubuntu Jammy 22.04 (LTS)
Ubuntu Focal 20.04 (LTS)
Ubuntu Bionic 18.04 (LTS)
3、卸载历史版本
执行docker version。如果存在就卸载历史版本,如果不存在 就不用这步操作
#卸载旧版本
apt-get remove docker docker-engine
现在输入docker version,如果依旧还有docker,继续执行下面命令
#卸载历史版本
apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y
执行 ls /var/lib/docker/
检查docker的目录,如果存在,就把目录进行删除执行命令
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
4、配置docker源
#curl 命令安装
sudo apt install curl -y
#创建 gpg key 目录
sudo mkdir -m 0755 -p /etc/apt/keyrings
#下载 gpg key
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
#配置源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新源
apt update
5、执行安装命令
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
6、自动启动配置
#配置加载
sudo systemctl daemon-reload
#启动服务
sudo systemctl start docker
#开启 开机自启动
sudo systemctl enable docker
#查看服务状态
sudo systemctl status docker
7、检查安装结果查看版本
#查看docker版本
docker version
#更详细查看docker信息
docker info
8、执行 hello-world 可以看到 Hello from Docker,表面 docker 服务正常
sudo docker run hello-world
修改 镜像源
情况:下载镜像慢,调整下载的镜像源
创建或修改/etc/docker/daemon.json文件,修改为如下内容:
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
配置修改之后,加载配置
#加载配置
sudo systemctl daemon-reload
#重启服务
sudo systemctl restart docker
可以执行 docker info 命令进行检查,是否修成功。
目录修改
情况:下载镜像的目录存储不了镜像了,需要更大的磁盘空间,调整下载镜像的目录位置
#假定我们磁盘的大的目录为 /data
mkdir -p /data/var/lib/docker
# 编辑配置文件
vi /etc/docker/daemon.json
# 输入下面的 json
{
"data-root": "/data/var/lib/docker"
}
# 加载配置
sudo systemctl daemon-reload
# 重启 docker
sudo systemctl restart docker
#查看 docker 修改信息
docker info
Centos安装
1、确认操作系统
cat /etc/*release*
支持的操作系统版本
CentOS 7 -- 停止更新已经不再支持
CentOS 8 (stream)
CentOS 9 (stream)
2、确认cpu架构
uname -a
支持的cpu架构
ARM/X86_64
3、卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
卸载历史版本
#删除机器上的包
yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
#执行卸载
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
#如果目录有进行过修改,修改后的目录也需要进行删除
4、配置仓库
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5、安装最新版本
sudo yum install -y docker-ce
6、启动docker
#配置加载
sudo systemctl daemon-reload
#启动服务
sudo systemctl start docker
#开启 开机自启动
sudo systemctl enable docker
#查看服务状态
sudo systemctl status docker
7、检查安装结果查看版本
#查看版本
docker version
#查看docker更多信息
docker info
8、执行 hello-world 可以看到 Hello from Docker,表面 docker 服务正常
docker run hello-world
效果如下:

修改镜像源
创建或修改/etc/docker/daemon.json文件,修改为如下内容:
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
配置修改之后,加载配置
#加载配置
sudo systemctl daemon-reload
#重启服务
sudo systemctl restart docker
可以使用docker info查看是否修改成功
目录修改
#假定我们磁盘的大的目录为 /data
mkdir -p /data/var/lib/docker
# 编辑配置文件
vi /etc/docker/daemon.json
# 输入下面的 json
{
"data-root": "/data/var/lib/docker"
}
# 加载配置
sudo systemctl daemon-reload
# 重启 docker
sudo systemctl restart docker
#查看 docker 修改信息
docker info
镜像仓库
镜像仓库(Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力, 建立了仓库的索引。
镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一 个或多个镜像,镜像通过镜像名称和标签 (Tag)来区分。
镜像中包含两部分,一部分为元数据,用于描述镜像属性,另一部分是实际存储数据的blob
镜像仓库结构如下

• 镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确 定一个镜像仓库如 hub.docker.com;一个 Registry 中可以存在多个 Repository·Repository 可分为“顶层仓库”和“用户仓库”;·用户仓库名称格式为“用户名/仓 库名”·每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像
• Repository: ·由某特定的 docker 镜像的所有迭代版本组成的镜像仓库
• 镜像名称(name)+标签(tag):如 nginx:latest
• 认证能力:提供用户注册,登录、登出能力
• 索引:提供镜像的索引信息,方便检索
一个容器镜像包含了两个部分,一个是元数据,其实就是由 dockerfile 构建出来的描 述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的 checksum 这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面, 就是在一个一个的 blob 里面,真正占有空间的就是这些 blob。
镜像仓库命令
| 命令 | 别名 | 功能 |
| docker login | 登录仓库 | |
| docker pull |
docker image pull
|
拉取镜像 |
| docker push |
docker image push
|
推送镜像 |
| docker search | 查找镜像 | |
| docker logout | 登出仓库 |
docker login
功能
登陆到一个 Docker 镜像仓库
语法
docker login [OPTIONS] [SERVER]
参数
-u :登陆的用户名
-p :登陆的密码
比如
docker login -u 用户名 -p 密码

docker pull
功能
从镜像仓库中拉取或者更新指定镜像
语法
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
别名 docker image pull
参数
-a :拉取所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启
比如
docker pull nginx:1.23.3

docker push
功能
将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
语法
docker push [OPTIONS] NAME[:TAG]
别名 docker image push
参数
-a :推送所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启
比如
docker push myapache:v1

查看仓库

docker search
功能
从 Docker Hub 查找镜像
语法
docker search [OPTIONS] TERM
参数
--no-trunc :显示完整的镜像描述;
-f <过滤条件>:列出收藏数不小于指定值的镜像。
比如
#从 Docker Hub 查找所有镜像名包含 nginx,并且 star 数大于 10 的镜像
docker search -f stars=10 nginx

docker logout
功能
登出一个 Docker 镜像仓库
语法
docker logout [SERVER]
比如
docker logout
镜像命令(部分)
docker images
功能
列出本地镜像。
语法
docker images [OPTIONS] [REPOSITORY[:TAG]]
别名 docker image ls, docker image list
参数
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests :显示镜像的摘要信息
-f :显示满足条件的镜像;
--format :指定返回值的模板文件(json、table);
--no-trunc :显示完整的镜像信息;
-q :只显示镜像 ID。
比如
#列出本地全部镜像
docker images
#列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。
docker images ubuntu

docker image inspect
功能
查看镜像详细信息
语法
docker image inspect [OPTIONS] IMAGE [IMAGE...]
比如
#查看镜像详细信息
docker images inspect nginx:1.23.3

docker tag
功能
标记本地镜像,将其归入某一仓库。简单说就是给本地已存在的镜像再起一个名字,方便后续push、run或自己管理版本
语法
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
别名 docker image tag
比如
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04

让后将打完标签之后的镜像推送到仓库

仓库中就有了

容器命令(部分)
docker run
功能
创建一个新的容器并运行一个命令
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
别名 docker container run
参数
-d: 后台运行容器,并返回容器 ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
-h "mars": 指定容器的 hostnam
-e username="ritchie": 设置环境变量;
--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行;
-m :设置容器使用内存最大值;
--network="bridge": 指定容器的网络连接类型;
--link=[]: 添加链接到另一个容器;
--volume , -v: 绑定一个卷
--rm :shell 退出的时候自动删除容器
比如
#使用 docker 镜像 nginx:latest 以后台模式启动一个容器,并将容器命名为 mynginx。 docker run --name mynginx -d nginx:latest
#使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主 机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
docker ps
功能
列出容器
语法
docker ps [OPTIONS]
别名 docker container ls, docker container list, docker container ps
参数
-a :显示所有的容器,包括未运行的
-f :根据条件过滤显示的内容
--format :指定返回值的模板文件。如 json 或者 table
-l :显示 latest 的容器。
-n :列出最近创建的 n 个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
比如
docker ps -a

搭建一个nginx服务
Nginx 作为 Web 服务器可以向各种浏览器等客户端提供浏览服务,比如我们通过手机、 电脑、平板可以访问百度来实现对 web 服务器的访问
另外 Nginx 可以作为反向代理进行负载均衡的实现。
正向代理和反向代理

正向代理:由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助 VPN 来实现,这就 是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客 户端是知道目标的,而目标是不知道客户端是通过 VPN 访问的。
反向代理:当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的 反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。

centos安装nginx
1、检查是否存在nginx
执行命令 ps -ef | grep nginx
2、移除nginx
如果存在就执行卸载 yum remove nginx
3、安装nginx
执行命令
配置源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
构建缓存
yum makecache
下载nginx
yum install -y nginx
4、启动和关闭nginx服务
查看nginx是否启动
ps -ef | grep nginx
如果没有启动,执行命令启动
systemctl start nginx
然后再次查看nginx是否启动
ps -ef | grep nginx
如果需要停掉nginx服务,可以使用
kill nginx服务进程
或者使用systemctl stop nginx
5、查看默认配置位置
默认配置
cat /etc/nginx/nginx.conf
首页位置
ls /usr/share/nginx/html
ubuntu安装nginx
1、检查服务器上有没有nginx
执行命令 ps -ef | grep nginx
2、如果有nginx,则需要进行卸载
查看nginx是否通过源安装
dpkg -l nginx
如果有内容就说明是通过apt源的方式进行的安装,如果使用remove卸载,只写卸载掉了软件包,但是配置并没有清理干净
执行命令
apt --purge autoremove nginx 能够干净的清理
3、安装nginx
执行命令
更新源
apt update
安装
apt install nginx -y
4、查看nginx是否启动
执行命令
ps -ef | grep nginx
如果已经启动了,需要手动启动,可以先关了,再进行手动启动
使用systemctl stop nginx 关掉nginx服务

然后在web端访问服务的ip,效果如下

5、修改首页内容
nginx的默认配置位置
cat /etc/nginx/nginx.conf
对这两个路径进行访问,第二个路径是一个软链接,编辑其内容,将/var/www/html/ 改为/usr/share/nginx/html
nginx主页位置
/usr/share/nginx/html
编辑index.html进行修改
修改效果如下

查找nginx镜像
选取一个认证过的,带版本号,而且是没有技术漏洞的镜像作为基础镜像。这里选取nginx:1.24.0作为基础镜像
1、拉取镜像
docker pull nginx:1.24.0
2、查看镜像的详细信息
docker image inspect nginx:1.24.0

3、启动nginx
docker run -p 8093:80 --name myweb13 -h myweb1.com -e myenv=test -it nginx:1.24.0 bash

这行命令是指宿主机端口8093映射到容器的80端口,容器名为myweb13,容器的hostname为myweb1.com,设置了一个环境变量为myenv=test,并在运行时提供交互式功能和伪终端。执行bash,但是并未启动nginx。需要手动启动

在web端访问

4、调整首页
进入主页目录,执行命令 cd /usr/share/nginx/html/
对主页进行调整,执行命令 echo "hello docker" > index.html

在web端访问

docker hub上创建自己的私有仓库
busybox
BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。BusyBox 包含了一 些简单的工具,例如 ls、cat 和 echo 等等,还包含了一些更大、更复杂的工具,例 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。 简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也 包含了 Linux 系统的自带的 shell。busybox 是一个集成了一百多个最常用 linux 命令和 工具的软件,他甚至还集成了一个 http 服务器和一个 telnet 服务器,而所有这一切功能却 只有区区 1M 左右的大小.因海外带宽较小,我们拉取该镜像推送到自己的仓库。
安装
检查是否存在busybox,如果有就先卸载
卸载命令 apt --purge autoremove busybox
下载busybox
下载命令 wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64 --no-check-certificate
改名,并赋予可执行权限
改名 mv busybox-x86_64 busybox
赋予可执行权限 chmod +x busybox

推送镜像
在上传之前,需要先登录docker
在hub.docker.com上拉取busybox docker pull busybox:1.37.0
对拉取下的busybox标签进行修改 docker tag busybox:1.37.0 hzpxx/hzptest:v1.0
然后再推送至个人仓库 docker push hzpxx/hzptest:v1.0

在hub.docker.com仓库中查看

腾讯云创建自己的私有仓库
阿里云创建自己的私有仓库
更多推荐

所有评论(0)