docker学习笔记(2):docker镜像

引言

上篇对docker做了一个比较笼统的介绍与安装,本篇就针对docker中的镜像进行一个比较完整的命令说明。

docker镜像介绍

  • docker 镜像代表了容器的文件系统里的内容,是容器的基础,镜像一般是通过 Dockerfile 生成的
  • docker 的镜像是分层的,所有的镜像(除了基础镜像)都是在之前镜像的基础上加上自己这层的内容生成的
  • 每一层镜像的元数据都是存在 json 文件中的,除了静态的文件系统之外,还会包含动态的数据
    在这里插入图片描述

上述文字与图来自链接:docker 镜像介绍

另外就是我上一篇中提到的一些镜像介绍,以及docker -version命令,它和docker -help命令一样,基本能给出所有基本的docker容器与镜像的命令,我在结尾也有提到,然后接下来我将介绍另一些命令以及docker hub的使用。

dockerhub是一个类似于GitHub一样的托管平台,它提供了很多比较完善的镜像供别人拉取,而操作基本和GitHub一样,拉取镜像用pull,推送镜像用push,但有一点不同的是,GitHub我记得好像没有梯子也有一定的可能注册成功,但dockerhub是需要梯子才能创建自己的账号,否则sign in应该是灰色的。下图是我的dockerhub,我创建了一个私有仓库和一个共有仓库,创建的步骤与方式和GitHub一样,我这里就不再过多介绍了。
在这里插入图片描述

拥有自己的账号和仓库后,我们回到MobaXterm中,用docker login登录进去,下图即为登录成功:
在这里插入图片描述

输入docker info后我们可以查看到所有的信息:

Containers: 10
 Running: 1
 Paused: 0
 Stopped: 9
Images: 34
Server Version: 18.09.1
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30
init version: fec3683
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.4.0-117-generic
Operating System: Ubuntu 16.04.4 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.953GiB
Name: xuzhenggen
ID: ZFJH:4IFD:ACJL:E6JW:HOAP:GTL4:6ILC:EFXT:H2IM:CZQZ:DBI7:DL6C
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Username: 1004995307
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
 https://dockerhub.azk8s.cn/
 https://reg-mirror.qiniu.com/
Live Restore Enabled: false
Product License: Community Engine
WARNING: No swap limit support

我们可以看到当前docker的所有配置,比如最前面的拥有多少个容器数量,还有正在运行的容器,镜像数量,docker版本等等,中间的username和Name就是我们本地连接了dockerhub成功后显示的账号信息。然后我们就可以对镜像等进行相关的推送了。

docker镜像拉取与推送

docker和GitHub上类似的操作就体现在了这里,我们一般拉取镜像时,首先会search查看一下最近的版本有哪一些,docker的版本显示是以最新的版本为latest,其余都会显示版本号,比如我要拉取一个Ubuntu,那么就docker search Ubuntu可以看到很多的版本:
在这里插入图片描述
第一个是官方提供Ubuntu镜像,而其余的按照stars数量进行排序,越多只能说明越通用或者越稳定,但是否更好或者更匹配自己当前项目还是要依照自己的情况来定,一般是拉取官方的然后自己再对其进行修改,我们使用docker pull Ubuntu就能下载最新的稳定版,目前应该是18.04,如果想指定安装,就在后面跟上版本号,比如Ubuntu:16.04。

这里就不演示下载了,网速很慢,然后我们就能通过这个镜像启动容器:

sudo docker run -t -i ubuntu:16.04 /bin/bash

然后进入容器后,会出现一个版本号,这个我们可以记住,之后很多地方可以用到,在docker容器中,我们的操作和在Ubuntu服务器中操作一样,比如改动host,安装某软件某语言,做完相应修改后,退出docker,可以使用和GitHub一样的commit先本地提交,再push到dockerhub,也能通过打标签的方式:

docker tag <existing-image> <hub-user>/<repo-name>[:<tag>]

docker commit <existing-container> <hub-user>/<repo-name>[:<tag>]

然后相应的镜像以及版本就会有所显示,使用docker images:
在这里插入图片描述
对了,如果是打标签最好少用 “/” 去修饰,因为带个人账号的时候,比如我这里1004995307 / ubuntu-16.04 / python:3.6.3 ,但命令不知道哪一个是我的账号而哪一个是版本号,那么就会出现冲突,所以我们可以改一下格式为 1004995307 / Ubuntu-16.04-python:v1.0,那么基本就不会有bug了,这里就不演示了,那么最终会在dockerhub中看到消息:
在这里插入图片描述

镜像加速器

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务,对于使用 systemd 的系统,即Ubuntu、centos、debian等,都可以在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com"
  ]
}

这里注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。然后我们再重启服务:

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

现在要验证是否启动成功,可以看我上面的docker info中的Registry Mirrors信息,可以看到我上面设置的两个url的地址,所以表明已经配置成功,然后之后我pull的时候确实速度有一定的提升。

猜你喜欢

转载自blog.csdn.net/submarineas/article/details/92763712