Docker基础——Docker Server安装(ubuntu)和Docker镜像相关命令
目录
安装 docker
Docker Sverver支持的os

Docker Server安装步骤
1、确定 CPU,可以看到我们的是 X86_64,是支持的,如果是 arm 一般会显示aarch64,我们ubuntu是X86架构的

2、配置 docker 下载源
#curl 命令安装
sudo apt install curl -y
#创建 gpg key 目录sudo mkdir -m 0755 -p /etc/apt/keyrings#下载 gpg keycurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpgecho \"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
3、安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
#配置加载
sudo systemctl daemon-reload
#启动服务
sudo systemctl start docker
#开启启动
sudo systemctl enable docker
#查看服务状态
sudo systemctl status docker
5、检查安装版本

Docker 镜像源修改
对于使用 systemd 的系统(Ubuntu 16.04+、Debian 8+、CentOS 7), 如果是腾讯云在配置文件 /etc/docker/daemon.json 中加入
JSON
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
如果是阿里云,因为只对企业开放海外代理,只能找私人的一些开放的源,目前可以使用的源如下:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerhub.timeweb.cloud",
"https://huecker.io"
]
}
重新启动 dockerd:
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker目录修改
Docker 默认的安装目录为/var/lib/docker,这里面会存放很多很多镜像,所以我们在安装的时候需要考虑这个目录的空间,有三种解决方案。
(1)将/var/lib/docker 挂载到一个大的磁盘,这种一般我们能控制挂载目录,像腾讯云这种云厂商在安装 K8s 的节点的时候提供了挂载选项,可以直接挂载这个目录过去
(2)安装之前挂载一个大的磁盘,然后创建一个软链接到/var/lib/docker,这样就自动安装到我们空间比较大的磁盘了
(3)安装了 docker,然后发现忘了配置这个目录,我们需要修改 docker 的配置文件
#假定我们磁盘的大的目录为 /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 状态
sudo systemctl status docker

Docker生态
新时代软件诉求
我们来考虑 2 个问题,Docker 为什么要设计镜像,然后又搭建个 Docker Hub,搞个镜像仓库呢?
我们来看下现在的时代发生了什么
数据量疯狂增长:
随着物联网、边缘计算等智能终端设备不断普及,受到来自物联网设备信号、元数据、娱乐相关数据、云计算和边缘计算的数据增长的驱动,全球数据量呈现加速增长。根据 IDC 分布的《数据时代 2025》预测,全球数据量将从 2018 年的 33ZB 增至 2025年的 175ZB,增长超过 5 倍;中国平均增速快于全球 3%,预计到 2025 年将增至48.6ZB,占全球数据圈的比例由 23.4%提升27.8%。其中,中国企业级数据量将从2015 年占中国数据量的 49%增长到 2025 年的 69%。

处理能力快速增加:
腾讯云全球服务器数量 100w+,数据量 EB+;2020 年阿里云:在全国已建成 5 大超级数据中心,阿里云在全球 22 个地域部署了上百个数据中心,服务器的总规模数已经接近 200 万台。
某省疾控中心疫苗预约系统、全员核酸检测系统、健康码系统共 300 余台服务器,并为核酸检测系统快速扩容计算和存储资源
软件需求爆发式增长:
- 研发模式从瀑布开发演变为敏捷开发,原来 3 个月上一次新功能,现在两周一次,而开发过程中我们也经常遇到需要修改需求,然后变更再发布的情况
- 软件上线有问题需要快速回滚,对软件有着极强的版本管理和回滚诉求。
- 软件的研发人员、研发公司在设计、研发好一款软件的时候,如何方便的共享给他人,而又能快速的使用起来
- 每个项目组使用的语言不一样,需要不同的环境,每个都得搞一套。每次都要一个个完成部署安装,每次都有各种奇怪的问题
Docker 解决方案
云时代需要我们针对这些诉求有一套针对的解决方案。
我们要处理海量的数据,如何处理呢?
购买大量的服务器,并研发对应软件
开发的需求需要频繁的变更上线,如何才能将修改的代码快速的分发到几百或者几千台服务器呢?如何共享软件呢?
搞一个中心仓库,让各个服务器去下载软件包,安装,所以 CentOS 搞了 yum 仓库,docker 设计了镜像仓库,docker hub 是公共的托管仓库。
软件设计好以后,怎么快速安装启动,有问题回滚呢?
将 docker 需要的所有信息设计一套软件格式,把所有的依赖搞进去,并打上版本标签,这样不会换一个服务器各种问题,所以 Docker 设计了镜像。
不同的开发环境怎么搭建呢,一会 java,一会 c++?
docker 设计了镜像来应对,镜像里面存放了需要运行的环境,就像我们的 iPhone 内置 ios,我们的华为 mate 50 内置鸿蒙一样,一条命令就可以完成某个环境的搭建。
Docker Registry(镜像仓库)
什么是 Docker Registry
镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。
镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签 (Tag)来区分。

镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确定一个镜像仓库如 hub.docker.com;一个 Registry 中可以存在多个Repository·Repository 可分为“顶层仓库”和“用户仓库”;·用户仓库名称格式为“用户名/仓库名”·每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像
Repository: ·由某特定的 docker 镜像的所有迭代版本组成的镜像仓库镜像名称(name)+标签(tag):如 nginx:latest
认证能力:提供用户注册,登录、登出能力
索引:提供镜像的索引信息,方便检索
一个容器镜像包含了两个部分,一个是元数据,其实就是由 dockerfile 构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的checksum 这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面,就是在一个一个的 blob 里面,真正占有空间的就是这些 blob。
镜像仓库分类
按是否对外开放划分,也是研发人员常说的
(1)公有仓库:像阿里云、dockerhub 等放到公有网络上,不用登录就可以下载镜像,供大家访问使用
(2)私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。
按供应商和面向群体划分
(1)sponsor(赞助) registry:第三方的 registry,供客户和 docker 社区版使用
(2)mirror(镜像) registry:第三方的 registry,只让客户使用,例如阿里云必须注册才能使用
(3)vendor(供应商) registry:由发布 docker 镜像的供应商提供的 registry,例如像Google 和 Redhat 提供了镜像仓库服务
(4)private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用
镜像仓库工作机制
镜像仓库使用流程 :
- 通过 docker login 登录仓库
- docker pull 拉取需要的镜像
- 通过 dockerfile 或者 commit 等方式制作完镜像通过 docker push 上传到仓库
Docker Hub 是 Docker 提供的托管存储库服务,用于查找容器映像并与您的团队共享。具有以下功能:
(1)个人可以注册私有仓库,能够发布自己的镜像
(2)提供镜像检索能力
(3)提供海量官方和认证组织的镜像
(4)从 GitHub 和 Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub
(5)支持 webhook(webhook 是一种基于 HTTP 的回调函数,发生指定的事件时,服务器会自动将相关的有效负载发送到客户端的 webhook URL。 )
私有仓库
私有镜像仓库则是指部署在公司或组织内部,用于自身应用 Docker 镜像存储、分发的镜像仓库。在构建公司内部使用的自动化发布系统的过程中,从安全的角度出发,应用的打包镜像一般情况下只会被存储在私有镜像仓库中,CI/CD 流程的衔接点也是通过向私有镜像仓库上传镜像和拉取镜像的操作来完成的
镜像仓库命令
docker login
功能:登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 DockerHub
语法:
docker login [OPTIONS] [SERVER]
关键参数:
-u :登陆的用户名
-p :登陆的密码
docker pull
功能 :从镜像仓库中拉取或者更新指定镜像
语法:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
关键参数:
-a :拉取所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启
docker push
功能 :将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
语法:
docker push [OPTIONS] NAME[:TAG]
关键参数:
-a :推送所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启
docker search
功能 :从 Docker Hub 查找镜像,因 docker 网站被封,该命令暂时国内无法实操,需要国外网络联系。
语法:
docker search [OPTIONS] TERM
关键参数:
--no-trunc : 显示完整的镜像描述;-f < 过滤条件 >: 列出收藏数不小于指定值的镜像。
docker logout
功能:登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
语法:
docker logout [SERVER]
镜像命令
docker images
功能 :列出本地镜像
语法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
关键参数:
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests :显示镜像的摘要信息;
-f :显示满足条件的镜像;
--format :指定返回值的模板文件;
--no-trunc :显示完整的镜像信息;
-q :只显示镜像 ID。
docker image inspect
功能 :查看镜像详细信息
语法:
docker image inspect [OPTIONS] IMAGE [IMAGE...]
docker tag
功能 :标记本地镜像,将其归入某一仓库
语法:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
容器命令(run和ps)
docker run
功能:创建一个新的容器并运行一个命令
语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
关键参数:
-d: 后台运行容器,并返回容器 ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
-h "mars": 指定容器的 hostname;
-e username="ritchie": 设置环境变量;
--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行;
-m :设置容器使用内存最大值;
--network="bridge": 指定容器的网络连接类型;
--link=[]: 添加链接到另一个容器;
--volume , -v: 绑定一个卷
--rm :shell 退出的时候自动删除容器
docker ps
功能 :列出容器
语法:
docker ps [OPTIONS]
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。如 json 或者 table
-l :显示 latest 的容器。
-n :列出最近创建的 n 个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
更多推荐




所有评论(0)