docker是目前最流行的虚拟化技术。
本篇文章主要介绍docker的基本概念以及初步尝试使用docker技术。
docker是什么
Docker 属于 Linux容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker将应用程序与该程序的依赖,打包在一个文件里面。只要运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。
docker好在哪
- 更高效的利用系统资源
- 更快速的启动时间
- 一致的运行环境
- 持续交付和部署
- 容易迁移、维护和扩展
docker专有名词
- 镜像,image, 包括各种环境的定义和说明。
- 容器,container, 是一个镜像的运行实体,不同容器之间是相互隔离的。
- 仓库,镜像的仓库,用于用户发布自己的镜像或者查找自己需要的镜像,目前最大的公开仓库为Docker hub,一个项目star越多,说明项目越好越稳定。

常用命令
启动docker
如果是mac或者windows用户,可以直接使用Docker Desktop来可视化处理
如果是linux用户,需要通过命令行来启动
1
| sudo service docker start/stop/restart
|
使用docker
- help帮助命令
通过这条命令可以查看与docker的镜像相关的命令
将image替换为container,则可以查看到关于container的相关帮助。
同时,可以进一步查看相关命令的细节,比如下面的命令就可以查看image下prune命令的细节。
1
| docker image prune --help
|
- 搜索并拉取镜像
1 2 3 4 5 6 7 8 9
| // 搜索与ubuntu相关的image docker search ubuntu
// 拉取镜像到本地 docker pull ubuntu
// 如果没有特别声明tag,会默认使用latest标签。 // 当然可以去docker hub去查找image并查看更加细节的东西,比如版本信息,然后在拉取的时候可以指定版本。 docker pull ubuntu:18.04
|
- 列出当前本地的所有镜像
1 2 3
| docker images 或者 docker image ls
|
如果想同时查看中间层镜像
1 2 3
| docker images -a 或者 docker image ls -a
|
- 删除本地镜像
1 2 3 4 5 6 7 8 9 10 11 12
| // 删除固定的某个镜像 docker rmi imageid docker image rm imageid
//删除所有玄虚镜像 docker image prune
// 删除所有玄虚镜像和未使用的景象 docker image prune -a
// 删除所有仓库名为redis的镜像 docker image rm $(docker image ls -q redis)
|
- 启动一个容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| // 从image启动一个容器 docker run -it --name ubuntu ubuntu:18.04 /bin/bash -i : Keep STDIN open even if not attached 即使没有连接,也要保持标准输入保持打开状态 -t : Allocate a pseudo-TTY 分配一个伪tty -name ubuntu : 为当前容器分配名字为ubuntu ubuntu:18.04 :要运行的镜像 /bin/bash :要执行的命令。
还有一个参数非常常见 -d : Run container in background and print container ID 在后台运行容器,且打印容器id
// 把之前停止的容器重新启动 docker start containerid docker attach containerid
|
使用docker run命令来启动容器,docker在后台运行的标准操作包括
1. 检查本地是否存在指定的镜像,不存在则从公有仓库下载
2. 使用镜像创建并启动容器
3.分配一个文件系统,并在只读的镜像层外面挂载一层可读可写层
4.从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中去
5.从地址池分配一个ip地址给容器
6.执行用户指定的应用程序
7.执行完毕之后容器被终止
需要注意的是,对于容器要执行的命令而言,如果执行结束,那么容器就会关闭。
- 查看当前正在运行的容器
如果还想查看已经退出的容器
- 连接一个执行之中的容器
1
| docker container exec -it containerid
|
- 退出正在运行的容器
- 查看镜像所占空间
- 删除某些名称中含有dingms的container
1
| docker container rm $(docker ps -a |grep dingms | awk '{print $1}')
|
- 守护态进程
很多时候,需要让docker在后台运行而不是直接把结果输出到当前宿主下面,这个时候可以用守护态运行。
1 2 3 4 5 6 7 8
| // 没有使用守护态,始终在本地终端输出 docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
//使用守护态,不在本地终端输出,但是在最后结果输出 docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" // 查看当前contain docker container ls docker container logs containerid
|
- 终止某个容器
1
| docker container stop containerid
|
对于正在运行中的容器,重新启动
1
| docker container restart containerid
|
- 进入容器
1 2 3 4 5 6
| docker attach containerid
docker exec -it containerid bash
用attach进入终端之后,如果exit会直接让容器终止。 但是exec通过exit退出之后,容器不会终止。
|
- 镜像打包和加载
1 2 3 4
| // 打包镜像 docker save -o ~/Desktop/kuakua.tar kuakua:latest // 加载tar包到对应的镜像 docker load -i ~/Desktop/kuakua.tar
|
- 导出和导入容器
1 2 3 4 5 6
| // 导出容器快照文件到本地文件 docker export containerid > name.tar // 从容器快照文件再导入为镜像 cat name.tar | docker import - test/name:v1.0 // 查看所属镜像 docker images
|
从网上找到一个非常棒的图

参考文章
- Docker 从入门到实践
- Docker-cli官方文档
- 30 分钟快速入门 Docker 教程