2018/2/2 19:08:27当前位置推荐好文程序员浏览文章

Docker简介

Docker是一个轻量级容器技术,类似于虚拟机技术(xen、kvm、vmware、virtual)。Docker是直接运行在当前操作系统(Linux)之上,而不是运行在虚拟机中,但是也实现了虚拟机技术的资源隔离,性能远远高于虚拟机技术。

Docker支持将软件编译成一个镜像(image),在这个镜像里做好对软件的各种配置,然后发布这个镜像,使用者可以运行这个镜像,运行中的镜像称之为容器(container),容器的启动是非常快的,一般都是以秒为单位。这个有点像我们平时安装ghost操作系统?系统安装好后软件都有了,虽然完全不是一种东西,但是思路是类似的。

目前各大主流云计算平台都支持Docker容器技术,包括阿里云、百度云平台(资源隔离通过Docker实现)、Cloud Foundry(和Spring一家公司的,目前最成熟也最稳定)、HeroKu、DigitalOcean、OpenShift(JBoss的)、Apache Stratos、Apache MesOS(批处理平台,支持搭建基于Docker的云平台)、Deis(开源PaaS平台);连微软也会在下一个版本的Windows Server及其云平台Azure上支持Docker,这样看来Docker大有统一云计算的趋势。

这里的云计算平台一般指的是PaaS(平台即服务),它是一个这样的云计算:平台提供了存储、数据库、网络、负载均衡、自动扩展等功能,你只需将你的程序交给云计算平台就可以了。你的程序可以是用不同的编程语言开发的,而使用的Docker的云计算平台就是用Docker来实现以上功能及不同程序之间的隔离的。

目前主流的软件以及非主流的软件大部分都有人将其封装成Docker镜像,我们只需下载Docker镜像,然后运行镜像就可以快速获得已做好配置可运行的软件。

另外要特别指出的是,Docker并不是为开发测试方便而提供的小工具,而是可以用于实际生产环境的一种极好的部署方式。

1 Docker的安装

因为Docker的运行原理是基于Linux的,所以Docker只能在Linux下运行。不要紧张,这只能说明在真正的生产环节下,基于Docker的部署只能在Linux上,但是我们在开发测试的时候,Docker是可以在Windows以及Mac OS X系统下的,运行的原理是启动一个VirtualBox虚拟机,在此虚拟机里运行Docker。

Linux下安装

CentOS安装命令:

  • sudo yum update
  • sudo yum install docker

Ubuntu:

  • sudo apt-get update
  • sudo apt-get docker.io

Windows下安装

参考《JavaEE开发的颠覆者: Spring Boot实战》 8.1.1

2 Docker常用命令及参数

1.Docker镜像命令

基于Docker镜像是可以自己编译的,我们将在10.3节讲解如何编译自己的Docker镜像,本节我们讲述与Docker镜像操作相关的命令。

通常情况下,Docker的镜像都放置在Docker官网的Docker Hub上,地址是https://registry.hub.docker.com

(1)Docker镜像检索

除了可以在https://registry.hub.docker.com网站检索镜像以外,还可以用下面命令检索:

docker search 镜像名 

检索Redis,输入:

docker search redis 

(2)镜像下载

下载镜像通过下面命令实现:

docker pull 镜像名 

下载Redis镜像,运行:

docker pull redis 

如果要获取某个指定的版本直接在后面跟上版本号,如:

docker pull redis:3.0.7  

这根据据网络情况可能要这根据据网络情况可能要花费一段时间。

(3)镜像列表

查看本地镜像列表,如图所示,通过下面命令:

docker images
image

其中REPOSITORY是镜像名;TAG是软件版本,latest为最新版;IMAGE ID是当前镜像的唯一标识;CREATED是当前镜像创建时间;VIRTUAL SIZE是当前镜像的大小。

(4)镜像删除

删除指定镜像通过下面命令:

docker rmi image-id

删除所有镜像通过下面命令:

docker rmi $(docker images -q)

2.Docker容器命令

(1)容器基本操作

最简单的运行镜像为容器的命令如下:

docker run --name container-name -d image-name 

但是最好运行的时候就把端接口加上,如:

docker run -d -p [本机端口]:[docker服务器端口] --name container-name -d image-name

运行一个容器只要通过Docker run命令即可实现。

  • --name参数:是为容器取得名称;
  • -d:表示detached,意味着执行完这句命令后控制台将不会被阻碍,可继续输入命令操作;
  • image-name:是要使用哪个镜像来运行容器。
  • -p:端口映射
  • 本机端口:对外暴露的端口
  • docker服务器端口: 各各应用占用的端口,比如redis占用6379
    我们来运行一个Redis容器:
docker run --name test-redis -d redis 

Docker会为我们的容器生成唯一的标识。

(2)容器列表

通过下面命令,查看运行中的容器列表,如图所示。

docker ps
image

其中CONTAINER ID是在启动的时候生成的ID;IMAGE是该容器使用的镜像;COMMAND是容器启动时调用的命令;CREATED是容器创建时间;STATUS是当前容器的状态;PORTS是容器系统所使用的端口号,Redis默认使用6379端口;NAMES是刚才给容器定义的名称。

通过下列命令可查看运行和停止状态的容器:

docker ps -a

(3)停止和启动容器

1)停止容器

停止容器通过下面的命令:

docker stop container-name/container-id 

我们可以通过容器名称或者容器id来停止容器,以停止上面的Redis容器为例:

docker stop test-redis 

此时运行中的容器列表为空。查看所有容器命令,可看出此时的STATUS为退出。

2)启动容器

启动容器通过下面命令:

docker start container-name/container-id 

再次启动我们刚才停止的容器:

docker start test-redis

(4)端口映射

Docker容器中运行的软件所使用的端口,在本机和本机的局域网是不能访问的,所以我们需要将Docker容器中的端口映射到当前主机的端口上,这样我们在本机和本机所在的局域网就能够访问该软件了。

Docker的端口映射是通过一个-p参数来实现的。我们以刚才的Redis为例,映射容器的6379端口到本机的6378端口,命令如下:

docker run -d -p 6378:6379 --name port-redis redis 

如果要映射多个端口就多设置一个-p参数,如启动rabbitMQ命令:

docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq

目前在Windows下运行的Docker其实是运行在VirtualBox虚拟机中的,即我们当前的本机并不是我们当前的开发机器,而是VirtualBox虚拟机,所以我们还需要再做一次端口映射,将VirtualBox虚拟的端口映射到当前的开发机器。这部分内容将在实际部署软件的时候进行演示。

(5)删除容器

删除单个容器,可通过下面的命令:

docker rm container-id 

删除所有容器,可通过下面的命令:

docker rm $(docker ps -a -q)  

(6)容器日志

查看当前容器日志,可通过下面的命令:

docker logs container-name/container-id 

我们查看下上面一个容器的日志,如图所示,命令如下:

docker logs port-redis

// 翻页查看

docker logs port-redis | less 

【| less】模式下:回车键翻页,q键是退出。

image

(7)登录容器

运行中的容器其实是一个功能完备的Linux操作系统,所以我们可以像常规的系统一样登录并访问容器。

我们可以使用下面命令,登录访问当前容器,登录后我们可以在容器中进行常规的Linux系统操作命令,还可以使用exit命令退出登录。

docker -it container-id/container-name bash 

示例 Docker 官网 MYsql镜像运用

https://hub.docker.com/_/mysql/

1 启动mysql实例

docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
  • some-mysql: 容器别名
  • my-secret-pw:初始化设置的root用户的密码
  • tag:mysql的版本,不写默认使用最新版
  • -p 3306:3306:表示在这个容器中使用3306端口(第二个)映射到本机的端口号也为3306(第一个)

2 连接到mysql实例

2.1 连接到本地mysql

docker run -it --link some-mysql:mysql --rm mysql sh -c mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"

2.1 连接其他地方的mysql

docker run -it --rm mysql mysql -hsome.mysql.host -usome-mysql-user -p

3 切换到容器shell中

docker -it some-mysql bash

退出输入:

exit

4 查看日志

docker logs some-mysql
网友评论