利用Dockerfile创建镜像以及容器的简单操作

创建镜像

使用docker commit创建

先下载镜像启动容器docker run -t -i training/sinatra /bin/bash
这里写图片描述

这里写图片描述

注意:要记住容器的ID,稍后会用到

在容器中添加json和gem 两个应用。gem install json

这里写图片描述
当结束后,我们使用 exit来退出,现在我们的容器已经被我们改变了,使用docker commit命令来提交更新后的副本。

输入命令:docker commit -m "Added json gem" -a "Docker Newbee" f4ce4dc3b5d7 ouruser/sinatra:v2
这里写图片描述
其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的ID 信息。

docker commit命令将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像

然后可以通过新的镜像来启动容器
docker run -t -i ouruser/sinatra:v2 /bin/bash
这里写图片描述

利用Dockerfile创建镜像

我们还可以使用docker build来创建一个新的镜像,所以,首先需要创建一个Dockerfile,包含一些如何创建镜像的指令。

1.新建一个目录和一个Dockerfile

# mkdir sinatra
# cd sinatra
# touch Dockerfile

Dockerfile中每一条指令都创建镜像的一层,例如:

# This is a comment 
FROM ubuntu:14.04 
MAINTAINER  Docker Newbee <newbee@docker.com> 
RUN apt-get -qq update 
RUN apt-get -qqy install ruby ruby-dev 
#RUN gem install sinatra

Dockerfile基本的语法是

使用  #来注释    
FROM 指令告诉 Docker 使用哪个镜像作为基础 
接着是维护者的信息   
RUN 开头的指令会在创建中运行,比如安装一个软件包,在这里使用apt-get来安装了一些软件

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么…

2.编写完成Dockerfile后可以使用docker build 来生成镜像

# docker build -t newuser/ubuntu:v3 . 

这里写图片描述
其中 -t 标记来添加tag,指定新的镜像的用户信息。“.”是Dockerfile所在的路径(当前目录),也可以替换为一个具体的 Dockerfile的路径。

通俗来讲:
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

可以看到 build进程在执行操作。它要做的第一件事情就是上传这个Dockerfile 内容,因为所有的操作都要 依据Dockerfile来进行。然后Dockfile中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交修改。当所有的指令都执行完毕之后,返回了最终的镜像 id。所有的中间步骤所产生的容器都被删除和清理了。

新的镜像创建完之后我们就可以使用`docker images来查看,然后就可以使用该镜像了

*注意一个镜像不能超过127层

Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。

输出Hello world,输入命令 docker run ubuntu:14.04 /bin/echo "Hello world"

这里写图片描述

各个参数解析:

docker: Docker 的二进制执行文件。

run:与前面的 docker 组合来运行一个容器。

ubuntu:14.04指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

/bin/echo "Hello world": 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 ubuntu14.04镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

3.运行交互式的容器

通过docker的两个参数 -i -t,让docker运行的容器实现”对话”的能力

docker run -i -t ubuntu:14.04 /bin/bash
各个参数解析:

-t:在新容器内指定一个伪终端或终端。

-i:允许你对容器内的标准输入 (STDIN) 进行交互。

这里写图片描述

可以使用ls查看当前目录下的文件,cat /proc/version查看当前系统的版本信息

运行exit命令或者使用CTRL+D来退出容器

4.后台模式

使用以下命令创建一个以进程方式运行的容器

docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
这里写图片描述
这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。

我们先使用docker ps来查看有没有在运行的镜像
这里写图片描述

CONTAINER ID:容器ID

NAMES:自动分配的容器名称

在容器内使用docker logs命令,查看容器内的标准输出,使用IDNAMES都可以
这里写图片描述
这里写图片描述

5.停止容器

使用docker stop来停止容器
这里写图片描述

可以用docker stop 1f728b8c210e也可以用docker stop stoic_mccarthy来停止容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值