Docker系列之三:使用Docker镜像和仓库

系列链接

Docker系列之一:Docker介绍及在Ubuntu上安装

Docker系列之二:Docker 入门

Docker系列之三:使用Docker镜像和仓库

Docker系列之四:Dockerfile的使用

Docker系列之五:Volume 卷的使用——以Redis为例

Docker系列之六:Volume 卷的使用——在Dockerfile中的用法

Docker系列之七:Docker 网络(内部网络、容器之间的连接)

Docker系列之八:在Dockerfile中使用多段构建Muti-stage build

Docker系列之九:Docker用于持续集成,构建Jenkins和Docker服务器

Docker系列之十:Docker Compose的使用

Docker的联合文件系统

在Docker中,root文件系统只能是只读状态,它利用联合加载技术在root文件系统层上加载更多的只读文件系统。联合加载指的是一次同时加载多个文件系统,将各层文件系统叠加到一起,这样最终的文件系统会包含所有底层的文件和目录。

Docker的镜像

像上面这样的联合文件系统叠加到一起就是镜像了,位于下面的镜像称为父镜像,最底部的是基础镜像。

列出所有镜像,tag表示docker镜像的标签

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              ea4c82dcd15a        7 days ago          85.8MB

公共镜像仓库,俗称docker hub,Docker公司自己运营的开放的registry。使用下面的命令拉取nginx镜像,这个镜像就是从docker hub上拉取下来的。拉取特定版本的镜像可以使用docker pull nginx:v2

root@iZbp13z6cxj72rb7bxf0smZ:~# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f17d81b4b692: Pull complete
d5c237920c39: Pull complete
a381f92f36de: Pull complete
Digest: sha256:b73f527d86e3461fd652f62cf47e7b375196063bbbd503e853af5be16597cb2e
Status: Downloaded newer image for nginx:latest

查找镜像

root@iZbp13z6cxj72rb7bxf0smZ:~# docker search microsoft/dotnet
NAME                                       DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
microsoft/dotnet                           Official images for .NET Core and ASP.NET Co…   1220                                    [OK]
microsoft/mssql-server-linux               Official images for Microsoft SQL Server on …   995
microsoft/aspnet                           ASP.NET is an open source server-side Web ap…   783                                     [OK]
microsoft/windowsservercore                                                                550
microsoft/aspnetcore                       Official images for running compiled ASP.NET…   526                                     [OK]

创建docker hub账号,从https://hub.docker.com/ 上去注册,注册里需要你填入用户名和密码

如何构建镜像

之前一直是拉取其他人的镜像去运行,那我们如何将自己的应用程序打包成镜像呢? 打包镜像会用到Dockerfile,先参考官网,之后会在另外章节介绍。

先创建一个文件夹DockerDemo,创建如下两个文件。注意Dockerfile文件没有后缀名。

文件内容分别是:

 

 执行如下命令,生成镜像

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker build -t mynginx:v1 .
Sending build context to Docker daemon  3.072kB
Step 1/4 : FROM nginx
 ---> dbfc48660aeb
Step 2/4 : WORKDIR /usr/share/nginx/html
 ---> Running in ca45a4396161
Removing intermediate container ca45a4396161
 ---> 49eb0195ae40
Step 3/4 : COPY . .
 ---> da56839ce084
Step 4/4 : EXPOSE 80
 ---> Running in d28c3be3625b
Removing intermediate container d28c3be3625b
 ---> 51dfb7e10e15
Successfully built 51dfb7e10e15
Successfully tagged mynginx:v1

查看镜像,可以看标签是v1,接下来用的时候必须要指定,标签为latest可以不指定。

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mynginx             v1                  51dfb7e10e15        2 minutes ago       109MB
ubuntu              latest              ea4c82dcd15a        7 days ago          85.8MB
nginx               latest              dbfc48660aeb        10 days ago         109MB

运行此镜像后就会创建一个新的容器, 镜像与容器的关系就像类与实例的关系,容器里运行着我们的应用程序。

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker run -itd -p 5002:80 --name mynginx01 mynginx:v1
1f7caa8d6d563f33c49692c4af127b32ae10b4252b7928d6f6eea7e850ab115c

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1f7caa8d6d56        mynginx:v1          "nginx -g 'daemon of…"   4 minutes ago       Up 4 minutes        0.0.0.0:5002->80/tcp   mynginx01

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# curl localhost:5002
<h1>Hello world</h1>


从上可以看出,访问localhost:5002就可以正常访问我们刚创建的网页了,这里-p表示端口的意思,5002表示你本机的端口,80表示容器(可暂时把容器简单的理解为轻量级的虚拟机)里的端口,这里会作一个端口映射,当我们从本机访问5002端口的时候,请求会自动请求容器里的80端口。可以使用如下命令查看端口的映射情况,也可以使用docker inspect mynginx01

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker port mynginx01
80/tcp -> 0.0.0.0:5002

推送镜像到Docker hub

推送到镜像仓库前必须要登录,登录之后呢,需要对镜像打标签,因为我们docker hub要求你的镜像名格式为<youruser/yourimage>,只有这样的才算合法的镜像名,然后再推送到docker hub上。见如下命令

#登录到docker hub
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker login -u wucong60
Password:
Login Succeeded

#对镜像打标签
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker tag mynginx:v1 wucong60/mynginx:v1

#打标签后会出现一个新的镜像,名为wucong60/mynginx,TAG为v1
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mynginx             v1                  51dfb7e10e15        19 minutes ago      109MB
wucong60/mynginx    v1                  51dfb7e10e15        19 minutes ago      109MB
ubuntu              latest              ea4c82dcd15a        7 days ago          85.8MB
nginx               latest              dbfc48660aeb        10 days ago         109MB

#推送到docker hub,之后你可以在https://hub.docker.com/上找到这个镜像
root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker push wucong60/mynginx:v1
The push refers to repository [docker.io/wucong60/mynginx]
7e4e4f8dff83: Pushed
86df2a1b653b: Mounted from library/nginx
bc5b41ec0cfa: Mounted from library/nginx
237472299760: Mounted from library/nginx
v1: digest: sha256:3da939d0060d15e4c83831ac4ce5c182c60774553e05d7e7e0d89d7950f05f09 size: 1155

删除本地镜像,如果有此镜像生成的容器正在运行,加上-f强制删除此镜像,对应的容器也会删除。删除所有镜像用docker rmi $(docker images  -aq) -f

root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker rmi mynginx:v1
Untagged: mynginx:v1


root@iZbp13z6cxj72rb7bxf0smZ:/home/cong/DockerDemo# docker rmi wucong60/mynginx:v1 -f

推送镜像到其它镜像仓库,比如xxx.register.io

docker login -u my xxx.register.io
docker tag mynginx:v1 xxx.register.io/my/mynginx:v1
docker push xxx.register.io/my/nginx:v1 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值