docker学习-仓库/镜像/容器/

docker中运行一个程序,必须获取这个程序的镜像:好比基于同一套nginx模板,启动多个nginx服务一样,类比虚拟机理解:程序镜像就好比虚拟机的‘模板机镜像’,我们剋通过‘模板机镜像’快速的创建可运行的虚拟机(虚拟机容器),docker也差不多,只不过docker是通过‘程序镜像’创建出可运行的‘程序容器’,最终对外提供服务,镜像是磁盘中的文件,基于镜像创建出容器,运行的容器就是内存中的进程

运行命令:docker pull docker.io/library/nginx:latest

docker pull命令是用来拉取镜像到本地的,从哪里拉取镜像呢?就是从下面这个url拉取

docker.io/library/nginx:latest

docker表示官网的仓库服务中心(其实就是docker.hub,就是官方的仓库服务器),这个仓库服务器中有很多组织,也有很多个人,每个组织或者个人都可以在这个仓库服务器创建仓库,然后把镜像存放在仓库中,前文说过,docker hub的官网地址是registry.hub.docker.com,这个地址是方便我们从web页面查找镜像使用的,使用命令行从docker hub拉取镜像时,默认使用的是docker.io这个地址。除了docker官方的docker hub,还有一些其他仓库服务器,我们也可以自建仓库服务器,当使用其他仓库服务器或者自建仓库服务器时,要把第1部分改为对应的域名或IP,如果我们就是想要从官方的docker hub下载镜像,上图中的第1部分可以不写,当省略第1部分时,默认就是使用docker.io这个仓库服务器的,仓库服务或者仓库服务中心的英文原文是registry,简单来说,第1部分就是registry的地址。

library代表组织和个人的“命名空间”,命名空间是什么意思呢?举个例子,我们每个人都可以docker hub上注册自己的账号,然后使用自己的账号在docker hub上创建仓库,比如,我在docker hub上的账号id是zsythink,那么我就可以在docker hubzsythink命名空间下创建仓库,如果我创建了一个名为nginx的仓库,那么我就可以通过如下url,获取到这个nginx仓库中的镜像

docker.io/laohuang/nginx:latest

同理,如果你再docker hub上的id是zhangsan,你也创建了一个名为nginx的仓库,那么你就可以通过下面这个url获取仓库中镜像 

docker.io/zhangsan/nginx

你也可以创建多个仓库,比如再创建一个名为redis的仓库,专门用来存放redis镜像,那么你就可以通过如下url来获取这个redis仓库中的镜像

docker.io/zhangsan/redis 

可以看出,上面的nginx/redis才是真正的仓库名,也就是最后一部分,创建仓库时,可以选择公开或者不公开,仓库名可以重复,但是命名空间不可以重复,用来区分 。library这个命名空间比较特殊,library是专门给上游软件提供商官方使用的命名空间,比如,nginx官方(或者说nginx组织)的nginx的仓库,并不会使用docker.io/nginx/nginx,而是会使用docker.io/library/nginx,同理,redis官方的redis仓库,也不会使用docker.io/redis/redis,而是会使用docker.io/library/redis,官方仓库中的镜像被称之为官方镜像,docker有一个专门的团队,负责审核和发布官方镜像,这个团队会与软件提供商、社区以及安全专家合作,共同维护这些官方仓库中的镜像,官方镜像的更多内容,可以参考如下链接https://docs.docker.com/docker-hub/official_images,当我们想要从官方仓库下载镜像时,是可以省略library的,比如,我想要直接从docker hubnginx官方仓库中下载镜像,可以直接使用docker pull nginx命令,此命令等效于docker pull docker.io/library/nginx,需要注意,只有官方仓库可以省略(即只有library可以省略),其他组织或者个人的命名空间不能省略

可以直接访问registry.hub.docker.com,通过web页面搜索我们想要使用的镜像

docker学习-仓库/镜像/容器/_第1张图片

标识official image标识官方镜像

docker学习-仓库/镜像/容器/_第2张图片

docker学习-仓库/镜像/容器/_第3张图片 

docker学习-仓库/镜像/容器/_第4张图片 

除了通过web页面,我们也可以使用命令行去搜索对应的仓库,以nginx为例,使用docker search nginx命令,即可搜索出包含nginx关键字的仓库,但是使用命令搜索出来的信息可读性和详细程度都不如web页面

[root@192 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
bd159e379b3b: Already exists
8d634ce99fb9: Pull complete
98b0bbcc0ec6: Pull complete
6ab6a6301bde: Pull complete
f5d8edcd47b1: Pull complete
fe24ce36f968: Pull complete
Digest: sha256:2f770d2fe27bc85f68fd7fe6a63900ef7076bc703022fe81b980377fe3d27b70
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

 执行如下命令,即可基于上面的镜像,运行一个nginx容器

[root@192 ~]# docker run --name nginx-demo -d -p 80:80 nginx:latest
39737782c029e3a7579c83c7b49905cd59eccb3d4218ed490eb3335e87d51c51

上面命令表示,基于nginx:latest这个镜像,创建一个名为nginx-demo的容器,并启动这个容器,-d表示启动后台这个容器,          -p 80:80表示host主机的80端口和容器内nginx服务的80端口进行映射二,映射后,访问docker主机的80端口,即相当于访问容器内的nginx服务的80端口,现在只需要能把这个容器运行起来,执行上述命令后,查看docker主机的80端口,是已经监听的,访问docker主机的ip地址,就可与i看到nginx的默认页面了,如下图:

docker学习-仓库/镜像/容器/_第5张图片

可以看到,我们的nginx容器已经正常运行了,我们可以使用docker ps命令,查看你运行中的容器

[root@192 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
39737782c029   nginx:latest   "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp           nginx-demo

dokcer ps -a查看所有容器,保活未运行的容器哦;

你可能感兴趣的:(Linux,docker,学习,运维)