Docker 是一个卡圆的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何流行的LInux机器上,也可以实现虚拟化。
容器时完全使用沙箱机制,相互之间不会有任何接口,容器性能开销极低。
Docker的应用场景
- web应用的自动化打包和发布
- 自动化测试和持续集成,发布
- 在服务型环境中部署和调整数据库和其他的后台应用
- 从头变异或者拓展现有的OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker架构
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (Redirecting…) 与 Docker 的守护进程通信 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
Docker常用命令
一般指令
#启动Docker
sudo systemctl start docker
#停止Docker
sudo systemctl stop docker
#普通重启
sudo systemctl restart docker
#修改配置后重启
sudo systemctl daemon-reload
sudo systemctl restart docker
#查看版本
docker version
#查看Docker信息
docker info
镜像命令
列出本机Docker 上已经安装的镜像:
docker images
搜索Docker hub上面的镜像
# 普通搜索
docker search tomcat
# 搜索star大于50的镜像实例
docker search -s 50 tomcat
从Docker Hub上面下载镜像
# 以下载tomcat为例
docker pull tomcat[:version]
删除本地的某一个镜像
# 以删除tomcat为例
docker rmi tomcat[:version]
# 通过镜像ID删除
docker rmi -f 镜像ID
# 通过镜像ID删除多个
docker rmi -f 镜像名1:TAG 镜像名2:TAG
# 删除全部
# docker images -qa : 获取所有镜像ID
docker rmi -f $(docker images -qa)
镜像打包与运行
#打包一个我们自家的tomcat
docker commit -a sunwukong -m="package my tomcat" 要打包的镜像ID sunwukong/tomcat:1.0
# -a : 作者名称
# -m : 打包信息
#启动我们自己打包生成的 tomcat
docker run -it -p 7700:8080 sunwukong/tomcat:1.0
容器命令
启动容器
#如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
$ docker pull ubuntu
#以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
$ docker run -it ubuntu /bin/bash
# -i: 交互式操作。
# -t: 终端。
# ubuntu: ubuntu 镜像。
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 #/bin/bash。
#要退出终端,直接输入 exit:
#后台运行
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
######################################################################
# 新建并进入容器,最后一个为本地容器的ID
docker run -it --name="rivercentos001" 9f38484d220f
# 为容器启一个名称
-name="新容器名称"
# 后台运行容器,并返回容器ID,也就是启动守护士容器
-d
# 以交互模式运行容器,通常与-t同时使用.
-i
# 为容器重新分配一个伪终端,通过与-i同时使用
-t
# 随机端口映射 [大写P]
-P
# 端口映射 [小写P]
-p
# 数据卷 加参数 ro:容器内的目录只读,不可写
-v /宿主机绝对路径目录:/容器内目录[:ro] 镜像名
查看当前正在运行的Docker容器
docker ps
# 参数
# 列出当前正在运行的以及历史上运行过的
-a
# 显示最近创建的容器
-l
# 显示最近创建的N个容器
-n
# 静默模式,只显示容器编号
-q
# 不截断输出
--no-trunc
复制代码
退出容器
# 退出并停止
exit
# 容器不停止退出
ctrl+P+Q
启动容器
docker start 容器ID或容器name
重启容器
docker restart 容器ID或容器name
停止
docker stop 容器ID或容器name
强制停止
docker kill 容器ID或容器name
删除容器
# 删除已经停止的容器
**docker rm 容器ID或容器name**
# 强制删除已经停止或正在运行的容器
docker rm -f 容器ID或容器name
一次性删除所有正在运行的容器
docker rm -f $(docker ps -qa)
attach 命令与 exec
# 重新进入容器
docker attach 容器ID或容器名称
#
docker exec -it 容器ID或容器名称 /bin/bash
从容器内拷贝文件到宿主机
docker cp 容器ID或容器名称:/文件路径与文件名 宿主机地址
资料来源,菜鸟教程,以及同事笔记