三个组件分别是:
- Docker Client 是用户界面,它支持用户与Docker Daemon之间通信。
 - Docker Daemon运行于主机上,处理服务请求。
 - Docker Index是中央registry,支持拥有公有与私有访问权限的Docker容器镜像的备份。 三个基本要素分别是:
 - Docker Containers负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。
 - Docker Images是一个只读模板,用来运行Docker容器。
 - DockerFile是文件指令集,用来说明如何自动创建Docker镜像。
 
没有镜像名和标签的是镜像叫做虚悬镜像,是被同名镜像上传替代掉了名字。
docker ps或者docker container ls显示正在运行的容器docker ps -a显示所有容器docker kill $(docker ps -q)停止所有正在运行的容器docker rm -f $(docker ps -qa)或者docker container prune清理批量所有的容器docker rm -lv CONTAINER删除容器时 清理link 和volumedocker rmi $(docker images -qf "dangling=true")或者docker image prune清理所有悬挂(<none>)镜像docker ps -a --filter 'exited=0'清理退出状态为0的容器docker volume prune清理未使用的数据卷docker volume ls查看数据卷docker inspect --format '{{.State.Pid}} <CONTATNER ID or NAME>获取某个容器的PID信息docker inspect --format '{{ .NetworkSettings.IPADRESS}}' <CONTATNER ID or NAME>获取某个容器的IP地址docker start /stop /rm 47d62ca63a50启动,停止,删除某个容器,容器ID,前几个特有的字符也行,不跟其他容器ID相同就可以Ctrl+PandCtrl+Q退出shell到后台运行,docker exec -it $ID /bin/bash再次进入shell- 清理容器失败的时候,可以通过重启Docker Daemon来解决
# systemd sudo systemctl restart docker.service # initd sudo service docker restart 
- 
copy复制文件add仅限于自动解压文件时使用 - 
构建时尽量把语句写在一个
run里,可以清除不需要的 - 
FROM scratch从一个空的镜像开始创建 - 
容器是进程,
cmd是指定默认的容器主进程的启动命令的,容器中的应用都应该以前台执行,容器内没有后台服务的概念,对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程儿存在的,主进程退出,容器就失去了存在的意义,从而推退出,其他的辅助进程不是它需要关心的东西,主进程退出了,容器自然就退出了。 - 
ENTRYPOINT在指定容器启动程序及参数,和run一样的指令 
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo docker run hello-world
整体原则上,尽量保持镜像功能的明确和内容的精简,要点包括尽量选取满足需求但较小的基础系统镜像, 例如大部分时候可以选择debian:wheezy 或debian:jessie 镜像,仅有不足百兆大小; 清理编译生成文件、安装包的缓存等临时文件; 安装各个软件时候要指定准确的版本号,并避免引入不需要的依赖; 从安全角度考虑,应用要尽量使用系统的库和依赖; 如果安装应用时候需要配置一些特殊的环境变量,在安装后要还原不需要保持的变量值; 使用Dockerfile 创建镜像时候要添加.dockerignore 文件或使用干净的工作目录。
#命令
docker network create    Create a network
docker network connect   Connect a container to a network
docker network ls      List networks
docker network rm    Remove one or more networks
docker network disconnect   Disconnect a container from a network
docker network inspect    Display detailed information on one or more networks
#查看这三个容器的网络情况
docker network inspect container1 # docker0
docker network inspect container2 # docker0, mynet
docker network inspect container3 # mynet
# 进入container2内部
docker attach container2
ping -w 4 container3 # 可访问  
ping -w 4 container1 # 不可访问  
ping -w 4  172.17.0.2  # 可访问container1的IP  
# Ctrl+P+Q退出容器,让container2以守护进程运行
#  运行容器使用自定义网络,同时使用--link链接尚不存在的container5容器  
docker  run  --net=mynet  -itd  --name=container4  --link  container5:c5  busybox  
#  创建容器container5  
docker  run  --net=mynet  -itd  --name=container5  --link  container4:c4  busybox  
#  虽然是相同容器,但是在不同的网络环境连接中可以不同的alias链接  
docker  network  connect  --link  container5:foo  local_alias_net  container4  
docker  network  connect  --link  container4:bar  local_alias_net  container5
docker run  --net=mynet -itd --name=container6 --net-alias app busybox
docker network connect --alias scoped-app local_alias_net container6
docker run  --net=isolated_nw -itd --name=container7 --net-alias app busybox
docker network connect --alias scoped-app local_alias_net container7  
# 在container4中
docker attach container4
ping app # 访问container6的IP  
# 从container4中以守护进程运行退出:Ctrl+P+Q
docker stop container6
docker attach container4
ping app # 访问的container7的IP
在默认网络中使用link(legency link),有如下功能:
- 使用容器名作为hostname
 - link容器时指定alias: 
--link=<Container-Name>:<Alias> - 配合
--icc=false隔离性,实现容器间的安全连接 - 环境变量注入
 
自定义网络中使用docker net提供如下功能:
- 使用DNS实现自动化的名称解析
 - 一个网络提供容器的安全隔离环境
 - 动态地attach与detach到多个网络
 - 支持与
--link选项一起使用,为链接的容器提供别名(可以是尚不存在链接容器,与默认容器中–link使用的最大差别) 
默认网络中的link是静态的,不允许链接容器重启,而自定义网络下的link是动态的,支持链接容器重启(以及IP变化) 因此,使用--link时链接的容器,在默认网络中必须提前创建好,而自定义网络下不必预先建好。
使用docker network connetct将容器连接到新网络中时,用参数--link链接相同的容器时,可以指定不同的别名,它们是针对不同网络的。
build 构建或重建服务
help 命令帮助
kill 杀掉容器
logs 显示容器的输出内容
port 打印绑定的开放端口
ps 显示容器
pull 拉取服务镜像
restart 重启服务
rm 删除停止的容器
run 运行一个一次性命令
scale 设置服务的容器数目
start 开启服务
stop 停止服务
up 创建并启动容器