Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
Docker通常用于如下场景:
- web应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
是一个只读模板,用来运行Docker容器。
负责应用程序的运行,包括操作系统、用户添加的文件以及元数据
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
仓库是集中存放镜像文件的场所。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务
#阿里云官方安装脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
获取
# 从仓库注册服务器拉取
sudo docker pull ubuntu:14.04
# 官方仓库注册服务器,相当于
sudo docker pull registry.hub.docker.com/ubuntu:14.04
# 也可使用其他仓库,如:
sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
显示
sudo docker images
运行
sudo docker run -t -i ubuntu:14.04 /bin/bash
修改
# 运行容器bash,通过shell进行操作
sudo docker run -t -i ubuntu:14.04 /bin/bash
# 提交更新
sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
创建
mkdir mydockerimg
# docker image的配置文件
vim Dockerfile
# 创建image
sudo docker build -t testimg .
Dockerfile示例
# 这是注释
FROM ubuntu:14.04
MAINTAINER AIR_CC
RUN apt-get -y update
CMD echo "hello-world"
ADD myApp /var/www
EXPOSE 80
EXPOSE: 对外部开放端口
sudo cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
注:具体镜像可在openva中找
保存与载入
sudo docker save -o ubuntu_14.04.tar ubuntu:14.04
sudo docker load --input ubuntu_14.04.tar
# 或者 sudo docker load < ubuntu_14.04.tar
# 暂停并删除相应的容器
sudo docker stop containerName
sudo docker rm containerName
# 删除镜像
sudo docker rmi imageName
注:删除镜像之前需要先stop & rm相应的container
# 删除所有的container
sudo docker stop $(docker ps -a -q)
sudo docker rm $(docker ps -a -q)
# 删除所有的image
sudo docker rmi $(docker images -q)
容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用
运行
sudo docker run -tid ubuntu:14.04
终止
注:当容器中指定的应用终结时,容器也会终止
- sudo docker start – 启动一个处于终止的容器
- sudo docker restart – 重启一个处于运行态的容器
运行日志
获取 container 中程序输出到 terminal 上的信息 docker logs
进入
docker exec -it db3 /bin/sh 或者 docker exec -it d48b21a7e439 /bin/sh
导出与导入
sudo docker export > outputFileName
sudo docker import
注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
删除
sudo docker stop
sudo docker rm
注: 删除容器前需先stop
其他
获取container的PID
sudo docker inspect --format '{{.State.Pid}}' <container ID>
docker
中文指南