1. 拉取镜像

在之前呢写到了docker的导入和导出,本文主要将的是docker镜像和仓库。

docker pull/run 都可以进行对镜像的拉取操作,区别就是docker pull仅仅将仓库中的镜像拉取到本地,而docker run是先检查本地是否有需要的镜像,若没有的话就会从仓库中拉取到本地,且直接创建容器运行。
[[email protected] ~]# docker pull centos
可以看到docker pull仅仅是将镜像拉取到本地,之后并没有进行下一步的操作。

26660-a6vx3x9znwf.png

执行docker run可以看出,docker先再本地的仓库查找是否有作为容器启动的镜像,如果没有就会去公共仓库拉取镜像到本地,随后启动。
[[email protected] ~]# docker run -tid --name centos centos /bin/bash

09619-2m93xhqjr0b.png

2、用docker commit命令创建镜像
1)创建一个docker容器

  [[email protected] ~]# docker run -tid --name centos_1 vitotp/centos7.6 /bin/bash
  接下来需要再容器中安装写东西

2)安装apache服务

  [[email protected] /]# yum install -y httpd
  启动服务
  [[email protected] /]# systemctl restart httpd
  ???出问题了,略微思考了下,貌似……可能……也许……我用的/bin/bash解释环境启动的容器,如果要另外运行需要/usr/sbin/init解释器。

26653-c6jsqvahu8.png

  所以……这里需要这样启动容器
  [[email protected] ~]# docker run -tid --privileged=true --name centos_1 -p 8001:80 0429a3daccd0 /usr/sbin/init
  [[email protected] ~]# docker exec -ti centos_1 /bin/bash
  安装、启动服务
  [[email protected] /]# yum install -y httpd
  [[email protected] /]# systemctl start httpd
  [[email protected] /]# echo "hello world" > /var/www/html/index.html
  接下来退出容器,从外面访问ip:8001端口
  [[email protected] ~]# curl 127.0.0.1:8001

71907-kz80y7yvar.png

也可以从浏览器访问

84158-5mhoyjlz3qr.png

经过上面的一系列操作,我们成功创建了一个容器,并且这个容器中安装了一个httpd服务,而且这个服务是正在运行的,现在我们想要将容器这个状态保存下来,就需要使用到docker commit命令了
执行命令:该命令的意思是指定需要提交的修改过的容器ID值,以及一个自定义的镜像和仓库的名称,需要注意的是,这里提交的镜像是和原本镜像有差异的部分,所以需要的空间大小非常小。

  [[email protected] ~]# docker commit centos_1 centos/apache

91084-d4omzin8x3w.png

  检查我们新创建的镜像
  [[email protected] ~]# docker image list

71822-cztcven6er.png

docker inspect命令
可以使用该命令查看镜像的详细信息。

  [[email protected] ~]# docker inspect centos/apache
  [
   {
    "Id": "sha256:aca06900c68268f77fcb89afca4957a4f42978276c7c743ea03a87e054069d35",
    "RepoTags": [
        "centos/apache:latest"
    ],
    "RepoDigests": [],
    "Parent": "sha256:0429a3daccd019b4fcd66ae5f1ccc00185ff7dce8d79307aef691462f03d977d",
    "Comment": "",
    "Created": "2020-09-28T01:01:29.769203137Z",
    "Container": 
    ...
    }
  ]

3. 使用Dockerfile构建镜像
需要知道Dockerfile集与DSL语法的指令构建一个Docker镜像,然后用docker build命令基于这个dockerfile中的指令构建一个新的镜像。

  首先创建一个目录,并且在这个目录中创建一个最初的dockerfile。
  [[email protected] ~]# mkdir httpd
  这时,我们已经创建了一个空的dockerfile。
  现在我们需要往dockerfile中写入代码,让其能够成功创建一个镜像。
  [[email protected] httpd]# vim Dockerfile 
  # This my dockerfile
  FROM centos
  RUN yum repolist
  RUN yum install -y httpd
  RUN systemctl start httpd
  RUN systemctl enable httpd
  RUN echo 'hello world2' > /var/www/html/index.html
  EXPOSE 80

现在来解释一下上面的意义:

  1、#代表的注释,后面其实没用,要不要都行。
  2、声明:需要以哪个镜像为基础,从这个镜像上运行容器
  3、第一条命令,更新缓存
  4、安装httpd服务,启动服务,将服务设置成开机zi'qi
  5、使用echo将hello world2导入至/var/www/html
  6、EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。

现在来运行一下吧

  [[email protected] ~]# docker build httpd
  Sending build context to Docker daemon  2.048kB
  Step 1/5 : FROM centos
   ---> 0d120b6ccaa8
  Step 2/5 : RUN yum repolist
   ---> Running in c6c450701163
  repo id                            repo name
  AppStream                          CentOS-8 - AppStream
  BaseOS                             CentOS-8 - Base
  extras                             CentOS-8 - Extras
  Removing intermediate container c6c450701163
   ---> 3f95f3579e41
  Step 3/5 : RUN yum install -y httpd
   ---> Running in 1079c085af5e
  CentOS-8 - AppStream                            1.8 MB/s | 5.8 MB     00:03    
  CentOS-8 - Base                                 957 kB/s | 2.2 MB     00:02    
  CentOS-8 - Extras                                11 kB/s | 8.1 kB     00:00    
  Dependencies resolved.
  ...
  Removing intermediate container e765ec8489cb
   ---> 85b44bbb09f8
  Successfully built 85b44bbb09f8

  [[email protected] ~]# docker image list

图片第一个镜像就是最新创建的镜像
73277-ppube03rayn.png

  现在我们可以从新的镜像中启动容器了。
  [[email protected] ~]# docker run -tid --name httpd02 --privileged=true -p 8002:80 85b44bbb09f8 /usr/sbin/init
  在浏览器中访问:ip:8002

48291-pwomytw6oq8.png

dockerfile 到这里呢就差不多了,后面还有一些东西,以后慢慢说吧。写这个的意义就是基础,简单的东西嘛。

最后修改:2020 年 09 月 28 日 10 : 39 AM
如果觉得我的文章对你有用,请随意赞赏