什么是镜像仓库(docker registry)呢?
docker registry 是负责存储,管理,分发镜像,并且提供了认证能力,建立了仓库的索引。最常用的docker registry就是docker hub了,在docker hub中存在多个镜像仓库(repos),例如nginx,Centos,Ubuntu镜像等等。
首先进来是登录页面,也就是前面提到的docker registry要具有一定的认证能力,如果没有docker hub的账号可以点击右上方的sign up使用邮箱注册。
登录进来点击Explore就可以看到各种的镜像仓库(repos)。
进入到某个具体镜像的仓库中,查看它的tags,所谓的nginx:latest叫作它的镜像名称。
当点击某个镜像名称就会进入到一个新的页面,里面介绍了这个镜像的许多属性信息,这就是某个具体的镜像。
一个镜像对应的可执行文件,是被存储在服务器的磁盘上的,所谓的占用服务器磁盘空间的这些文件叫作blob。
像docker hub这种放在公网上,可供任何人去下载镜像的仓库叫作共有仓库。像国内的阿里云,腾讯云也有其共有仓库。
不对外开放,往往位于私有网络中,只供内部人员使用,这样的仓库叫作私有仓库。
登录到一个镜像仓库
docker login [OPTIONS] [SERVER]
# 常用参数
-u #指定用户名
-p #密码
#docker login 默认登录的是docker hub这个镜像仓库,也可以指定登录其他镜像仓库
登出一个镜像仓库。
docker logout [SERVER]
#如果没有指定,默认登出的是docker hub镜像仓库。
从镜像仓库中拉取某个镜像到本地,前提是登录上了某个镜像仓库(docker login)。
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
#常用选项
-a 拉取一个镜像仓库(repos)中所有版本的镜像
--disable-content-trust :忽略镜像的校验,默认开启
#常用方式
docker pull nginx:1.24.0 #拉取nginx:1.24.0版本到本地
#也可以使用它的签名进行拉取
docker pull nginx@sha256:d2e65182b5fd330470eca9b8e23e8a1a0d87cc9b820eb1fb3f034bf8248d37ee
将本地镜像推送到远程镜像仓库中,前提是登录上了某个镜像仓库(docker login)。
docker push [OPTIONS] NAME[:TAG]
# 常用选项
-a :推送所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启
推送案例
对之前拉取下来的nginx,重新打一个标签,然后推送到远程仓库中。在docker hub中我们可以创建自己的镜像仓库(repos)。
可以在远程镜像仓库中看到刚刚推送的镜像
从镜像仓库中查找镜像
docker search [OPTIONS] TERM
# 常用选项
--no-trunc :显示完整的镜像描述;
-f <过滤条件>:列出收藏数不小于指定值的镜像。
#通常都是登录到docker hub的网站中去查看,而不是使用docker search去搜索
搜索nginx:1.24.0的镜像
显示完整的镜像信息
搜索nginx的所有镜像中stars大于20的镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
#常用参数
-a : 列出本地所有的镜像(含中间映像层,默认情况下,会过滤掉中间映像层)
--digests : 显示出镜像的摘要信息
-f : 筛选出符合条件的镜像
--no-trunc : 显示完整的镜像信息
-q : 只显示镜像id
--format : 指定返回值的模板文件
docker image inspect [OPTIONS] IMAGE [IMAGE...]
#查看镜像的详细信息
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
#给本地镜像打一个标签,让其归属于某一个镜像仓库
1.检查是否已经安装nginx
ps -ef | grep nginx
dpkg -l nginx 查看nginx的软件包
apt --purge autoremove nginx,删除软件包和数据
2.使用apt命令安装nginx,并启动
apt-get install -y nginx # 使用apt源进行安装nginx
#安装好后nginx自动启动
#也可以进行手动启动
nginx
nginx -v #查看nginx属性
3.访问服务器
docker run #创建一个容器并执行一个命令
#常用参数
-d : 后台运行容器,并返回容器id
-i : 以交互式形式启动容器,通常与-t一起使用
-t : 为容器重新分配一个伪终端,通常与-i一起使用
-P : 随机端口映射,容器内部端口随机映射到主机的某个端口
--name="name" : 为容器设定一个name
-h : 指定容器的hostname
-e : 设置容器的环境变量
-m : 设置容器可使用的内存最大值
--link= :添加链接到另一个容器
--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": #绑定容器到指定 CPU运行
--rm : shell退出时自动删除容器
-d:使用docker run启动nginx容器
默认是前台启动一个容器
可以使用docker ps来查看容器
docker run -d 在后台启动一个容器
-P
如果启动一个nginx容器,不与主机的端口打通,在浏览器是访问不到nginx服务器的,因为容器之间网络是隔离的,要想访问到主机内部的容器,就要将主机的端口和容器的端口打通。
docker run -d -P nginx:1.24.0
在后台启动一个nginx容器,并且将容器的80号端口与主机的某个端口打通:
这里是将容器的80号端口与主机的32768号端口打通,所以在浏览器上访问主机的32768号端口就能访问到nginx。
–rm
kill掉之前启动的nginx容器
可以看到不能给容器设定重复的名字,即使之前的容器已经被暂定运行了,这是因为即使一个容器被kill之后,系统仍旧保留着它的信息,docker ps -a可以查询到
--rm就是当某个容器终止后,自动删除容器
–link
启动两个Centos容器,将Centos-2添加链接到Centos-1上:
使用Centos-2容器pingCentos-1容器:
使用Centos-1容器pingCentos-2容器:
发现ping不通,这是因为只是将Centos-2容器添加链接到Centos-1,但是Centos-1并没有添加链接到Centos-2。
docker ps
Centos-2:
Centos-2:
docker ps [OPTIONS]
-a : 显示所有容器,包括未运行的
-f : 根据条件过滤显示的内容
--format : 指定返回的模板文件
-l : 显示最新运行的容器
-n : 显示最近创建的n个容器
--no-trunc : 不截断的输出信息
-q : 静默模式,只输出容器的编号
-s : 显示容器可写层和只读层的大小
什么是busybox?
BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一
些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例
grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。
简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也
包含了 Linux 系统的自带的shell。busybox是一个集成了三百多个最常用linux命令和
工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却
只有区区1M左右的大小.因海外带宽较小,我们拉取该镜像推送到自己的仓库。
使用docker search 查询镜像时,看到的镜像信息有限,所以一般都是在docker hub中去查看镜像信息。
4.打标签,推送到自己的docker hub私有仓库
创建自己的私有仓库
1.登陆后,在搜索框中搜索容器镜像,选择个人版
2.进入管理控制台,创建个人版实例(只能选择广州)
3.创建命名空间,创建镜像仓库
4.登录腾讯云镜像仓库,将busybox打标签推送到远程仓库
1.搜索容器镜像服务
2.点击管理控制台,创建个人实例
3.设置镜像仓库密码
4.创建命名空间和镜像仓库
5.使用docker login登录到阿里云的镜像仓库,并完成busybox的打包推送