创建镜像

创建镜像的方法有三种:

  • 基于已有的容器创建
  • 基于本地模板导入
  • 基于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. LitePal + Gson + Volley的ORM框架尝试方案

    为了紧跟技术潮流,目前的项目开始采用ORM的思想进行重新设计. 数据库采用轻量级ORM框架LitePal,Json解析采用Gson,网络框架采用Volley. 如果只是单纯的将这些第三方框架引进来,事 ...

  2. 说说jsonp

    什么是jsonp jsonp充其量只能说是一种"方法".它可以让页面从其他域中获取资料.   首先要知道的是同源策略,在javascript中使用http请求(ajax)是会受到同 ...

  3. $.ajax、$.post、from表单序列化工具

    $.ajax\$.post <script type="text/javascript" language="javascript" src=" ...

  4. Winform开发框架之权限管理系统改进的经验总结(4)--用户分级管理

    在实际的系统应用环境中,用户的分级管理一般也是比较常见的功能,小的业务系统可以不需要,但是一般涉及到集团.分子公司.或者是事业单位里面的各个处室或者某某局的人员管理,这些分级管理就显得比较必要,否则单 ...

  5. 【WP8.1】富文本

    之前写过一篇WP8下的富文本的文章,但是写的不是很好,整理了一下,分享一下WP8.1下的富文本处理 富文本处理主要是对表情和链接的处理,一般使用RichTextBlock进行呈现 问题说明: 由于Ri ...

  6. 【ASP.NET MVC 】让@Ajax.ActionLink获取的数据不进Cache

    刚玩这个东西的时候,发现IE会进Cache,不管怎么删除,修改,后台删除了,前台还是一样,找了一下,HTML5只提供了 <meta http-equiv="pragma" c ...

  7. jquery ajax跨域访问webservice配置

    1.webservice方法 [System.Web.Script.Services.ScriptService] public class TestService : System.Web.Serv ...

  8. 【jQuery基础学习】03 jQuery中的事件与动画

    关于jQuery中的事件 js与HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的. jQuery增加并扩展了基本的事件处理机制,jQuery不仅提供了更加优雅的事件处理方法,而且极大地 ...

  9. Winform中的窗体一些常用属性

    Winform窗体的常用窗体属性 1)窗体全屏显示 this.DesktopBounds = Screen.GetWorkingArea(this);  //全屏显示桌面 注:可以放在初始化方法中,也 ...

  10. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...