Intro

Docker 是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0协议开源。诞生于2013年,dotCloud公司内部的业余项目。

Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何流行的Linux机器上,实现虚拟化。

容器使用沙箱机制,相互之间不会有接口,容器性能开销极低

Docker是一种轻量级的虚拟机,基于操作系统层面上的虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现的

Advantage

  • 速度快:Docker容器的启动秒级实现
  • 对系统资源的利用率高,一台主机可以同时运行数千个docker容器
  • 系统开销小:docker容器除了运行其中的应用外,基本不消耗额外的系统资源,使得应用的性能提高
  • 兼容性好:一次创建,任意地方运行(物理机,虚拟机,云端,PC,服务器)

How to use

Docker允许你在容器内运行应用程序

修改~/.docker文件权限

  1. sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  2. sudo chmod g+rwx "/home/$USER/.docker" -R

运行ubuntu:15.10镜像(不存在时从Docker Hub下载)

docker run ubuntu:15.10 /bin/echo "Hello"

运行交互式容器

# 进入ubuntu:15.10容器
docker run -i -t ubuntu:15.10 /bin/bash

# 查看当前容器系统的版本信息和目录下文件
cat /proc/version
ls

# 退出 ctrl+d
exit

Args:

  • -i 允许你对容器内的标准输入(stdin)进行交互
  • -t 在容器内指定一个伪终端

后台启动容器

以一个进程的方式运行容器

sudo docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello; sleep 1;done"

# out: 1e372e832bd73b6c5f1707629e59f98b77e51428591b82fffce61a67dc0f63f9

输出一串字符,被称作容器ID
**

docker ps 查看正在运行的容器

  • CONTAINER ID 容器ID
  • IMAGE 镜像
  • COMMAND 启动容器时运行的命令
  • CREATED 创建时间
  • STATUS 容器状态
    • created
    • restarting
    • running/Up
    • removing
    • paused
    • exited
    • dead
  • PORTS 端口信息和使用的连接类型(tcp\udp)
  • NAMES 自动分配的容器名称

docker logs <CONTAINER ID> 查看容器内的标准输出

docker logs 1e372e832bd7

停止容器

docker stop <CONTAINER ID>

Docker Client

# 查看客户端基本使用
docker
docker <command> --help

# 从云端库中获取镜像 (本地没有镜像)
docker pull ubuntu

# 启动容器
docker run -it ubuntu /bin/bash

# 退出 ctrl+d
exit

# 显示在运行容器 -a/--all
docker ps -a

# 启动/停止
docker start/stop/restart <ID>

# 后台运行 -d 表明不进入交互式, 打印ID
docker run -itd --name ubuntu-test ubuntu /bin/bash

# 进入容器, 推荐exec,因为退出时不会导致容器停止
docker exec -it <id>  /bin/bash
docker attach <id>

# 导出/导入容器
docker export 1e560fca3906 > ./docker/ubuntu.tar
# 将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1
cat ./docker/ubuntu.tar | docker import  - test/ubuntu:v1
# URL 导入
docker import http://example.com/exampleimage.tgz example/imagerepo