Docker的三大核心概念

介绍Docker的三大核心概念:❑ 镜像(Image)❑ 容器(Container)❑ 仓库(Repository)

只有理解了这三个核心概念,才能顺利地理解Docker容器的整个生命周期。

1. Docker镜像

Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。

例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了Apache应用程序(或用户需要的其他软件)。

可以把它称为一个Apache镜像。镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。

 

2. Docker容器

Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。

容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。可以把容器看作一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。

注意镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

 

3. Docker仓库

Docker仓库类似于代码仓库,是Docker集中存放镜像文件的场所。

 

有时候我们会将Docker仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,被称为Ubuntu仓库,其中可能包括16.04、18.04等不同版本的镜像。仓库注册服务器的示例如图2-1所示。

根据所存储的镜像公开分享与否,Docker仓库可以分为公开仓库(Public)和私有仓库(Private)两种形式。

目前,最大的公开仓库是官方提供的Docker Hub,其中存放着数量庞大的镜像供用户下载。国内不少云服务提供商(如腾讯云、阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问。

当然,用户如果不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。

当用户创建了自己的镜像之后就可以使用push命令将它上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上pull下来就可以了。

注意: 可以看出,Docker利用仓库管理镜像的设计理念与Git代码仓库的概念非常相似,实际上Docker设计上借鉴了Git的很多优秀思想。

 

2.2 安装Docker引擎

 

Docker引擎目前分为两个版本:社区版本(Community Edition, CE)和企业版本(EnterpriseEdition, EE)。社区版本包括大部分的核心功能,企业版本则通过付费形式提供认证支持、镜像管理、容器托管、安全扫描等高级服务。通常情况下,用户使用社区版本可以满足大部分需求;若有更苛刻的需求,可以购买企业版本服务。社区版本每个月会发布一次尝鲜(Edge)版本,每个季度(3、6、9、12月)会发行一次稳定(Stable)版本。版本号命名格式为“年份.月份”,如2018年6月发布的版本号为v18.06。

 

 

 

 

Windows10下安装Docker的步骤

https://www.cnblogs.com/wyt007/p/10656813.html

安装出错::

Docker Desktop requires Windows 10 Pro/Enterprise (15063+) or Windows 10 Home (19018+).

 

 

 

Linux 安装docker 注意事项:

1、需要root权限

2、linux 系统内核版本需要

❏ Docker只支持安装在64位CPU架构的计算机上,目前不支持32位CPU;

❏ 建议系统的Linux内核版本为3.10及以上;1、docker要求Centos系统的内核版本高于3.10,查看内核版本:

❏ Linux内核需开启cgroup和namespace功能;

❏ 对于非Linux内核的平台,如Microsoft Windows和OS X,需要安装使用Toolbox工具。

 

安装参考文档;https://blog.csdn.net/weixin_37745913/article/details/99966937

 

 

linux如何查看所有的用户和组信息

https://blog.51cto.com/4515309/2323564?source=dra

【步骤一】
cat /etc/passwd

【步骤二】cat /etc/passwd|grep 用户名

cat /etc/passwd|grep 用户名,用于查找某个用户,如下图

linux如何查看所有的用户和组信息

【步骤三】cat /etc/group

cat /etc/group查看所有组信息,如下图
linux如何查看所有的用户和组信息

【步骤四】cat /etc/group|grep 组名

cat /etc/group|grep 组名,用于查找某个用户组,如下图
linux如何查看所有的用户和组信息

 

【步骤五】用户和组常用命令

groups 查看当前登录用户的组内成员

groups test 查看test用户所在的组,以及组内成员

whoami 查看当前登录用户名
linux如何查看所有的用户和组信息

 

 

docker基础:使用非root用户操作docker

https://blog.csdn.net/liumiaocn/article/details/88651955?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

场景

根据企业的安全策略,有一些情况下无法获取root用户的直接使用方式,通过docker或者sudo的方式使用docker变成了这种情况下的选择之一。

参考内容

根据参考文章中的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 preface the docker command with sudo, create a Unix group called 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 preface the docker command with sudo, create a Unix group called docker and add users to it. When the Docker daemon starts, it creates a Unix socket accessible by members of the docker group.
 

从上述信息可以清楚地看到,关于如何使用非root用户对docker进行管理,由于Docker的守护进程会绑定Unix Socket而不是使用TCP端口方式,而缺省情况下Unix socket为root用户所有,其他用户只能通过sudo来进行访问,所以Docker的守护进程只能以root用户进行启动。
如果不希望在docker命令前面添加sudo进行执行,这时可以创建一个名为docker的Unix Group并向这个Group中添加用户,当Docker守护进程启动的时候,守护进程会创建一个Unix Socket文件,而docker这个group的成员对于该文件具有访问权限。

 

场景1:使用sudo方式操作docker

以用户appman为示例,来说明一下如何使用sudo方式操作docker。

  • 事前确认信息如下:不存在/var/lib/docker目录和appman用户
[root@host118 ~]# ls -ld /var/lib/docker
ls: cannot access /var/lib/docker: No such file or directory
[root@host118 ~]# id appman
id: appman: no such user
[root@host118 ~]# 

Step 1: 创建appman用户和group

如下创建该appman用户和group并初始化用户密码

[root@host118 ~]# useradd appman
[root@host118 ~]# id appman
uid=1003(appman) gid=1003(appman) groups=1003(appman)
[root@host118 ~]# passwd appman
Changing password for user appman.
New password: 
BAD PASSWORD: The password is shorter than 7 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@host118 ~]# 

Step 2: 添加appman的sudo用户权限

修改/etcsudoers文件,添加如下信息

appman  ALL=(ALL)       ALL

Step 3: 使用sudo命令操作docker

切换到sudo用户appman,通过添加sudo前缀操作docker

[appman@host118 ~]$ id
uid=1003(appman) gid=1003(appman) groups=1003(appman) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[appman@host118 ~]$ 
  • 启动docker
[appman@host118 ~]$ sudo systemctl restart docker
[sudo] password for appman: 
[appman@host118 ~]$
  • 确认启动状态
[appman@host118 ~]$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[appman@host118 ~]$ sudo docker version
Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.13.1
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      linux/amd64
 Experimental: false
[appman@host118 ~]$ 

 

而如果不加sudo,则会提示错误

[appman@host118 ~]$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/json: dial unix /var/run/docker.sock: connect: permission denied
[appman@host118 ~]$

继续确认文件权限,会发现此种方式和直接使用docker没有区别,因为毕竟sudo就是切换到root用户而已。

[appman@host118 ~]$ ls -l /var/run/docker.sock
srw-rw----. 1 root root 0 Mar 12 08:39 /var/run/docker.sock
[appman@host118 ~]$ ls -l /var/lib/docker
ls: cannot open directory /var/lib/docker: Permission denied
[appman@host118 ~]$ sudo ls -l /var/lib/docker
total 0
drwx------. 2 root root  6 Mar 12 08:39 containers
drwx------. 3 root root 21 Mar 12 08:39 image
drwxr-x---. 3 root root 19 Mar 12 08:39 network
drwx------. 2 root root  6 Mar 12 08:39 overlay
drwx------. 4 root root 32 Mar 12 08:39 plugins
drwx------. 2 root root  6 Mar 12 08:39 swarm
drwx------. 2 root root  6 Mar 12 08:39 tmp
drwx------. 2 root root  6 Mar 12 08:39 trust
drwx------. 2 root root 25 Mar 12 08:39 volumes
[appman@host118 ~]$ sudo ls -ld /var/lib/docker
drwx--x--x. 11 root root 134 Mar 12 08:39 /var/lib/docker
[appman@host118 ~]$ 

 

场景2: 使用非root用户管理docker但是不希望直接使用sudo执行操作

 

事前准备:停止docker,并删除docker的缺省数据目录/var/lib/docker

[root@host118 ~]# systemctl stop docker
[root@host118 ~]# rm -rf /var/lib/docker
[root@host118 ~]# 

事前准备:删除appman的sudo权限

[root@host118 ~]# vi /etc/sudoers
[root@host118 ~]# grep appman /etc/sudoers
[root@host118 ~]# 

可以看到appman没有了sudo权限

[appman@host118 ~]$ sudo ls
[sudo] password for appman: 
appman is not in the sudoers file.  This incident will be reported.
[appman@host118 ~]$ 

 

Step 1: 添加group并设定用户

[appman@host118 ~]$ id
uid=1003(appman) gid=1003(appman) groups=1003(appman) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[appman@host118 ~]$ sudo groupadd docker
[appman@host118 ~]$ sudo gpasswd -a ${USER} docker
Adding user appman to group docker
[appman@host118 ~]$ groups
appman
[appman@host118 ~]$ newgrp docker
[appman@host118 ~]$ groups
docker appman
[appman@host118 ~]$

Step2: 启动docker

启动docker,并确认结果

[appman@host118 ~]$ systemctl restart docker
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ===
[appman@host118 ~]$
  • 进行启动后的docker数据目录确认
[appman@host118 ~]$ ls -l /var/lib/docker
ls: cannot open directory /var/lib/docker: Permission denied
[appman@host118 ~]$ sudo ls -l /var/lib/docker
total 0
drwx------. 2 root root  6 Mar 12 08:52 containers
drwx------. 3 root root 21 Mar 12 08:52 image
drwxr-x---. 3 root root 19 Mar 12 08:52 network
drwx------. 2 root root  6 Mar 12 08:52 overlay
drwx------. 4 root root 32 Mar 12 08:52 plugins
drwx------. 2 root root  6 Mar 12 08:52 swarm
drwx------. 2 root root  6 Mar 12 08:52 tmp
drwx------. 2 root root  6 Mar 12 08:52 trust
drwx------. 2 root root 25 Mar 12 08:52 volumes
[appman@host118 ~]$ sudo ls -ld /var/lib/docker
drwx--x--x. 11 root root 134 Mar 12 08:52 /var/lib/docker
[appman@host118 ~]$

Step 3: 确认其他命令和docker.sock文件

确认docker.sock文件,发现docker在其group设定中,这一点也和官方说明一致。而执行其他命令,也无需再加前缀sudo即可

[appman@host118 ~]$ docker version
Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.13.1
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      linux/amd64
 Experimental: false
[appman@host118 ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[appman@host118 ~]$ 

参考文章

https://docs.docker.com/engine/install/linux-postinstall/

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值