Docker技术剖析--docker image管理

一,docker image是docker的三大组件之一.docker把下载的图像存储到docker主机上,如果一个图像不在主机上,docker会从一个镜像仓库下载,默认的仓库是docker hub公共仓库

1.使用docker图像查看本机上的图像
[root @ yankai~] #docker images 
REPOSITORY TAG IMAGE ID CREATED SIZE

REPOSITORY:来自于哪个仓库:比如docker.io/centos
TAG:TAG的标记,
比如最新图片ID:表示镜像的id号
创建时间:创建的时间

SIZE:镜像的SIZE 2.这里我们看到我们目前本机上没有任何的镜像,怎么获取镜像呢??? 

使用docker search搜索合适的图像,例如我们搜索centos镜像

[root @ yankai~] #docker search centos
INDEX NAME DESCRIPTION STARS OFFICIAL
AUTOMATED docker.io docker.io/centos CentOS的官方版本.3596 [OK]       
docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 100 [ OK]
docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8 .. [确定]
docker.io docker.io/tutum/centos具有SSH访问权限的简单CentOS docker镜像33                   
docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 30 [确定]
docker.io docker.io/gluster/gluster-centos官方GlusterFS图像[CentOS-7 + Glu ... 19 [确定]]
docker.io docker.io/kinogmt/centos-ssh CentOS with SSH 16 [OK]
docker.io docker.io/centos/php-56-centos7 PHP 5.6平台,用于构建和运行... 9                    
docker.io docker.io / openshift / base-centos7一个Centos7派生的Source-To基础图像... 7                    
docker.io docker.io/openshift/mysql-55-centos7弃用:基于Centos7的MySQL v5.5 ima ... 6                    
docker.io docker.io/centos/python-35-centos7用于构建和运行的Python 3.5平台... 5                    
docker.io docker.io/darksheer/centos Base Centos Image - 每小时更新3 [好的]
docker.io docker .io / openshift / jenkins-1-centos7已弃用:基于Centos7的Jenkins v1.xi ... 3                    
docker.io docker.io/openshift/jenkins-2-centos7基于Centos7的Jenkins v2 .x图像供使用..                    
.3。docker.io docker.io/openshift/ruby-20-centos7已弃用:基于Centos7的Ruby v2.0 imag ... 3                    
docker.io docker.io/blacklabelops/centos CentOS Base Image!每日建造和更新!1 [确定]
docker.io docker.io/indigo/centos-maven Vanilla CentOS 7与Oracle Java Developm ... 1 [OK]
docker.io docker.io/openshift/php-55-centos7弃用:基于Centos7的PHP v5.5映像... 1                    
docker.io docker.io/pivotaldata/centos-gpdb-dev用于GPDB开发的CentOS映像。标签nam ... 1                    
docker.io docker.io/pivotaldata/centos-mingw使用mingw工具链交叉编译... 1                    
docker.io docker.io/jameseckersall/sonarr-centos Centarr 7上的Sonarr 0 [确定]
docker.iodocker.io/miko2u/centos6CentOS6日本语语6.2 [确定]
docker.io docker.io/ pivotaldata / centos基础中心,
用一个工具链更新了一点... 0 docker.io docker.io/pivotaldata/centos-gcc-toolchain CentOS,但是没有关联... 0                    
泊坞.io docker.io/smartentry/ centos centos with smartentry 0 [确定]

Docker技术剖析--docker image管理_第1张图片

3.下载图片

我们可以使用docker pull命令来预先下载我们需要的图像比如我们下载一个centos镜像

[root @ yankai~] #docker pull docker.io/centos
使用默认标签:latest
尝试拉出存储库docker.io/library/centos ... 
最新:从docker.io/library/centos
拉出74f0853ba93b:正在下载[== ==>] 5.946
 MB / 72.25 MB

4.下载完成之后我们查看images信息这边呢,我已经有下载好的 因为安装这个过程有点痛苦,比较慢。。。

[root@yankai ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              50dae1ee8677        13 months ago       196.7 MB

查看docker.io/centos的详细信息

[root@yankai ~]# docker inspect docker.io/centos

Docker技术剖析--docker image管理_第2张图片

二、创建我们自己的images

别人的镜像虽然很好,但是不一定就适合我们,我们可以对他们做一些改变,有两个方法

1.第一个方法使用docker commit来扩展一个image,先使用image容器,更新后提交结果到新的image

[root@yankai ~]# docker run -it docker.io/centos /bin/bash
[root@da131594c82b /]# 

注意:一定要记住容器的id以上红色标识

在容器中添加:mariadb-server应用

[root@da131594c82b /]# yum -y install mariadb-server

Docker技术剖析--docker image管理_第3张图片

2.当结束后,我们使用exit退出。现在我们的容器已经被我们改变了。使用dockercommint命令来提交相应的副本

[root@yankai ~]# docker commit -m "added mariadb app" -a "docker then" 2fcb38a4f8b3 centos:mariadb
sha256:f427f957e96c4187ebb85fd887d11ae0ef75725f2752b897e88b81db27d8b261

-m 来指定提交的说明信息,跟我们使用的版本控制一样 -a 可以指定更新的用户信息;之后是用来创建镜像容器的id 最后指定目标镜像仓库名和tag信息

3.使用docker images 查看新的镜像

[root@yankai ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              mariadb             f427f957e96c        4 minutes ago       453 MB
docker.io/centos    latest              50dae1ee8677        13 months ago       196.7 MB

之后可以使用新的镜像来启动容器

[root@yankai ~]# docker run -it centos:mariadb /bin/bash
[root@47b6e0897913 /]# uname -r
3.10.0-514.el7.x86_64

(2)第二个方法:从dockerfile来创建image

使用docker commit来扩展一个image简单,但它不容易在一个团队中共享它。我们使用docker build 来创建一个新的image。所以我们需要创建一个dockerfile,包含一些如何我们创建我们的image的指令,好的。接下来我们创建一个dockerfile

[root@localhost ~]# mkdir -p /docker/httpd
[root@localhost ~]# cd /docker/httpd/
[root@localhost httpd]# vim Dockerfile

MAINIAINER:是维护者信息

RUN开头指令会在创建中运行,比如安装一个软件包,在这里使用yum来安装一个软件

编写完成dockerfile后可以使用docker build来生成镜像。

Docker技术剖析--docker image管理_第4张图片

-t是标记来添加的tag,指定新的镜像的用户信息。是dockerfile所在的路径(当前目录)也可以替换为一个具体的dockerfile路径。

(3)查看新生成的镜像

[root@yankai httpd]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              httpd               fc33b28bf292        27 seconds ago      520.6 MB
centos              mariadb             69d50d1f1869        4 minutes ago       453 MB
docker.io/centos    latest              50dae1ee8677        13 months ago       196.7 MB

从我们新建的image开启容器

[root@yankai httpd]# docker run -it centos:httpd /bin/bash
[root@8c400a08888e /]# ls
anaconda-post.log  bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

三、从本地载入images

要从本地文件导入一个镜像很简单,例如我下载了一个centos6的镜像如何从本地文件导入呢?

1)我们先把下载好的镜像通过远程终端RZ先导入到linux

Docker技术剖析--docker image管理_第5张图片

2)我们先查看我们目前的images

Docker技术剖析--docker image管理_第6张图片

3)随后我们把centos6镜像载入

[root@yankai ~]# docker load  < centos6.tar
2714f4a6cdee: Loading layer [==================================================>] 202.3 MB/202.3 MB

导入后我们查看images

[root@yankai ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              httpd               fc33b28bf292        9 minutes ago       520.6 MB
centos              mariadb             69d50d1f1869        13 minutes ago      453 MB
docker.io/centos    latest              50dae1ee8677        13 months ago       196.7 MB
docker.io/centos    centos6             cf2c3ece5e41        14 months ago       194.6 MB

Docker技术剖析--docker image管理_第7张图片

四、上传镜像

用户可以通过docker push命令来把自己创建的镜像上传到仓库中来共享,比如,用户在dockerhub上,完成注册后可以通过推送自己的镜像到仓库中,这里有两种方法可以注册一个docker hub账户 这里我们直接通过网站https://hub.docker.com 接下来就是注册的步骤。

1.通过浏览器打开https://hub.docker.com

Docker技术剖析--docker image管理_第8张图片

2.然后注册完成后我们点击右上方的sign in来登陆。

这里就不再演示了。。

如何上传自己的镜像到docker hub呢?

1)docker login 输入自己的用户名-密码。

2)使用docker push命令上传

[root@yankai ~]# docker push bpcyh1/httpd:v1
The push refers to a repository [docker.io/bpcyh1/httpd]
802b9e516f89: Preparing 
4ce561d10290: Preparing 
b73bcd88057a: Preparing 
0fe55794a0f7: Preparing

删除本地images

docker rmi命令 比如我们要删除centos6镜像

Docker技术剖析--docker image管理_第9张图片

docker ps命令

docker ps -a

[root@yankai ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
8c400a08888e        centos:httpd        "/bin/bash"         31 minutes ago      Up 31 minutes                                      jovial_wozniak
c4f9b15385cb        docker.io/centos    "/bin/bash"         50 minutes ago      Exited (0) 35 minutes ago                          sharp_pasteur
a45310e161c5        docker.io/centos    "/bin/bash"         58 minutes ago      Exited (0) 55 minutes ago                          suspicious_bartik
a77bf0adbc0c        docker.io/centos    "/bin/bash"         About an hour ago   Exited (127) 58 minutes ago                        sharp_borg
2480c0a733bf        docker.io/centos    "/bin/bash"         About an hour ago   Exited (2) About an hour ago                       determined_mayer
f88bf6870452        docker.io/centos    "/bin/bash"         About an hour ago   Exited (137) 55 minutes ago                        evil_colden
48a0da59e6e4        docker.io/centos    "/bin/bash"         About an hour ago   Exited (137) 55 minutes ago                        angry_poitras
dd4518d54b25        docker.io/centos    "/bin/bash"         About an hour ago   Exited (2) About an hour ago                       big_swanson
28edd82fb3a8        docker.io/centos    "/bin/bahs"         About an hour ago   Created                                            sick_perlman
67d0369ebd41        docker.io/centos    "/bin/bash"         About an hour ago   Exited (0) About an hour ago                       trusting_sammet
83befbe01bf3        docker.io/centos    "/bin/bash"         About an hour ago   Exited (137) 55 minutes ago                        big_lalande
a33c1b53566f        docker.io/centos    "/bin/bash"         About an hour ago   Exited (0) About an hour ago                       condescending_elion
b4d5d73c3e81        docker.io/centos    "/bin/bas"          About an hour ago   Created                                            admiring_lichterman
b9197c4818dc        docker.io/centos    "/bin/bash"         About an hour ago   Exited (0) About an hour ago                       evil_saha
49edcdbaed74        docker.io/centos    "/bin/bash"         About an hour ago   Exited (1) About an hour ago                       dreamy_mcclintock

 

docker ps -h查看帮助

[root@yankai ~]# docker ps -h
Flag shorthand -h has been deprecated, please use --help


Usage:  docker ps [OPTIONS]


List containers


Options:
  -a, --all             Show all containers (default shows just running)
  -f, --filter value    Filter output based on conditions provided (default [])
      --format string   Pretty-print containers using a Go template
      --help            Print usage
  -n, --last int        Show n last created containers (includes all states) (default -1)
  -l, --latest          Show the latest created container (includes all states)
      --no-trunc        Don't truncate output
  -q, --quiet           Only display numeric IDs
  -s, --size            Display total file sizes

 

利用docker start命令可以将一个已经终止的容器启动运行也可以使用停止停止。重启容器restart这里就不做演示啦。

Docker技术剖析--docker image管理_第10张图片

用docker inspect来查看容器的详细信息

Docker技术剖析--docker image管理_第11张图片

谢谢观看,希望对您有所帮助

你可能感兴趣的:(Docker,Docker从入门到实践)