0%

docker 使用指南

常识

docker:开源的应用容器引擎,基于 Go 语言,遵从 Apache2.0 开源协议

  • 特点:用于打包应用及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可实现弹塑性力学化。
    • 容器性能开销极底
  • 分为:
    • CE:Community Edition:社区版
    • EE:Enterprise Editioin:企业版
  • 用途:快速交付、测试和部署代 dccg
    • web 应用自动化打包与发布
    • 自动化测试和持续集成、发布
    • 在服务型环境中部署和调整数据库或其他后台应用
    • 从头编译或扩展现有 OpenShift 或 CloudFoundry 平台来搭建自己的 PaaS 环境。

名词解释

Dockerfile:用来构建镜像的文本文件,包含了相关指令与说明

镜像Image:相当于一个 root 文件系统,是一个包含有文件系统的面向 Docker 引擎的只读模板。镜像是一个模板,装了一些系统的配置文件,我们可以通过镜像建立更多的容器,容器从镜像启动时,Docker 在镜像的上层创建一个可写层,镜像本身不变。

容器Container:容器是基于镜像创建, 相互隔离的, 可以理解为小型虚拟机,真正的执行单元。

  • 镜像与容器,可以看作类与实例,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等。
  • Docker 容器通过 Docker 镜像来创建。

仓库Repository:可看成一个代码控制中心,用来存放镜像

  • Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

  • 注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用 tag 进行区分. Docker Hub 是 Docker 公司提供的一个注册服务器(Register)来保存多个仓库

  • <仓库名>:<标签>:来指定具体是某软件某版本的镜像,默认使用 latest 作为标签

Docker Machine:一个简化 Docker 安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装 Docker,如 VirtualBox、Microsoft Azure。

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo pacman -S docker

# 验证是否装,查看系统范围的信息
docker info


sudo systemctl start docker
# or
sudo service docker start

sudo docker run hello-world

# Ubuntu 卸载
sudo apt-get purge docker-ce

# 删除镜像、容器、配置文件等内容
sudo rm -rf /var/lib/docker

信息查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 查看可用命令
docker

# 列出所有映像
docker image ls --all

# 列出所有容器
docker container ls --all
docker ps -a
# 显示当前容器
docker ps

# 显示所有镜像
docker images

# 删除容器
docker rm container_name

# 删除镜像,必须先删除依赖该镜像的容器
docker rmi image_name

基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 获取镜像
docker pull ubuntu # latest的ubuntu
# 启动容器
docker run -it ubuntu /bin/bash


#

# 关闭容器
docker stop spark
docker stop {container_id}

# 打开容器
docker start spark

# 重启容器
docker restart {container_id}

docker run -it centos:latest /bin/bash
# -it:使用交互模式运行容器关分配一个伪输入终端

# 进入容器
docker attach {container_id}
# 进入容器,退出容器终端时不会导致容器的停止
docker exec {container_id}


# 导出
docker export {container_id} > ubuntu.tar
# 导入
cat docker/ubuntu.tar | docker imprt - test/ubuntu:v1
# 删除容器
docker rm -f {2b4cba85892a}

创建镜像

  • Dockerfile 文件(无后缀)
1
2
3
4
5
6
7
8
9
10
11
12
13
# 选择一个镜像作为基础
FROM centos:latest

# 维护者的信息
MAINTAINER zjeff

# 启动镜像后进行的操作
RUN yum update -y
RUN yum install -y git

# 拷贝本地文件到镜像中
COPY ./* /usr/share/gitdir/
# 前面是容器中的路径, 后面是本地路径
1
docker build -t="zjeff/centos:gitdir" .

容器操作

1
2
3
4
5
6
7
8
docker run ubuntu:15.10 /bin/echo "Hello World"
docker run -i -t ubuntu:15.10 /bin/bashr
-t: 在新容器内指定一个伪终端或终端
-i: 允许对容器内的标准输入(STDIN)进行交互

# 退出容器
exit

给博主来一杯卡布奇诺