您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

Docker应用容器引擎

时间:2023-02-20 14:43:15  来源:今日头条  作者:妮唯伊

Docker应用容器引擎

li_zliang

一、关于Docker理论

1.1 容器和虚拟机

1.2 什么是docker

1.3 Docker的基本概念

1.3.1 Image (镜像)

1.3.2 ContAIner (容器)

1.3.3 Repository (仓库)

1.4 Docker的架构

1.4.1 Docker CLIent

1.4.2 Docker daemon

1.4.3 Docker Image

1.4.4 Docker Registry

1.4.5 Docker Container

1.4.6 Docker组件是如何协作运行容器

二、docker安装(在线安装)

2.1 检查centos内核版本

2.2 查看是否存在docker

2.3 卸载旧版本的docker及相关依赖

2.4 安装依赖包

2.6 安装docker(从源中)

2.7 启动docker并开机启动

三、docker安装(RPM包离线安装)

3.1 检查centos内核版本

3.2 查看是否存在docker

3.3 卸载旧版本的docker及相关依赖

3.4 下载并安装依赖包

3.5 下载并安装docker包

3.6 启动docker并开机启动

3.7 验证是否安装成功

四、docker安装(二进制文件离线安装)

五、docker安装(测试或开发环境的简化安装)

六、docker的使用

6.1 注册Docker Hub

6.2 登陆Docker Hub

6.3 查找镜像

6.3.1 在线查找镜像

6.3.2 docker search命令查找

6.3.3 镜像分类说明

6.4 拉取镜像

6.5 查看镜像

6.6 删除镜像

6.7 国内镜像库/加速器及配置

6.7.1 国内镜像库

6.7.2 国内加速器

6.7.4 命令从加速器地址中拉取镜像(可不用)

6.7.5 配置加速器(Docker版本1.10.0以上)

6.8 推送镜像(创建镜像后)

6.9 自动创建(暂没有搞懂)

七、镜像文件(待续)

7.1 redis(官方)

7.2 Nginx(官方)

7.3 其他

八、创建私有镜像仓库(待续)

九、创建自定义镜像(待续)

9.1 关于DockerFile

9.2 创建镜像

9.3 上传镜像

十、其他(待续)

10.2 常见问题

10.2.1 非root用户权限问题

10.3 参考

一、关于Docker理论

1.1 容器和虚拟机

我们在理解 docker 之前,首先我们得先区分清楚两个概念,容器虚拟机

虚拟机:

我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

容器:

容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。

容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。

1.2 什么是docker

Docker 属于 linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件系统里面。运行这个文件系统,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。

总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

1.3 Docker的基本概念


 

从上图我们可以看到,Docker 中包括三个基本的概念:

 

  1. Image(镜像)
  2. Container(容器)
  3. Repository(仓库)

 

镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。

1.3.1 Image (镜像)

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

1.3.2 Container (容器)

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

由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。

1.3.3 Repository (仓库)

Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry (仓库注册服务器)就是这样的服务。

仓库又可以分为两种形式:

 

  1. public(公有仓库)
  2. private(私有仓库)

 

Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry 。Docker 官方提供了 Docker Registry镜像,可以直接使用做为私有 Registry 服务。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

1.3.4 镜像标签(tag)

为区分一个仓库中的不同镜像(不同镜像版本),Docker Hub引入标签。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签.。

为了方便镜像的查找,同一个镜像可以存在不同的标签。如ubuntu:latest 与 ubuntu:16.04可能具有相同的镜像ID,镜像ID才是镜像的唯一标识。

1.4 Docker的架构


 

Docker 使用 C/S 结构,即客户端/服务器体系结构。 Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。 Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 stock 或网络接口与远程 Docker 服务端进行通信。


 

这张图展示了 Docker 客户端、服务端和 Docker 仓库(即 Docker Hub 和 Docker Cloud ),默认情况下Docker 会在 Docker 中央仓库寻找镜像文件,这种利用仓库管理镜像的设计理念类似于 Git ,当然这个仓库是可以通过修改配置来指定的,甚至我们可以创建我们自己的私有仓库。

Docker 的核心组件包括:

 

  1. Docker Client
  2. Docker daemon
  3. Docker Image
  4. Docker Registry
  5. Docker Container

 

1.4.1 Docker Client

Docker Client ,也称 Docker 客户端。它其实就是 Docker 提供命令行界面 (CLI) 工具,是许多 Docker 用户与 Docker 进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与Docker_Host进行交互。最常用的 Docker 客户端就是 docker 命令,我们可以通过 docker 命令很方便地在 host 上构建和运行 docker 容器。


 

1.4.2 Docker daemon

Docker daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,我们也把它称为守护进程。它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过Docker daemon 内部的一个路由分发调度,由具体的函数来执行请求。

docker daemon包含以下三部分:

 

  1. Docker Server
  2. Engine
  3. Job

 

Docker Daemon 可以认为是通过 Docker Server 模块接受 Docker Client 的请求,并在 Engine 中处理请求,然后根据请求类型,创建出指定的 Job 并运行。 Docker Daemon 运行在 Docker host 上,负责创建、运行、监控容器,构建、存储镜像。

1.4.3 Docker Image

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。我们可将 Docker 镜像看成只读模板,通过它可以创建 Docker 容器。

镜像有多种生成方法:

 

  1. 从无到有开始创建镜像
  2. 下载并使用别人创建好的现成的镜像
  3. 在现有镜像上创建新的镜像

 

我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作 Dockerfile ,通过执行 docker build 命令可以构建出 Docker 镜像。

1.4.4 Docker Registry

Docker registry 是存储 docker image 的仓库,它在 docker 生态环境中的位置如下图所示:


 

运行docker push、docker pull、docker search时,实际上是通过 docker daemon 与 docker registry 通信。

1.4.5 Docker Container

Docker 容器就是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。 Docker Container 提供了系统硬件环境,我们可以使用 Docker Images 这些制作好的系统盘,再加上我们所编写好的项目代码, run 一下就可以提供服务啦。

1.4.6 Docker组件是如何协作运行容器

看到这里,我相信各位读者朋友们应该已经对Docker基础架构已经熟悉的差不多了,我们还记得运行的第一个容器吗?现在我们再通过hello-world这个例子来体会一下 Docker 各个组件是如何协作的。

容器启动过程如下:

 

  1. Docker 客户端执行 docker run 命令
  2. Docker daemon 发现本地没有 hello-world 镜像
  3. daemon 从 Docker Hub 下载镜像
  4. 下载完成,镜像 hello-world 被保存到本地
  5. Docker daemon 启动容器

 

具体过程可以看如下这幅演示图:


 

我们可以通过docker images 可以查看到 hello-world 已经下载到本地


 

我们可以通过docker ps 或者 docker container ls 显示正在运行的容器,我们可以看到, hello-world 在输出提示信息以后就会停止运行,容器自动终止,所以我们在查看的时候没有发现有容器在运行。


 

我们把 Docker 容器的工作流程剖析的十分清楚了,我们大体可以知道 Docker 组件协作运行容器可以分为以下几个过程:

 

  1. Docker 客户端执行 docker run 命令
  2. Docker daemon 发现本地没有我们需要的镜像
  3. daemon 从 Docker Hub 下载镜像
  4. 下载完成后,镜像被保存到本地
  5. Docker daemon 启动容器

 

二、docker安装(在线安装)

docker版本

Docker 分为 CE 和 EE 两大版本。 CE 即社区版(免费,支持周期 7 个月), EE 即企业版,强调安全,付费使用,支持周期 24 个月。

Docker CE 的安装请参考官方文档:

 

  1. macOS:https://docs.docker.com/docker-for-mac/install/
  2. windows:https://docs.docker.com/docker-for-windows/install/
  3. Ubuntu:https://docs.docker.com/install/linux/docker-ce/ubuntu/
  4. Debian:https://docs.docker.com/install/linux/docker-ce/debian/
  5. CentOS:https://docs.docker.com/install/linux/docker-ce/centos/
  6. Fedora:https://docs.docker.com/install/linux/docker-ce/fedora/
  7. 其他 Linux 发行版:https://docs.docker.com/install/linux/docker-ce/binaries/

 

这里我们以 CentOS7 作为本文的演示。

安装Docker CE有几种不同的方式,取决于你的需要。

 

  1. 大多数用户通过设置Docker仓库并从中进行安装,以便于安装和升级,这是推荐的方法。
  2. 有些用户下载RPM软件包并手动安装并完全手动管理升级,主要用于在无法连接互联网的系统环境中安装Docker。
  3. 在测试和开发环境中,一些用户选择使用自动便捷脚本来安装Docker。

 

2.1 检查CentOS内核版本

要求是CentOS7的维护版本,系统的内核版本高于 3.10 ,一般CentOS7及以上都是满足,可以通过 uname -r命令查看你当前的内核版本。

必须启用centos-extras存储库。默认情况下,此存储库已启用,但如果已将其禁用,则需要重新启用它。

# uname -r


 

2.2 查看是否存在docker

# docker -v


 

2.3 卸载旧版本的docker及相关依赖

如果已经存在docker,可先卸载;

# sudo yum remove docker docker-client docker-client-latest docker-common docker-latest

docker-latest-logrotate docker-logrotate docker-engine docker-selinux docker-engine-selinux

下图提示没有匹配是因为并未安装Docker;注意执行时 空格间隔 即可;


 

保留/var/lib/docker/的内容,包括images映像,containers容器,volumes卷以.NETworks网络。Docker CE包现在称为docker-ce。

若要删除所有图像,容器和卷,可以执行指令:

# sudo rm -rf /var/lib/docker

2.4 安装依赖包

yum-utils提供yum-config-manager实用程序,device-mApper-persistent-data和lvm2是devicemapper存储驱动程序所需。

# sudo yum install -y yum-utils device-mapper-persistent-data lvm2


 

2.5 设置docker下载的稳定镜像

官网默认稳定版本的源:

# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

阿里云的源:

# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


 

2.6 安装docker(从源中)

方式一、安装最新版本的Docker CE:

# sudo yum install docker-ce docker-ce-cli containerd.io

方式二、安装特定版本的Docker CE:

列出repo中可用的版本并排序,比如按版本号从高到低。

# yum list docker-ce --showduplicates | sort -r


 


 

安装特定版本,通过包名称(即docker-ce)加上版本字符串(第2列,直到第一个连字符),用连字符( - )分隔,例如docker-ce-18.09.1。

# sudo yum install docker-ce- docker-ce-cli- containerd.io

方式一、方式二的效果是一样的,我们选用方式一即可;


 


 


 

Docker已安装但尚未启动,且已创建docker组,但未向该组添加任何用户。

2.7 启动docker并开机启动

# sudo systemctl start docker

# sudo systemctl enable docker


 

2.8 验证是否安装成功

# docker version


 

或者

# docker -v


 

或者

# sudo docker run hello-world


 

三、docker安装(rpm包离线安装)

如果您无法使用Docker Repository来安装Docker,则可以下载适用于您的发行版的.rpm文件并手动安装。每次要升级Docker时都需要下载新文件。

3.1 检查CentOS内核版本

同上

3.2 查看是否存在docker

同上

3.3 卸载旧版本的docker及相关依赖

同上

3.4 下载并安装依赖包

在http://mirrors.163.com/centos/7/os/x86_64/Packages/下载8个依赖:版本选择最新版的x84_64的

audit-libs-Python/ target=_blank class=infotextkey>Python-2.8.5-4.el7.x86_64.rpm

checkpolicy-2.5-8.el7.x86_64.rpm

libcgroup-0.41-21.el7.x86_64.rpm

libseccomp-2.3.1-3.el7.x86_64.rpm

libsemanage-python-2.5-14.el7.x86_64.rpm

policycoreutils-python-2.5-33.el7.x86_64.rpm

python-IPy-0.75-6.el7.noarch.rpm

setools-libs-3.3.8-4.el7.x86_64.rpm

在http://rpm.pbone.net/index.php3?stat=3&limit=1&srodzaj=1&dl=40&search=container-selinux&field[]=1&field[]=2下载1个依赖:

container-selinux-2.9-4.el7.noarch.rpm


 

将上述文件上传到主机服务器上,我一般放到/home/当前用户下,至于怎么上传上去,随便找个工具即可,比如SSH Secure File Transfer Client;

然后执行安装,path为放置rpm包的路径,可以*.rpm批量安装,但建议挨个安装,以了解其依赖关系,看看哪个因为依赖而没有安装成功。

建议先用 rpm -q xxx检查是否已经有旧版本的,如果有则 用rpm -e进行卸载,然后rpm -ivh进行统一安装;否则可能会出现两个不同版本的包;

# rpm -ivh path/xxxxxx.rpm

# rpm -ivh path/xxxxxx.rpm

# rpm -ivh path/xxxxxx.rpm


 

注意,此时会有一些依赖提示:


 

继续下载依赖包,上传至主机服务器后,继续执行;需要反复几次,直到找出所有依赖最新版。

最好把 某个包相关的包都下载下来安装,比如下图,红框内的是有依赖关系的;


 

可能已经安装的各个rpm包,互相之间存在依赖,无法依次安装更新; 网络搜索关键词“rpm解决依赖”看是否有更便捷的办法。

在rpm -ivh后面加入 --force --nodeps 来忽略软件包及文件的冲突,不验证套件依赖性;

比如

# rpm -ivh --force --nodeps audit-libs-2.8.5-4.el7.x86_64.rpm

最终找出的docker依赖如下,并已安装成功。


 

3.5 下载并安装docker包

官网下载离线安装包 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/;

选择最新版本依次下载containerd.io-1.2.6-3.3.el7.x86_64.rpm、docker-ce-cli-19.03.4-3.el7.x86_64.rpm、docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm、docker-ce-19.03.4-3.el7.x86_64.rpm;


 

将上述文件上传到主机服务器上,我一般放到/home/当前用户下,至于怎么上传上去,随便找个工具即可,比如SSH Secure File Transfer Client;

然后执行安装,/path为放置rpm包的路径:

# sudo yum install /path/containerd.io-1.2.6-3.3.el7.x86_64.rpm

# -----sudo yum install /path/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm

# sudo yum install /path/docker-ce-cli-19.03.4-3.el7.x86_64.rpm

# sudo yum install /path/docker-ce-19.03.4-3.el7.x86_64.rpm

docker-ce-selinux安装包在1.8版本中已经被废弃了,因此我们不需要安装这个了。

用 rpm -ivh命令也可以安装;


 


 


 

要升级Docker CE,请下载较新的软件包文件并重复安装过程,但使用yum -y upgrade命令而不是yum -y install,并指向新文件。

3.6 启动docker并开机启动

同上

3.7 验证是否安装成功

同上

四、docker安装(二进制文件离线安装)

参考https://docs.docker.com/install/linux/docker-ce/binaries/#install-static-binaries

或者网上查阅;在此不再详述。

五、docker安装(测试或开发环境的简化安装)

当然在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装:

# curl -fsSL get.docker.com -o get-docker.sh

# sh get-docker.sh

具体可以参看 docker-install 的脚本:https://Github.com/docker/docker-install

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的 Edge 版本安装在系统中。

六、docker的使用

Docker Hub是Docker 官方维护了一个公共仓库,其中已经包括了数量超过 15,000 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

6.1 注册Docker Hub

在 https://cloud.docker.com 免费注册一个 Docker 账号。

如果无法完成注册,可上网查阅,采用"谷歌访问助手"。访问外国网站建议用谷歌,翻译网页。


 

6.2 登陆Docker Hub

可以通过执行 docker login 命令交互式的输入用户名及密码来完成在命令行界面登录 Docker Hub。

你可以通过 docker logout 退出登录。


 

6.3 查找镜像

查找镜像有两种方式:Docker Hub在线查找镜像、docker search命令查找。

6.3.1 在线查找镜像

https://hub.docker.com/,需要登录。同上面的 https://cloud.docker.com一样,都是官方的。

通过关键字可以搜索到名称中含有该关键字的相关镜像:


 

一般选用官方的镜像,查看详细,有详细说明,也有拉取镜像的操作命令。


 

6.3.2 docker search命令查找

你可以通过 docker search 命令来查找官方仓库中的镜像,并利用 docker pull 命令来将它下载到本地。

例如以 centos 为关键词进行搜索:

# docker search centos


 

可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、收藏数(表示该镜像的受关注程度)、是否官方创建、是否自动创建。

仓库名:NAME

镜像描述:DESCRIPTION

用户评价*:STARS

是否官方式镜像:OFFICIAL

是否自动构建:AUTOMATED- 即由Docker Hub自动构建(Automated Build)流程创建

官方的镜像说明是官方项目组创建和维护的,automated 资源允许用户验证镜像的来源和内容。

另外,在查找的时候通过 --filter=stars=N 参数可以指定仅显示收藏数量为 N 以上的镜像。

6.3.3 镜像分类说明

根据是否是官方提供,可将镜像资源分为两类。

一种是类似 centos 这样的镜像,被称为基础镜像或根镜像。这些基础镜像由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。

还有一种类型,比如 tianon/centos 镜像,它是由 Docker 的用户创建并维护的,往往带有用户名称前缀。可以通过前缀 username/ 来指定使用某个用户提供的镜像,比如 tianon 用户。

6.4 拉取镜像

下载官方 centos 镜像到本地:

# docker pull centos


 

这里未指定版本号下载了一个centos镜像。如果不指定版本号,默认将下载最后一个版本,即:latest。

如果指定版本号,则使用仓库名:版本号形式。

# docker pull centos:centos6

6.5 查看镜像

可以通docker images命令查看已经下载的所有镜像,也可以docker images命令后指定镜像名查看。

# docer images

# docker images centos


 

6.6 删除镜像

当镜像不再需要时,可以将镜像从删除。删除镜像使用docker rmi命令。

如,删除centos的镜像:

# docker rmi centos


 

删除和镜像时,我们会看到很多的Deleted行,这是因为Docker镜像是一种以层(Layer)为单位的分层文件系统,每一行Deleted都表示一个镜像层被删除。

注意:docker rmi只能删除本地镜像,并不能删除镜像仓库。镜像仓库需要登录Docker Hub后,在后台删除对应的Repository。

删除镜像时,可以同时删除多个镜像:

# docker rmi image1 image2

删除镜像时,也可以指定版本号:

# docker rmi centos:centos6

6.7 国内镜像库/加速器及配置

6.7.1 国内镜像库

最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。除此以外,还有 CoreOS 的 Quay.io,CoreOS 相关的镜像存储在这里;google 的 Google Container Registry,Kubernetes 的镜像使用的就是这个服务。

国内也有一些云服务商提供类似于 Docker Hub 的公开服务,比如时速云镜像仓库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库等。这个就不考虑了, 还是采用官方镜像库+加速器。

国内仓库

时速云镜像仓库:https://hub.tenxcloud.com/

网易云镜像服务:https://c.163.com/hub#/m/library/

DaoCloud镜像市场:https://hub.daocloud.io/

阿里云镜像库:https://cr.console.aliyun.com/#/imageList

6.7.2 国内加速器

由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为加速器。常见的有 阿里云加速器、DaoCloud 加速器 等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从 Docker Hub 下载速度会提高很多。

国内加速器:

 

  1. 官方加速器:https://registry.docker-cn.com,建议使用
  2. 网易加速器::http://hub-mirror.c.163.com
  3. ustc加速器:https://docker.mirrors.ustc.edu.cn
  4. 阿里云加速器:https://yn4lv9tp.mirror.aliyuncs.com,需要注册阿里云帐号登录,据说比较麻烦;
  5. Daocloud加速器:http://f1361db2.m.daocloud.io,需要注册帐号登录,据说比较麻烦;

 

6.7.3 阿里云容器服务(插曲)

点击https://cr.console.aliyun.com/#/imageList,进入阿里云容器镜像服务页面,里面有相关说明;


 

6.7.4 命令从加速器地址中拉取镜像(可不用)

可以使用以下命令直接从该镜像加速地址进行拉取。除非您修改了Docker守护进程的–registry-mirror参数,否则您将需要完整地指定官方镜像的名称。例如,library/ubuntu、library/redis、library/nginx。

# docker pull registry.docker-cn.com/library/ubuntu:16.04

6.7.5 配置加速器(Docker版本1.10.0以上)

新版的 Docker 针对linux版本使用 /etc/docker/daemon.json(Linux) 来配置 Daemon。

请在该配置文件中加入(没有该文件的话,请先建一个):

使用命令:

# vi /etc/docker/daemon.json

输入内容:使用国内官方加速器

"registry-mirrors": ["https://registry.docker-cn.com"]


 

然后使用命令重启docker即可:

# systemctl daemon-reload

# systemctl restart docker

6.8 推送镜像(创建镜像后)

用户也可以在登录后通过 docker push 命令来将自己的镜像推送到 Docker Hub。

以下命令中的 username 请替换为你的 Docker 账号用户名。

# docker tag ubuntu:17.10 username/ubuntu:17.10

# docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE

ubuntu 17.10 275d79972a86 6 days ago 94.6MB

username/ubuntu 17.10 275d79972a86 6 days ago 94.6MB

# docker push username/ubuntu:17.10

# docker search username

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

username/ubuntu

6.9 自动创建(暂没有搞懂)

自动创建(Automated Builds)功能对于需要经常升级镜像内程序来说,十分方便。

有时候,用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像。

而自动创建允许用户通过 Docker Hub 指定跟踪一个目标网站(目前支持 GitHub 或 BitBucket)上的项目,一旦项目发生新的提交或者创建新的标签(tag),Docker Hub 会自动构建镜像并推送到 Docker Hub 中。

要配置自动创建,包括如下的步骤:

 

  1. 创建并登录 Docker Hub,以及目标网站;
  2. 在目标网站中连接帐户到 Docker Hub;
  3. 在 Docker Hub 中 配置一个自动创建;
  4. 选取一个目标网站中的项目(需要含 Dockerfile)和分支;
  5. 指定 Dockerfile 的位置,并提交创建。

 

之后,可以在 Docker Hub 的 自动创建页面 中跟踪每次创建的状态。

七、镜像文件(待续)

7.1 redis(官方)

7.2 nginx(官方)

7.3 其他

八、创建私有镜像仓库(待续)

8.1 使用Docker Registry

九、创建自定义镜像(待续)

9.1 关于Dockerfile

9.2 创建镜像

9.3 上传镜像

十、其他(待续)

10.1 docker常用命令

10.2 常见问题

10.2.1 非root用户权限问题


 

可以看到非root用户执行docker命令时,会报permission denied错误,docker手册上可以找到原因以及解决方法,原文如下:

Manage Docker as a non-root user

The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user.

If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

意思就是docker daemon使用的是Unix Socket,需要root权限才能访问。有两种解决办法:要么用sudo命令,要么将当前用户添加至docker用户组。

添加docker用户组的操作命令:

# sudo groupadd docker #添加docker用户组

# sudo gpasswd -a $USER docker #将当期用户加入docker用户组

# newgrp docker #更新docker用户组

# docker ps #测试docker命令是否可以使用

10.3 参考

https://blog.csdn.net/deng624796905/article/details/86493330

https://www.cnblogs.com/yhnet/p/11697576.html

https://www.jianshu.com/p/99b1a380a07e

https://blog.csdn.net/u013058742/article/details/80075633(好几种安装方式)

https://yeasy.gitbooks.io/docker_practice/content/(比较全面,一本电子书)

https://ieevee.com/tech/2016/09/28/docker-mirror.html(关于国内加速器的)

https://www.cnblogs.com/wushuaishuai/p/9984228.html#_label2(关于国内加速器的)



Tags:Docker   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  Search: Docker  点击:(12)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22  Search: Docker  点击:(11)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  Search: Docker  点击:(23)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  Search: Docker  点击:(66)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  Search: Docker  点击:(78)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04  Search: Docker  点击:(124)  评论:(0)  加入收藏
七个杀手级Docker命令
Docker是一个容器化平台,通过操作系统级别的虚拟化技术,实现软件的打包和容器化运行。借助Docker,开发人员能够将应用程序以容器的形式进行部署,但在此之前需要构建Docker镜像。...【详细内容】
2023-12-22  Search: Docker  点击:(141)  评论:(0)  加入收藏
Docker容器如何打包应用程序的代码和依赖项?
Docker容器通过将应用程序的代码和所有依赖项打包到一个独立的软件包中,实现了应用程序的快速部署和移植。下面是Docker容器实现这一目标的步骤:打包应用程序:使用Docker工具将...【详细内容】
2023-12-20  Search: Docker  点击:(130)  评论:(0)  加入收藏
DBA视角:把数据库放入Docker是一个馊主意
对于无状态的应用服务而言,容器是一个相当完美的开发运维解决方案。然而对于带持久状态的服务 &mdash;&mdash; 数据库来说,事情就没有那么简单了。生产环境的数据库是否应当放...【详细内容】
2023-12-18  Search: Docker  点击:(200)  评论:(0)  加入收藏
Docker容器编排技术解析
一、容器编排介绍容器编排是现代云原生应用管理的核心,它涉及在大规模的环境中自动化部署、管理、扩展和网络配置容器。随着微服务架构的兴起和应用的复杂性增加,容器编排成为...【详细内容】
2023-12-15  Search: Docker  点击:(249)  评论:(0)  加入收藏
▌简易百科推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  小白debug  微信公众号  Tags:Docker   点击:(12)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22    51CTO  Tags:Docker   点击:(11)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  云原生运维圈  微信公众号  Tags:容器   点击:(13)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  云原生运维圈  微信公众号  Tags:Docker   点击:(23)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01    简易百科  Tags:Kubernetes   点击:(160)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  匠心独运维妙维效  微信公众号  Tags:容器   点击:(47)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  waynblog  微信公众号  Tags:Docker   点击:(66)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  编程技术汇  今日头条  Tags:Docker   点击:(78)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04    Linux中国  Tags:Docker   点击:(124)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  云云众生s  微信公众号  Tags:Kubernetes   点击:(116)  评论:(0)  加入收藏
站内最新
站内热门
站内头条