Docker
镜像
- docker images 来列出本地主机上的镜像。
runoob@runoob:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB
ubuntu 15.10 4e3b13c8a266 4 weeks ago 136.3 MB
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
- 使用最新版本的ubuntu系统镜像来运行容器时,命令如下:
```
runoob@runoob:~$ docker run -t -i ubuntu:latest /bin/bash
root@d77ccb2e5cca:/#
```
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。
在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像
-- 使用 docker search 命令来搜索镜像
`runoob@runoob:~$ docker search httpd`
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
- 下载镜像。
docker pull httpd
docker pull ubuntu:13.10
- 使用这个镜像。
docker run httpd
- 镜像删除使用 docker rmi 命令
docker rmi hello-world
- 更新镜像
用镜像来创建一个容器。
docker run -t -i ubuntu:15.10 /bin/bash
docker run -t -i centos /bin/bash
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit 命令来退出这个容器。
通过命令 docker commit 来提交容器副本。
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2: 指定要创建的目标镜像名
docker images 命令来查看我们的新镜像 runoob/ubuntu:v2:
runoob@runoob:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/ubuntu v2 70bf1840fd7c 15 seconds ago 158.5 MB
使用我们的新镜像 runoob/ubuntu 来启动一个容器
docker run -t -i runoob/ubuntu:v2 /bin/bash
- 从零开始来创建一个新的镜像。
为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
runoob@runoob:~$ vi Dockerfile
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
runoob@runoob:~$ docker build -t runoob/centos:6.7 .
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
- 为镜像添加一个新的标签。
docker tag 860c279d2fec runoob/centos:dev
- 备份镜像
示例
docker save -o nginx.tar nginx:latest
或
docker save > nginx.tar nginx:latest
- 还原镜像的备份文件
示例
docker load -i nginx.tar
或
docker load < nginx.tar
容器
- 查看所有的容器:
docker ps -a 查看所有(包括退出的)
docker ps 查看正在运行的
CONTAINER ID IMAGE PORTS NAMES
fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
-l 查询最后一次创建的容器:
-a 查看所有(包括退出的)
可以看到容器端口 5000 绑定主机端口 32768。
所有的容器相关的命令都可以用 docker 指令 [容器ID|名字]
CONTAINER ID :容器id
NAMES:容器名字
- docker port[ID 或者名字] 可以查看指定 容器的某个确定端口映射到宿主机的端口号。
$ docker port fce072cc88ce
$ docker port grave_hopper
- docker logs [ID或者名字] 可以查看容器内部的标准输出。
docker logs amazing_cori
docker logs -f bf08b7f2cd89
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
-用 docker top [ID或者名字] 查看容器内部运行的进程
docker top wizardly_chandrasekhar
- 通过镜像创建一个容器
$docker run -t -i ubuntu:15.10 /bin/bash
$docker run -itd --name ubuntu-test ubuntu /bin/bash
docker run -d -P training/webapp python app.py
docker run -d -p 5000:5000 training/webapp python app.py
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
docker run [OPTIONS] 镜像:标签 [COMMAND] [ARG...]
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;允许你对容器内的标准输入 (STDIN) 进行交互。
-P:(大写) 随机端口映射,容器内部端口随机映射到主机的高端口
-p:(小写) 指定端口映射,是容器内部端口绑定到指定的主机端口。格式为:主机(宿主)端口:容器端口
默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。
--restart unless-stopped 遇到exit 自动重启 默认 no
[COMMAND]: 例如 /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
- docker port 命令可以让我们快捷地查看端口的绑定情况。
runoob@runoob:~$ docker port adoring_stonebraker 5000
127.0.0.1:5001
- 启动一个已停止的容器:
$docker start b750bbbcfd88
- 查看所有容器状态
$docker stats -a #包含退出的
docker stats --help #使用帮助
- 启动,停止,重启的镜像实例(容器)
docker start <容器 ID|名字>
docker stop <容器 ID|名字>
docker restart <容器 ID|名字>
- 进入,退出 的容器(镜像实例)
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
docker attach 1e560fca3906 #进入 exit退出时,结束镜像实例
docker exec -it 243c32535da7 /bin/bash #进入 exit退出时,不结束镜像实例
我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。
`root@0123ce188bd8:/# exit`
docker exec -it centos /bin/bash
- 导出本地某个容器到压缩文件作为备份
$ docker export 1e560fca3906 > ubuntu.tar
- 导入本地容器备份
cat /d/pub/mariadb.tar | docker import - test/ubuntu:v1
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
- 从url 导入
$ docker import http://example.com/exampleimage.tgz example/imagerepo
docker import /d/pub/data/mariadb.tar mariadb
或
cat /d/pub/data/mariadb.tar | docker import - mariadb
- 删除容器
docker rm -f 1e560fca3906
删除容器时,容器必须是停止状态,否则会报错误
- 清理掉所有处于终止状态的容器。
$ docker container prune