Docker
参考
- Docker-从入门到实践
- 此篇学习笔记基于docker版本1.12.3
基本原理
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,
对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,
从 0.7 以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。和传统的虚拟机的差别
核心概念
- 镜像Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:14.04 就包含了完整的一套 Ubuntu 14.04 最小系统的 root 文件系统。镜像构建时候是分层构建,研究Dockerfile时候详细讨论。
- 容器 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库 例如Docker Hub,Docker Store等等.也可以利用Nexus Repository Manager建立私有仓库管理。
常用命令 (以redis镜像myredis容器举例)
- 获取镜像
docker pull redis
- 推送镜像
docker push alex/redis:1.0
- 删除容器
docker rm mynginx
- 删除镜像
docker rmi redis
- 管理数据卷
docker volumes ls(create/inspect/rm)
- 查看docker版本信息
docker version
- 查看容器的日志
docker logs myredis
- 登陆dockerhub账号
docker login; docker logout
- 查看镜像历史
docker history redis
- 暂停/启动容器所有进程
docker unpause/pause myredis
- 查看所有运行的进程
docker ps(查看所有docker进程 docker ps -a)
- 进入运行中的容器(不过我不知道什么用 基本被docker exec 取代)
docker attach myredis
- 从Dockerfile构建镜像
docker build dockerfile
- 提交镜像
docker commit myredis
- 从宿主系统拷贝文件
docker cp file.ext myredis:/path/to/file.ext
从容器拷贝文件到宿主机
docker cp myredis:/path/to/file.ext
- 查看容器详细信息
docker inspect myredis- 新建容器
docker create anotherredis- 查看容器内的文件系统变化
docker diff myredis- 输出服务器上所有的docker及时事件
docker events- 在运行的docker容器中执行命令
docker exec -it myredis /bin/bash- 以TAR形式导出整个容器到本地文件系统
docker export myredis > redis.tar
或者
docker export –output=”redis.tar” myredis
- 列出所有镜像
docker images- 从TAR文件创建一个docker镜像
docker import redis.tar- 查看docker系统信息
docker info- 强制关闭容器 相当于直接发送kill -9 信号
docker kill myredis- 从TAR文件中加载镜像
docker load < redis.tar- 管理docker网络
docker network ls;docker networrk create…- 查看docker集群节点
docker node ls- 重命名容器
docker rename myredis alexredis- 重启容器
docker restart myredis- 运行容器(实例化),如果没有这个镜像会试图从远端pull
docker run –name myredis -p 6380:6379 -v /data/redis:/data -d redis redis-server –appendonly yes- 查看容器端口相关
docker port myredis- 停止容器 和kill的区别就和linux直接kill和stop区别一样
docker stop myredis
(首先给容器发送一个TERM信号,让容器做一些退出前必须的保护性、安全性操作,然后让
容器自动停止运行,如果在一段时间内,容器还是没有停止,再进行kill -9,强行终止)
- Docker镜像TAR归档
docker save redis:3.2.5 > redis.tar
- 搜索dockerhub查询景象
docker search redis
- 管理Docker Service(配合Docker Swarm )
docker service ls
- 启动容器
docker start myredis
- 查看容易资源占用情况
docker stats
- Docker集群管理Swarm
docker swarm init
- 给本地镜像打标签
docker tag redis redis:1.0
- 显示容器内运行的进程
docker top myredis
- 更新容器的一些配置
docker update –cpu-shares 512 -m 300M myredis mynginx
- 一直到这个容器停止才中止,并打印出退出码
docker wait myredis
常用镜像
dockerui
- 提供Docker UI管理界面
- docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker
- open your browser to http://
:9000 shipyad
- docker集群管理界面
- 命令行部署 curl -sSL https://shipyard-project.com/deploy | bash -s
- docker run –rm -v /var/run/docker.sock:/var/run/docker.sock shipyard/deploy start
工具类,本地开发测试很不错
- Redis docker run –name myredis -p 6380:6379 -v /data/redis:/data -d redis redis-server –appendonly yes
- Mysql
- MongoDB
- Nginx
- Tomcat 看了下Dockerfile,用的是openjdk,不知道有没有坑。
Swarm
- 官方的Docker的集群管理工具
alpine
- 一个只有5MB的linux包,dockfile构建工具时候一个很好的依赖