Docker实践

Docker

Docker是Go语言开发的一个基于容器的虚拟化技术,基于Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,属于操作系统层面的虚拟化技术。我们经常所称的docker实际上docker engine,docker engine是一个C/S架构,客户端通过CLI(命令解析工具)与Server同行,他们之间的通讯接口是基于REST API定制的。

Docker


Docker Machine

简介

Docker Machine是Docker三剑客之一,刚开始有点困惑Docker Machine存在的必要性。其主要功能是创建一个虚拟主机,再其上运行docker engine,Docker存在的必要性如下:

  1. 跨平台的支持,Docker不支持Mac和Windows,如果你想在这两个平台下面安装Docker,就必须要安装Docker Machine。
  2. 快速部署,统一环境。Docker Machine创建Docker运行的虚拟环境,在不同平台上保持一致,这样在本地开发的应用也可以快速部署到云端,并且Docker可以非常方便管理多个Docker主机,不需要再去实现监控Docker主机的功能。
    Docker Machine

安装

安装Docker Machine非常简单,直接从官方Release库中下载编译好的二进制文件即可。

1
2
curl -o /usr/local/bin/docker-machine -L https://github.com/docker/machine/releases/download/v0.3.1-rc1/docker-machine_linux-amd64
chmod +x /usr/local/bin/docker-machine

完成后,检查版本信息,验证是否运行正常
1
2
# docker-machine -v
docker-machine version 0.3.1-rc1 (993f2db)

使用

创建一个virtualbox虚拟主机bigdata:

1
docker-machine create --driver virtualbox --virtualbox-cpu-count 2 --virtualbox-memory 2048 bigdata

查看帮助:

1
docker-machine --help

在Linux下,虚拟机创建完成时候,Docker客户端要链接虚拟主机的话要执行下面的命令:

1
eval $(docker-machine env bigdata)

查看系统运行的虚拟主机:

1
2
3
# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
bigdata * virtualbox Running tcp://192.168.99.100:2376 v17.10.0-ce


容器操作

创建

1
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zookeeper confluent/zookeeper

-d 选项表明容器创建后后台运行,-p 选项绑定端口

启动

1
docker start zookeeper

查看

1
docker ps

执行命令

1
docker exec zookeeper -it /bin/bash

-t 选项让Docker分配一个伪终端并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开。


Docker镜像

镜像操作

列出本地所有镜像:

1
docker images

创建镜像

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Set the base image
FROM ubuntu
# Dockerfile author / maintainer
MAINTAINER Name <email.id@here>
# Update application repository list and install the Redis server.
RUN apt-get update && apt-get install -y redis-server
# Expose default port
EXPOSE 6379
# Set the default command
ENTRYPOINT ["/usr/bin/redis-server"]

创建docker镜像:

1
docker bulid -t redis-server

参考资料:
Docker — 从入门到实践
关于Docker你不知道的事-Docker Machine