创建镜像

创建镜像的方法有三种:

  • 基于已有的容器创建
  • 基于本地模板导入
  • 基于dockerfile

基于已有的容器创建

主要使用docker commit 命令,命令格式:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:tag]],主要包括:

-a ,--author=""  作者信息

-m,--message=""提交消息

-p,--pause=true 提交时暂停容器

例如:

# docker run -it centos /bin/bash
[root@d7e7ac1cbca2 /]# touch test [root@d7e7ac1cbca2 /]# ls
anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys test tmp usr var # docker commit -m "add a file" -a "kafeikele" de6 centos_copy
5d318afa9e6f7fdb755db97e29e3860b752f24b0b50e6bfa0b7e457450802c0e
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos_copy latest 5d318afa9e6f seconds ago 196.7 MB

基于本地模板导入

推荐使用openVZ提供的模板来创建

https://openvz.org/Download/templates/precreated

#cat centos-7-x86_64-minimal.tar.gz.crdownload | docker import - centos:latest

存出和导入镜像

# docker images

centos   7.1.      47a77536ad4c         weeks ago         212.1 MB

# docker save -o centos_7..tar centos:7.1. 

# docker load --input centos_7..tar

# docker load < centos_7..tar

基于dockerfile

之后的内容详细介绍

运行第一个docker容器

# docker run centos echo "hello world"
Unable to find image 'centos:latest' locally
latest: Pulling from centos
47d44cb6f252: Pull complete
168a69b62202: Pull complete
812e9d9d677f: Pull complete
4234bfdd88f8: Pull complete
ce20c473cd8a: Pull complete
centos:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide
security.
Digest: sha256:3aaab9f1297db9b013063c781cfe901e2aa6e7e334c1d1f4df12f25ce356f2e5
Status: Downloaded newer image for centos:latest
hello world

命令说明:

docker run :标准容器启动命令

centos: 镜像名称,默认是latest

echo和后面的内容:容器启动后执行的命令

启动一个交互式容器

docker run -it centos /bin/bash

*注:-t标示在心容器内指定一个伪终端或终端,-i标示允许我们对容器内的STDIN进行交互

以服务方式启动一个docker容器

如果你实际测试,估计也发现了,第一个“hello world”容器启动后执行完echo命令就退出了,而第二个交互式的容器,只要用户退出当前容器的bash,容器也退出了。这明显不能满足一个服务长时间运行的要求,好找docker run提供了‘-d’参数,可以实现将容器以守护进程方式启动。

docker  run -d  centos /bin/bash -c "while true; do echo Docker,hello world; sleep 2; 
179fc7f17c358834364d23112aa26d6a9e1875b2281563720425f62a8f1b5c33

这个长的字符串叫做容器ID。它是容器的唯一标识,所以我们可以使用它来操作容器,比如查看日志、停止或删除容器等。

dock logs 179fc7f17c358834364d

而为什么使用一个死循环来输出呢?

因为如果不是死循环,一次输出后,容器中的进程就结束了。容器的唯一进程都结束了,容器就停止了。因此如果要在容器中运行具体的服务,这项服务本身在容器中也必须是已守护进程方式运行的。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
主要选项:
-d : 以后台进行方式运行容器
-t : 提供一个伪终端
-i : 提供交互输入,一般与“-t”一起使用,如果只提供“-i”选项,则容器启动后是无法退出的
-v : 映射一个volume给容器,如: -p /data/www:/var/www/html
-p : 将容器的端口映射给宿主机,如: -p 8080:80

  

更多命令操作

Docker help

查看docker的子命令,直接敲docker或完整的docker help就可以了:

[root@VM_27_98_centos ~]# docker help

Commands:

    attach    Attach to a running container

    build     Build a container from a Dockerfile

    commit    Create a new image from a container's changes

    cp        Copy files/folders from the containers filesystem to the host path

    diff      Inspect changes on a container's filesystem

    events    Get real time events from the server

    export    Stream the contents of a container as a tar archive

    history   Show the history of an image

    images    List images

    import    Create a new filesystem image from the contents of a tarball

    info      Display system-wide information

    inspect   Return low-level information on a container

    kill      Kill a running container

    load      Load an image from a tar archive

    login     Register or Login to the docker registry server

    logs      Fetch the logs of a container

    port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT

    ps        List containers

    pull      Pull an image or a repository from the docker registry server

    push      Push an image or a repository to the docker registry server

    restart   Restart a running container

    rm        Remove one or more containers

    rmi       Remove one or more images

    run       Run a command in a new container

    save      Save an image to a tar archive

    search    Search for an image in the docker index

    start     Start a stopped container

    stop      Stop a running container

    tag       Tag an image into a repository

    top       Lookup the running processes of a container

    version   Show the docker version information

    wait      Block until a container stops, then print its exit code

常用命令

总结一下常用命令:

  • docker version 查看docker的版本号,包括客户端、服务端、依赖的Go等
  • docker info 查看系统(docker)层面信息,包括管理的images, containers数等
  • docker search <image> 在docker index中搜索image
  • docker pull <image> 从docker registry server 中下拉image
  • docker push <image|repository> 推送一个image或repository到registry
  • docker push <image|repository>:TAG 同上,指定tag
  • docker inspect <image|container> 查看image或container的底层信息
  • docker images TODO filter out the intermediate image layers (intermediate image layers 是什么)
  • docker images -a 列出所有的images
  • docker ps 默认显示正在运行中的container
  • docker ps -l 显示最后一次创建的container,包括未运行的
  • docker ps -a 显示所有的container,包括未运行的
  • docker logs <container> 查看container的日志,也就是执行命令的一些输出
  • docker rm <container...> 删除一个或多个container
  • docker rm `docker ps -a -q` 删除所有的container
  • docker ps -a -q | xargs docker rm 同上, 删除所有的container
  • docker rmi <image...> 删除一个或多个image
  • docker start/stop/restart <container> 开启/停止/重启container
  • docker start -i <container> 启动一个container并进入交互模式
  • docker attach <container> attach一个运行中的container
  • docker run <image> <command> 使用image创建container并执行相应命令,然后停止
  • docker run -i -t <image> /bin/bash 使用image创建container并进入交互模式, login shell是/bin/bash
  • docker run -i -t -p <host_port:contain_port> 将container的端口映射到宿主机的端口
  • docker commit <container> [repo:tag] 将一个container固化为一个新的image,后面的repo:tag可选
  • docker build <path> 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image
  • docker build -t repo[:tag] 同上,可以指定repo和可选的tag
  • docker build - < <dockerfile> 使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image
  • docker port <container> <container port> 查看本地哪个端口映射到container的指定端口,其实用docker ps 也可以看到

具体实例

  

docker images      

列出本地所有镜像,这些都是使用Dockerfile构建的镜像

 [root@VM_159_91_centos ~]# docker images

REPOSITORY                          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

pt/test                             v1                  2bfc44a4ad8f         days ago          196.5 MB

pt/tomcat_smq                       v1                  987073773bfd         days ago          754.9 MB

pt/tomcat_msg                       v1                  e82f90cf31c9         days ago          754.9 MB

centos                              latest              97cad5e16cb6         weeks ago         196.5 MB

registry                            latest              5c929a8b587a         weeks ago         33.27 MB

google/cadvisor                     latest              089623f9fe9e         weeks ago         47.79 MB

docker ps –a     

列出创建的所有容器 可以看到他们的状态都是exited,说明这些容器都是关闭状态,没有启动

[root@VM_159_91_centos ~]# docker ps -a

CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS                      PORTS                              NAMES

7f76edae027d        pt/test:v1               "/bin/bash"             days ago          Exited ()  days ago                                        jolly_torvalds     

05cf1c1dbf71        pt/tomcat_smq:v1         "/usr/local/smq-tomc   5 days ago          Exited (143) 20 hours ago                                      smq                

1c296658025a        pt/tomcat_msg:v1         "/usr/local/msg-tomc   5 days ago          Exited (143) 4 days ago                                        msg                

docker start 05cf1c  

启动容器,start后面跟的是容器ID,状态变成了up,且映射了一个端口,把容器里面的8080端口映射到宿主机的6180上面

[root@VM_159_91_centos ~]# docker start 05cf1c1dbf71

05cf1c1dbf71

[root@VM_159_91_centos ~]# docker ps -a

CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS                      PORTS                              NAMES

7f76edae027d        pt/test:v1               "/bin/bash"             days ago          Exited ()  days ago                                        jolly_torvalds     

05cf1c1dbf71        pt/tomcat_smq:v1         "/usr/local/smq-tomc   5 days ago          Up 28 seconds               0.0.0.0:6180->8080/tcp             smq      

docker stop 05cf1c   

关闭容器

[root@VM_159_91_centos ~]# docker stop 05cf1c1dbf71

05cf1c1dbf71

[root@VM_159_91_centos ~]# docker ps -a

CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS                       PORTS                              NAMES

7f76edae027d        pt/test:v1               "/bin/bash"             days ago          Exited ()  days ago                                         jolly_torvalds     

05cf1c1dbf71        pt/tomcat_smq:v1         "/usr/local/smq-tomc   5 days ago          Exited (143) 3 seconds ago                                      smq  

tag做标记

docker tag pt/tomcat_search:v1 IP:/pt/tomcat_search:v1

[root@VM_159_91_centos ~]# docker tag pt/tomcat_search:v1 IP:/pt/tomcat_search:v1     (ip填写自己的地址)

[root@VM_159_91_centos ~]# docker images

REPOSITORY                            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

pt/tomcat_search                      v1                  b5681406505f         days ago          755.2 MB

IP/pt/tomcat_search   v1                  b5681406505f         days ago          755.2 MB

push推送到镜像仓库

docker push IP:/pt/tomcat_search:v1   IP替换成自己的真实IP

[root@VM_159_91_centos ~]# docker push IP:/pt/tomcat_search:v1  

The push refers to a repository [IP:/pt/tomcat_search] (len: )

b5681406505f: Image already exists

4056159949ab: Image already exists

e9970493708d: Image already exists

a06c57a073b3: Image already exists

84551ae56dd4: Image already exists

49e5958f14aa: Image already exists

b484689c1f77: Image already exists

a336ec9f22dc: Image already exists

31f25b288c4a: Image already exists

65d689569b3f: Image already exists

411a7bdc8e8d: Image already exists

c863857a498b: Image already exists

97cad5e16cb6: Image already exists

05fe84bf6d3f: Image already exists

af0819ed1fac: Buffering to Disk

af0819ed1fac: Image successfully pushed

3690474eb5b4: Image already exists

Digest: sha256:e7d15d45fa95a9d0b8d2e7efbecfdce262f563e91a3af4a738970d55bbe69b55

Docker pull

在另外一台机器就可以pull下来刚才上传到镜像仓库里面的镜像

登录另外一台服务器

#docker pull IP:/pt/tomcat_search:v1

[root@VM_27_98_centos ~]# docker pull 10.104.159.91:/pt/tomcat_search:v1   

v1: Pulling from IP:/pt/tomcat_search

411a7bdc8e8d: Pull complete

65d689569b3f: Pull complete

31f25b288c4a: Pull complete

a336ec9f22dc: Pull complete

b484689c1f77: Pull complete

49e5958f14aa: Pull complete

84551ae56dd4: Pull complete

a06c57a073b3: Pull complete

e9970493708d: Pull complete

4056159949ab: Pull complete

b5681406505f: Already exists

3690474eb5b4: Already exists

af0819ed1fac: Already exists

05fe84bf6d3f: Already exists

97cad5e16cb6: Already exists

c863857a498b: Already exists

Digest: sha256:e7d15d45fa95a9d0b8d2e7efbecfdce262f563e91a3af4a738970d55bbe69b55

Status: Downloaded newer image for IP:/pt/tomcat_search:v1

#docker pull centos  下载镜像到本地
#docker create -it ubuntu:latest 创建一个容器
Unable to find image 'ubuntu:latest' locally
latest: Pulling from ubuntu
58488e45273c: Pull complete
25810b66099e: Pull complete
6571ba684f54: Pull complete
6ed49a73d8f0: Pull complete
c53777cbfc31: Pull complete
56465e1e45d2: Pull complete
Digest: sha256:312986132029d622ae65423ca25d3a3cf4510de25c47b05b6819d61e2e2b5420
Status: Downloaded newer image for ubuntu:latest
1330233e50aba7fca99e5914bd28dd89321bc86ec35fb36b4775d3424337c190
#docker start 1330233e

 进入容器

方法一:

# docker attach a54615a88787    后面跟的是容器名或者id,退出后docker容器也退出,不常用

方法二:

# docker exec -it a54615a88787 /bin/bash    跟的是容器名或者id

方法三:

yum -y install util-linux

# docker inspect --format "{{.State.Pid}}" stupefied_cray  最后面跟的是容器的名称

# nsenter --target  --mount --uts --ipc --net --pid

脚本
#!/bin/bash CNAME=$1 CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME) nsenter --target $CPID --mount --uts --ipc --net –pid

 2016-10-28 01:00:26 

  

docker-3 基础命令的更多相关文章

  1. 【03】循序渐进学 docker:基础命令

    写在前面的话 之前谈了啥是 docker 和怎么安装 docker,这里就谈谈 docker 命令的使用,当然,这里的使用可能只是局限于 docker 的增删查改. 另外需要注意的是,为了图片的美观, ...

  2. docker入门 基础命令 docker安装

    docker入门   在学一门新知识的时候,超哥喜欢提问,why?what?how? wiki资料 什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes ...

  3. Docker - 常用基础命令

    Docker命令分布 帮助信息 查看docker基本信息:docker info 查看docker版本信息:docker version 查看docker的所有命令及选项:docker --help ...

  4. (三)、Docker常用基础命令

    1.Docker 帮助命令 帮助命令: docker version 查看版本 docker info 查询docker详细信息 docker --help 查看命令帮助 2.Docker 镜像命令 ...

  5. Docker 学习 | 基础命令

    基本概念定义 基本组成 客户端/守护进程 C/S架构 本地/服务器 镜像 容器基石 只读文件系统 联合加载(union mount) 容器 通过镜像启动 执行 写时复制 仓库 公有 docker hu ...

  6. docker的基础命令

    详细命令参考http://www.runoob.com/docker/docker-command-manual.html

  7. Docker系列——Docker安装&基础命令

    Docker 概述 Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. ...

  8. 1. Docker基础命令

    本文简要介绍Docker的基础命令,目的在于快速入门Dokcer,Docker的完整命令可以参考Docker官方手册. 0. 安装Docker Docker当前分为企业版(Docker Enterpr ...

  9. Docker - Docker基础命令及使用

    Docker Docker - 官网 Docker - Hub GitHub - Docker Docker中文社区 Docker基础命令 Docker 查看帮助信息:docker --help 查看 ...

  10. Docker 容器安装及常用基础命令

    为什么用docker 作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势. Docker 在如下几个方面具有较大的优势: 更快速的交付和部署 Docker在整个开发周期都可以 ...

随机推荐

  1. 转载:全球首个微信小程序(应用号)开发教程!通宵吐血赶稿,每日更新!

    微信应用号(小程序,「应用号」的新称呼)终于来了! 目前还处于内测阶段,微信只邀请了部分企业参与封测.想必大家都关心应用号的最终形态到底是什么样子?怎样将一个「服务号」改造成为「小程序」? 我们暂时以 ...

  2. Qt Style Sheet实践(三):QCheckBox和QRadioButton

    导读 单选按钮(QRadioButton)和复选框(QCheckBox)是界面设计中的重要元素.单选按钮只允许用户在一组选项中选择一个,且当其中一个被选中的时候,按钮组中的其他单选按钮自动取消.复选框 ...

  3. 用Qt写软件系列四:定制个性化系统托盘菜单

    导读 一款流行的软件,往往会在功能渐趋完善的时候,通过改善交互界面来提高用户体验.毕竟,就算再牛逼的产品,躲藏在糟糕的用户界面之后总会让用户心生不满.界面设计需综合考虑审美学.心理学.设计学等多因素, ...

  4. MVC。Action方法,常用的返回类型有几种?

    常用的: 1,string,直接返回响应报文字符串 public ActionResult test(){return "哈哈";}2.ViewResult,ActionResul ...

  5. .Net Oauth2.0 第三方登录开发(Facebook ,LinkedIn )

    需求:OAuth2实现第三方网站授权并获取其相关数据来实现登录等功能 暂时支持Facebook ,LinkedIn ,基本大同小异,只是返回时的数据不同,需根据具体返回类型进行相应处理 1.OAuth ...

  6. java俄罗斯方块游戏代码

    java俄罗斯方块游戏代码: package com; import java.awt.Color; import java.awt.Graphics; import java.awt.event.K ...

  7. 与众不同 windows phone (52) - 8.1 新增控件: AutoSuggestBox, ListView, GridView, SemanticZoom

    [源码下载] 与众不同 windows phone (52) - 8.1 新增控件: AutoSuggestBox, ListView, GridView, SemanticZoom 作者:webab ...

  8. ActiveReports 报表控件官方中文入门教程 (2)-创建、数据源、浏览以及发布

    本篇文章将阐述首次使用 ActiveReports 报表控件 的方法,包括添加报表文件.绑定数据源以及如何发布报表等内容. ActiveReports 报表控件官方中文入门教程 (1)-安装.激活以及 ...

  9. SpreadJS 中应用 KnockoutJS 技术

    SpreadJS 支持 Knockout (KO)技术, KnockoutJS 是一个使用 MVVM 模式的 JavaScript 库,允许双向数据绑定,使数据和UI界面进行实时的交互更新.关于KO的 ...

  10. android 6.0 httpclient

    Apache HTTP Client RemovalAndroid 6.0 release removes support for the Apache HTTP client. If your ap ...