继上一篇docker入门之后写一点使用的经验。

通过命令:docker run -it REPOSITORY或IMAGE ID   注:-it后面跟的字段可以通过下面指令获得

创建运行的容器,会进入一个伪终端,如果使用ctrl+D或者使用exist命令来退出伪终端,会造成容器也终止运行。正确推出伪终端的姿势是:ctrl+P之后再按ctrl+q   这样就能把伪终端与容器分离了。

Ps:到现在为止可以自己粗略自己发现一些命令了,使用docker --help可以查看到一些命令。其中attach的功能可以实现重新登录到容器中,只是这时候attach后面跟的是container id,记住是容器的id不时镜像的id,docker ps命令可获得。attach命令输入之后回车会停住,需要再回车才能进入伪终端。

创建镜像:

创建镜像与Windows平台上类比的话就相当于你在虚拟机里面装了个系统(比如win7),然后在系统里面装上你自己的应用或软件,然后你就可以不用在别的机器上重新装系统了,只需要克隆这个虚拟机到其他机器上用。

创建镜像有两种方法,一个是使用docker commit命令在公有仓库里面的镜像的基础上创建一个新的镜像,这种方式不适合一个团队正在使用和配置的镜像;另一个方法是使用配置文件的方式官方叫做Dockerfile,与之配合的命令是docker build。

接下来详细介绍第二种方法

1.cd ~ 回到自己的用户目录下(之所以这样做是因为官方教程里面说了一句如果你是在windows系统中使用docker,那么就需要cd到/c/user/your_user_name目录下,所以类推,linux上我就cd ~一下)

2.创建一个文件夹,并在文件夹下创建一个Dockerfile

mkdir fileName

cd fileName

touch Dockerfile

3.在Dockerfile中输入如下内容

# 井号实现注释

#必须第一行指出基础的镜像,这里使用ubuntu

FROM ubuntu:14.04

#创建者信息说明

MAINTAINER Kate Smith <ksmith@example.com>

镜像中需要运行的指令

RUN apt-get update && apt-get install -y ruby ruby-dev

RUN gem install sinatra

 

这是很简易的dockerfile,一般情况下,Dockerfile中包括四部分信息:基础镜像信息(必选),创建者信息(可选),镜像操作的指令(按需添加)和容器启动时执行的指令(按需添加)。

指令的格式是:指令   执行任务(原文为:INSTRUCTION statement)

RUN这条指令可以让任务命令在镜像中运行,前面用到的FROM,MAINTAINER都是命令,除了这三个还有:

ADD  <src>  <targetDirectory>  该指令可以实现将本地文件复制添加到容器中。<src>可以是Dockerfile所在目录的一个相对路径(文件或目录);<targetDirectory> 是容器中的路径,会被创建。还有一个命令是COPY,格式和add一样,实现复制本机文件到容器中,推荐使用COPY。

expose(暴露容器端口号)命令格式是:EXPOSE <PORT>  [<PORT>   <PORT>......]

例如:EXPOSE 8081 22 23    暴露这些端口可以供互联的系统使用,比如你想虚拟个Hadoop集群啊,内存数据库集群什么的。

其它命令cmd(可运行.sh文件),env(指定环境变量),entrypoint,volume,user(指定容器运行时的用户名),workdir,onbuild就不一一介绍了。

4.dockerfile创建完成之后使用docker build来创建新的镜像

docker build -t ouruser/sinatra:v2 .

注意命令最后的点,这个是需要的,表示我们的Dockerfile在当前文件夹中。-t 指定ouruser拥有这个新镜像,sinatra指定镜像名,v2是版本号

5.从我们自己创建的镜像创建一个新的容器运行

docker run -t -i ouruser/sinatra:v2 /bin/bash

Ps:创建镜像这一部分我基本是翻译了官网的教程,但也补充了其他的资料。当你创建本地的镜像是基于ubuntu或者centos这些系统的时候,你可以先用docker pull从公有仓库中拉一个系统下来,拉镜像的时间根据你的网络资源而定,可能非常长,我就拉了很长时间,中间还是失败过好几次。本文创建镜像的部分没有截图实例就是因为ubuntu镜像没有拉下来,我就只是翻译了一下官网的教程,感觉应该没什么问题,后续有时间把图都补上。这两篇文章对付简单的应用大概都能应付了,可能有些指令什么的我没有详细介绍,但是你只要使用docker --help就可以查看到有哪些命令了,在使用docker subcommand --help 就可以查看命令具体有哪些参数可以设置了。

docker学习之二镜像创建的更多相关文章

  1. InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移

    系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...

  2. Docker学习(二): 镜像的使用与构建

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  3. docker学习笔记二:常用命令

    docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...

  4. Docker学习笔记二(linux下安装Docker)

    Docker学习笔记二(linux下安装Docker) 1.在线安装linux Docker 这种方式首先要保证linux 环境下可以上网,当然,小编是在自己的电脑上安装了虚拟机,在虚拟机上安装了,l ...

  5. Docker学习(二)docker镜像操作

    上一篇:docker学习(一)在centos7上安装docker 列出所有docker镜像 docker images 拉取镜像 docker pull 镜像名 我这里一Tomact为例 首先在Doc ...

  6. Docker学习笔记--2 镜像的创建

    如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等应用服务环境,有下面三种方法: 1,根据系统镜像创建Docker容器,这时容器就相当于是一个虚拟机,进入容 ...

  7. Docker入门之二镜像

    Docker大部分的操作都是围绕三大核心概念:镜像.容器.仓库.学Docker首先得了解这几个词.这几个词可能平时也会有涉及,但Docker中可能不是同样得概念. 一.三大核心概念 镜像:可能在安装软 ...

  8. 【Docker学习之二】Docker部署安装

    环境 docker-ce-19.03.1-3.el7.x86_64 一.Docker的部署安装 Docker采用Linux(内核)技术,所以只能运行在Linux上,官方说Linux kernel至少3 ...

  9. Docker那些事儿之镜像创建

    之前已经了解了docker的基本使用方式,简单的上手,也能让大部分人了解到这个技术的使用方法,今天继续说明docker如何构建自己所需要的镜像,开发人员掌握使用基础即可,有兴趣的可以自行深入研究 前言 ...

随机推荐

  1. JavaScript中的 offset, client,scroll

    在js 中我们要用到的 offset, client, scroll 在这我把自己理解的给大家分享一下. offset div.offsetTop 指div距离上方或上层控件的距离,单位像素 div. ...

  2. Linq学习笔记四之linq to sql 的基本操作

    首先需要在项目中新增一个 linq  to sql 的服务 新增项,数据,LINQ TO sql 类的这个方法 第二步需要一个model类,用作映射 [Table] public class S_ZD ...

  3. em与px换算关系以及常用列表

    1.任意浏览器的默认字体大小都是16px.2.所有未经调整的浏览器都符合: 1em=16px 12px=0.75em 10px=0.625em3.为了简化font-size的换算,在body选择器中声 ...

  4. C++基础知识面试精选100题系列(11-20题)[C++ basics]

    [原文链接] http://www.cnblogs.com/hellogiser/p/100-interview-questions-of-cplusplus-basics-11-20.html [题 ...

  5. Linux下安装jetty服务器

    jetty和我们通常使用的tomcat一样,是一个开源的servlet容器,特点是轻量易部署,一方面jetty可以作为web容器使用,另一方面也是最一般的方式是jetty以一组jar包的形式发布,所以 ...

  6. 应用市场中包名(package name)的唯一性

    一般的应用商店,在开发者上传应用(APP)的时候,都会对应用的包名进行唯一性的校验.如果此时,用户上传的应用的包名与数据库中的已有的APP的包名一样,那么正常情况下,该应用就不能上传,而弹出提示说,该 ...

  7. cron 任务

    相关文件 /etc/crontab /etc/cron.deny 设置哪个用户有权限运行 cron 任务 /var/spool/cron/root /var/spool/cron/user /var/ ...

  8. oracle‘s package,function,proceture编译时无响应(解决)

    在对Procedure.Function或Package进行Debug时,如果长时间没有操作,公司的防火墙会杀掉会话连接.这个时候数据库不会主动的释放会话的资源,如果再次对Procedure.Func ...

  9. fibonacci数列(五种)

    自己没动脑子,大部分内容转自:http://www.jb51.net/article/37286.htm 斐波拉契数列,看起来好像谁都会写,不过它写的方式却有好多种,不管用不用的上,先留下来再说. 1 ...

  10. (转)Redis使用场景及使用经验

    Redis is an open source (BSD licensed), in-memory data structure store! 刚刚结束一个游戏类的活动项目,由于预估的参与人数较多,产 ...