获取镜像
docker pull ubuntu:16.04
列出镜像
docker image ls
镜像/容器 体积
docker system df
虚悬镜像
# 查看:
docker image ls -f dangling=true
# 删除所有:
docker image prune
中间层镜像
查看:
docker image ls -a
列出 部分镜像
docker image ls ubuntu
以特定格式显示
# 显示id:
docker image ls -q
# 显示id和Repository:
docker image ls --format "{{.ID}}:{{.Repository}}"
# 以表格等距显示
docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
删除本地镜像
docker image rm [选项] <镜像1> [<镜像2> ...]
创建一个web服务器
docker run --name webserver -d -p 80:80 nginx
进入容器:
docker exec -it webserver bash
查看容器改动:
docker diff webserver
容器
从image新建并启动一个新的容器
docker run -it ubuntu:14.04 /bin/bash
启动一个已经终止的容器
docker container start
后台运行容器 -d
docker run -d ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
查看容器内容信息
docker container ls
查看终止状态的容器
docker container ls -a
获取容器的输出信息(后台运行的容器)
docker container logs [container ID or NAMES]
终止容器
docker container stop [container ID]
重新启动容器
docker container start [container ID]
进入容器
(针对后台运行的容器)
* docker exec (推荐)
* docker attach
docker exec -it [container ID] bash
docker attach [container ID]
导出/导入 容器
# 导出容器快照到本地文件
docker export [container ID] > ubuntu.tar
# 从本地快照导入容器
cat ubuntu.tar | docker import - test/ubuntu:v1.0
# 通过 url 导入
docker import http://example.com/exampleimage.tgz example/imagerepo
docker load 和 docker import 的区别
- docker load :导入镜像存储文件到本地镜像库,会保存完整记录。
- docker import :导入一个容器快照到本地镜像库,丢弃所有的历 史记录和元数据信息(即仅保存容器当时的快照状态)
删除容器
# 删除一个处于终止状态的容器
docker container rm [container ID]
# 删除运行状态的容器 使用参数 -f
docker container rm -f [container ID]
# 删除所有处于终止状态的容器
docker container prune
好像可以直接使用docker rm [container ID]
dicker 数据管理
在容器中管理数据的两种方式
* 数据卷(Volumes)
* 挂载主机目录(Bind mounts)
数据卷
数据卷的特性:
* 数据卷可以在容器之间共享和重用
* 对 数据卷 的修改会立马生效
* 对 数据卷 的更新,不会影响镜像
* 数据卷 默认会一直存在,即使容器被删除
数据卷基本命令
# 创建数据卷
docker volume create my-vol
# 查看所有数据卷
docker volume ls
# 查看制定数据卷的信息
docker volume inspect my-vol
启动一个挂载数据卷的容器
docker run -d -P \
--name web \
# -v my-vol:/wepapp \
--mount source=my-vol,target=/webapp\
training/webapp \
python app.py
查看容器的数据卷信息
# 以 web 容器为例
docker inspect web
# 返回一个字典,数据卷的信息显示在“Mounts”Key 下
删除数据卷
docker volume rm my-vol
删除所有未使用的数据卷
docker volume prune
挂载主机目录
与挂载数据卷不同的是在创建容器时source为一个本地地址
举个栗子:
docker run -d -P \
--name web \
# -v /src/webapp:/opt/webapp:ro \
--mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \
training/webapp \
python app.py
一个Dockerfile 示例:
FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
构建镜像:
在 Dockerfile 文件所在目录执行:
docker build -t nginx:v3 . (后边是有一个点的)