docker简介
- Docker 镜像(Images)
Docker 镜像是用于创建 Docker 容器的模板。 - Docker 容器(Container)
容器是独立运行的一个或一组应用。 - Docker 客户端(Client)
Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。 - Docker 主机(Host)
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 - Docker 仓库(Registry)
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 - Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
- Docker Machine
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
容器运行载体 管理引擎
一次构建处处运行
镜像 image 类
容器 container 实例
仓库 registry
容器使用镜像创建的运行实例
查看 系统信息(版本 内核)
uname -r
cat /etc/redhat-release
docker是怎么工作的
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。
为什么docker比VM快
- docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
- docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。
安装
CentOS 6.8
yum install -y epel-release
yum install -y docker-io
# 安装后的配置文件/etc/sysconfig/docker
service doceker start
阿里云
配置加速地址
other_args="--registry-mirrors=https://xxxxx.mirror.aliyuncs.com"
service docker restart
ps -ef|grep docker
CentOS 7
# 先卸载一下已安装的docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装 组件
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 添加 远程仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker组件
$ sudo yum install docker-ce docker-ce-cli containerd.io
# docker版本列表
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
# 安装对应的版本
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
# 启动
$ sudo systemctl start docker
# helloworld
$ sudo docker run hello-world
配置加速地址
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://gxkkh7xj.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
网易云 [http://hub-mirror.c.163.com]
hello world
docker run hello-world
命令
帮助命令
docker info
docker version
docker --help
镜像命令
docker images
REPOSITORY: 表示镜像仓库源
TAG: 镜像的标签
IMAGE ID: 镜像ID
CREATED: 镜像创建时间
SIZE: 镜像大小
- -a: 列出本地所有镜像(含中间映像层)
- -q: 只显示镜像ID
- –digests: 显示镜像的摘要信息
- –no-trunc: 显示完整的镜像信息
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像
docker search [OPTIONAS]某个镜像名字
搜索镜像
- -s [OPTIONAS]: 列出收藏数不小于指定值的镜像
- –no–trunc: 显示完整的镜像描述
- –automated: 只列出automated build类型的镜像
docker pull 某个镜像名字[:tag]
下载镜像
docker rmi [OPTIONS]某个镜像名字[:tag]
删除镜像
docker rmi [OPTIONS]某个镜像名字[:tag] [OPTIONS]某个镜像名字[:tag] [OPTIONS]某个镜像名字[:tag]…
docker rmi -f $(docker images -qa)
- -f: 强制删除
容器命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
新建并启动容器
OPTIONS:
- –name=“容器新名字”: 为容器定一个名称
- -d: 后台运行容器,并返回容器ID,启动守护式容器
- -i: 以交互模式运行容器,通常与 -t 同时使用
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
- -P: 随机端口映射
- -p: 指定端口映射
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
docker ps [OPTIONS]
雷处当前所有正在运行的容器
OPTIONS:
- -a: 列出当前所有正在运行的容器+历史上运行过的
- -l: 显示最近创建的容器
- -n: 显示最近n个创建的容器
- -q: 静默模式,只显示容器编号
- –no-trunc: 不截断输出
使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash
退出容器
exit 容器停止退出
ctrl+P+Q 容器不停止退出
docker start 容器ID或者容器名
启动容器
docker restart 容器ID或者容器名
重启容器
docker stop 容器ID或者容器名
停止容器
docker kill 容器ID或者容器名
强制停止容器
docker rm 容器ID
删除已停止的容器
docker rm -f 容器ID
强制删除
一次性删除多个 (列出所有的 容器编号)
- docker rm -f $(docker ps -a -q)
- docker ps -a -q | xargs docker rm
docker run -d 容器名
启动守护式容器
docker ps 不存在这个后台启动的容器
docker logs -f -t --tail 容器ID
查看容器日志
- -t: 加入时间戳
- -f: 跟随最新的日志
- –tail: 数字显示最后多少条
docker top 容器ID
查看容器内运行的进程
docker inspect 容器ID
查看容器内部细节
docker exec -it 容器ID bashShell
docker attach 容器ID
进入正在运行的容器并以命令行交互
attach 直接进入容器启动命令的终端,不会启动新的进程
exec 在容器中打开新的终端,并且可以启动新的进程
docker cp 容器ID:容器内路径 目的主机路径
从容器拷贝文件到主机上