继上一篇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 <[email protected]> 镜像中需要运行的指令 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 就可以查看命令具体有哪些参数可以设置了。