docker image
基础镜像: 没有父镜像的镜像
镜像获取:sudo docker pull ubuntu:12.04 == sudo docker pull registry.hub.docker.com/ubuntu:12.04
源配置:
{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}
该链接为中科大加速器地址,无需注册。
执行命令生效
systemctl daemon-reload
systemctl restart docker
容器启动:
sudo docker run -t -i ubuntu:14.04 /bin/bash
容器更改提交:
docker tag ubuntu:15.10 runoob/ubuntu:v3 可以对这个版本打标签,打完标签后会生成新的镜像
sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
其中,-m 来指定提交的说明信息 -a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。
Dockerfile (每一条指令都是镜像的一层)
# This is a comment
FROM ubuntu:14.04 #指定基础镜像
LABEL version="1.0" 为镜像指定标签
MAINTAINER "donghao" 指定作者
ENV <key>=<value> ... 指定虚拟环境
语法有两种
1. ENV <key> <value>
2. ENV <key>=<value> ...
两者的区别就是第一种是一次设置一个,第二种是一次设置多个
Docker容器
容器的启动
docker run ubuntu:14.04 /bin/bash 'docker started'
docker run -itd ubuntu:14.04 bash # 启动一个 bash 终端,允许用户进行交互
-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开
-d 守护态形式运行
docker start containerID
执行步骤
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
导出和导入容器
导出:
sudo docker export 7691a814370e > ubuntu.tar
导入:
cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0
URL形式导入:
sudo docker import http://example.com/exampleimage.tgz example/imagerepo
删除长在运行的容器
docker rm -f xxx