# docker 简介
为了避免项目移植到其他机器上时,出现环境配置不全,各种安装包缺失的问题。人们提出了 docker 这个工具,顾名思义 docker 的中文含义是码头工人,如下图 docker 的图标所示,我们可以理解为 docker 同时承载了项目源码和其对应的配置环境,利用它我们可以轻松地迁移我们的工程项目,不用重复为项目配置相应的环境。

相较于庞大,内存占用率高的虚拟机而言,docker 更加轻量级。docker 是 linux 容器的一种封装,提供了简单易用的容器使用接口。Linux 容器是对进程的一种封装,容器内的进程接触到的所有资源都是虚拟的,实现了与底层系统的隔离。
# 镜像和容器的区别
我在刚开始接触 docker 时,经常会搞混镜像(image)和容器(container)。简单而言,可以将镜像理解为容器的模版,我们通过复制镜像生成 n 个完全相同的容器,然后在容器中进行操作。每一个容器通过定制化的配置后都可以将其自身保存为一个新的镜像,上传发布到网上的仓库。
# docker 实用操作
- 
拉取镜像 1 docker pull [image_name] 
- 
交互式运行,通过镜像启动一个容器 1 docker run -i -t --name=[container_name] [image_name] 参数: -i: 交互式操作-t:终端--name:指定容器名称1 docker run -itd --name=[container_name] [image_name] -d:默认不进入容器
- 
查看 docker 信息 1 docker info 其中 Docker Root Dir是 docker 的根目录,所有容器都在该目录下的containers下
- 
查看容器 1 
 2
 3
 4
 5
 6
 7
 8查看活跃状态的容器 
 docker ps
 查看所有状态的容器
 docker ps -a
 查看容器信息
 docker inspect [docker-name]
 查看容器日志
 docker logs [docker-name]
- 
停止容器 1 docker stop [containerID] 停止的容器可以通过 restart 重启 1 docker restart [containerID] 
- 
进入容器 使用 -d参数后,容器启动后自动进入后台,此时想进入容器有两种办法- docker attach
- docker exec: 这种方法退出时,只会退出容器终端,不会导致容器停止
 
- 
退出容器但不关闭 - ctrl + p + q
 
- 
手动终止容器 1 docker kill [containerID] 
- 
删除容器 1 docker rm [containerID] 
- 
从宿主机向容器传输文件 1 docker cp /host/file [container_name]:/home/dir 
- 
容器将本机目录 /test挂载在容器的/home下1 docker run -it -v /test:/home [image_name] 
- 
容器改名 1 docker rename origin_name new_name 
- 
在容器内对宿主机上目录进行操作时,出现 "Permission denied" 的解决办法 1 docker run -it --privileged=true -v /test:/home [image_name] /bin/bash 
If Winter comes, can Spring be far behind?
——Percy Bysshe Shelley 《Ode to the West wind》
