!!! 前面都是概念东西,可以直接跳到Docker命令就可以了(直接搜吧“Docker命令”,页内无法跳转,还在研究中……)
容器和虚拟化
容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行,容器可以理解为一个轻量级的沙箱
例如应用容器tomcat,就是把应用程序放到tomcat容器中,应用程序在容器中运行,通过容器暴露的端口,访问容器中的应用
容器是操作系统层实现的运行环境封装
虚拟化的概念,常用的虚拟机,例如VMWare和OpenStack
每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用
虚拟机是硬件支持加虚拟化技术实现的运行环境封装
理解Docker
我们造一间房子,需要设计图纸、搅拌水泥、搬砖头、砌墙......,然后才能把房子造好
下次换个地方造房子,上面的步骤需要再来一遍,非常麻烦。
假设我们有一种神奇的方式,可以把之前造的房子拷贝一份,然后把这个拷贝放到背包里,
带到新的需要造房子的地方,用这个拷贝复制出一间一模一样的新房子。这样就可以快速造出一模一样、分毫不差的房子了
这种神奇的方式就是Docker容器技术。房子的拷贝就是镜像(Image),放拷贝的背包就是仓库(Repository),用拷贝造出的新房子就是容器(Container)。
docker就是进程封装。启动一个docker容器就是启动一个封装的进程
Docker简介
<https://docs.docker.com/engine/install/centos/>
Docker是一个开源的应用容器引擎,基于GO语言开发
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
用于创建、管理和编排容器
Docker可以理解为是一个超轻量级的虚拟机
相较于传统的VM虚拟化方法,Docker的好处是启动速度快,资源利用率高,性能开销小
Docker使用的是C/S结构,即客户端/服务端体系结构
Docker客户端与Docker服务端进行交互,Docker服务端负责构建、运行和分发Docker镜像
Docker应用场景
web应用的自动打包和发布
自动化测试和持续集成、发布
在服务型环境中部署和调整数据库或其他的后台应用
Docker使用
docker --version
docker system info
Docker命令
# 启动docker
systemctl start docker
# 列出了本地 Docker 主机上存储的镜像
docker image ls
# 检查 Docker 是否正在运行
docker version
# 启动容器(tomcat,redis)
docker run --name tomcat -P -d tomcat
docker run -p 6379:6379 -d redis
# 删除实例
docker rmi 容器id或者镜像名
用-f强制删除
# 启动一个已经停止的容器实例
docker start 容器ID或容器名
# 停止一个正在运行的容器
docker stop 容器ID或容器名
# 查看正在运行的容器信息
docker ps
# 列表列出所有的容器及运行情况
docker stats
# 清理残存一些临时的的镜像
docker image prune
# 拉取镜像
docker pull 镜像名
# 退出容器终端,不会导致容器的停止
docker exec
docker exec -it 43f7a65ec7f8 redis-cli
# docker search 命令来搜索镜像
# docker查看日志记录
docker logs 容器ID或容器名
# 查看有什么容器,并重新启动
docker ps -a
docker restart 4a8967b962ca
# 重启docker
systemctl start docker
Docker组成
Client客户端
Daemon守护进程
Image镜像
Container容器
Docker安装
Docker 要求 CentOS 系统的内核版本高于 3.10
uname -r
移除旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
docker ps里面的字段名称
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
created(已创建)
restarting(重启中)
running 或 Up(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
其他
# 以下命令创建一个以进程方式运行的后台模式容器
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
需要确认容器有在运行,可以通过 docker ps 来查看:
通过运行 exit 命令或者使用 CTRL+D 来退出容器
运行交互式的容器docker run -i -t ubuntu:15.10 /bin/bash
-t: 在新容器内指定一个伪终端或终端。
i: 允许你对容器内的标准输入 (STDIN) 进行交互。
docker run -itd --name ubuntu-test ubuntu /bin/bash
加了 -d 参数默认不会进入容器
想要进入容器docker attach
使用 docker exec 命令,退出容器终端,不会导致容器的停止。
如果要导出本地某个容器,可以使用 docker export 命令
docker export 1e560fca3906 > ubuntu.tar(导出容器 1e560fca3906 快照到本地文件 ubuntu.tar)
导入容器快照
使用 docker import 从容器快照文件中再导入为镜像
cat docker/ubuntu.tar | docker import - test/ubuntu:v1(将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1)