在理解docker之前必须得理解什么是沙箱机制

引用:https://www.cnblogs.com/spydxk/p/9635800.html

 

1:为什么需要沙箱机制?

默认情况下,我们的应用程序是可以访问机器上的所有资源的,比如文件系统、cpu、内存、网络等。

这种其实是不安全的,如果随意操作资源,有可能破坏其他程序正在使用的资源,或者造成数据泄露。

(类似于Java中的多线程共享资源,Java用锁机制来解决)

如何解决这个问题?

1.1:为程序分配限定资源权限的账号:利用操作系统的权限管理机制进行限制

1.2:直接为该程序提供一个受限制的运行环境(沙箱机制)

因此:

沙箱机制提供的环境相对于每一个运行的程序是独立的,且不会对现有程序产生影响。

 

docker就是利用沙箱机制,这样使得应用组件经过docker的封装可以随意移植到其他服务器上,

每一个容器和容器之间复合沙箱机制。

 

docker概念:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。

 

docker的几个比较重要的概念:

docker主机(host):安装了docker程序的机器

docker客户端(client):连接docker主机,进行操作

docker仓库(registry):用来保存各种打包好的软件镜像

当我们安装了docker之后,

docker最大的好处,它支持把我们安装配置好的软件打包成一个镜像

而这些镜像就保存在docker仓库。

docker仓库也有公共仓库:docker hub,仓库里面都是我们软件打包好的镜像。

docker镜像(images)

软件打包之后就是镜像

镜像的作用?

举例:

比如我们要装mysql:

大概步骤:去docker仓库中把mysql的镜像下载到本地,然后用docker命令运行该镜像,一个镜像就会产生一个容器。

docker容器(container)

镜像启动后的实例,称为一个容器。

 

举例:

比如我有一个镜像tomcat,那么我想要在机器上部署3个tomcat容器怎么办?

那么我只需要把tomcat镜像下载下来,然后用docker命令把改镜像运行上3次(注意区分好端口号),

这样每次都会产生一个tomcat容器,这样就会有3个tomcat了。

 

因此:使用docker的基本步骤就是:

1:在你的服务器(本人使用 VritualBox 虚拟机,VMWare也可以)上安装docker;

2:去docker仓库下载你想要运行的软件对应的镜像(mysql、tomcat、mongodb、redis等等)

3:用docker命令运行该镜像,启动成功之后,就会产生一个docker容器,此容器就表示当前正在运行的应用软件。

(就类似于你windows打开了你的qq.exe)

4:如果不想跑该程序了,就直接把这个容器关掉(使用docker命令)

(就类似于kill掉你的qq)

 

简单理解步骤:

安装docker --->>>  下载镜像(images) --->>> 运行镜像(称为容器container) -->> 停止容器

 

---------------------------------分割线-----------------------------------------------------

我的测试:

linux虚拟机:VritualBox

系统:centos7

需要注意:

docker需要centos系统的内核版本高于3.10 (具体不清楚,应该是这样的)

使用 uname -r 查看内核版本

docker简单整理

如果低于该版本,建议升级内核版本:

           linux命令:yum update

 

步骤:

1:安装docker:

docker简单整理

安装过程中提示:输入y,确认安装

docker简单整理

出现该标志,表示安装成功。

2:启动docker:

	[[email protected] ~]# systemctl start docker
	[[email protected] ~]# docker -v
	Docker version 1.13.1, build 07f3374/1.13.1

docker -v 查看docker版本号

3:停止docker:

	[[email protected] ~]# systemctl stop docker

这里解释下systemctl 这个命令:

应该就是system + control 的简写,标识系统控制

问题:第一次我启动没有成功,报错如下:

docker简单整理

网上找了各种办法解决,都没有成功,最后关掉虚拟机重新启动就可以了。不知道什么原因。

 

举例:

比如我要在docker中安装运行mysql程序,操作步骤:

1:搜索docker仓库中有没有相关的mysql镜像

命令:docker search mysql

默认就回去docker hub中搜索跟mysql相关的镜像。

docker简单整理

搜索到了这么多的列表,其中该列表有几个字段需要注意:

NAME:这个是镜像的名字,只需要看docker/io 后面那一部分就可以了,当然全部也可以。

OFFICAL:这个意思是说该镜像是不是官方的

AUTOMA:意思是是不是我们自动构建,只要我们运行了该镜像,所有的配置都帮我们自动配置好了,

而官方的镜像一般都没有做这些配置,我们可以自定义配置。

2:搜索到镜像之后,下载该镜像

命令:docker pull mysql

docker简单整理

注意:这里面有一句话:Using default tag:latest

使用默认的标签,latest:最新的

因为镜像是有很多版本的,比如mysql就有很多版本:5.0,4.8等一些版本(tag)

当我们下载镜像的时候,可以用命令指定版本:docker pull mysql:5.0

如果没有指定,默认就是用latest版本。

docker简单整理

当出现该状态,就表示下载成功。

3:查看我们下载的镜像

命令:docker images   来查看所有的镜像

docker简单整理

其中:

REPOSITORY:意思是从哪下载的该镜像

TAG:标签(也就是你镜像的版本)

IMAGE_ID:每个镜像都有一个唯一的id来标识它

 

如果我们想要下载其他版本的镜像,需要在docker hub上搜索,找到对应的版本

docker简单整理

选择一个mysql的5.5的版本下载

docker简单整理

这样docker里面就有mysql5.5版本的镜像了。

4:删除镜像

命令:docker rmi 镜像id

docker简单整理

 

------------------------分割线-------------------------------------------------------------

下载好镜像之后就可以启动了:

具体的步骤:用tomcat举例:

1:搜索镜像 : 

[[email protected] ~]# docker search tomcat

2:拉取镜像

[[email protected] ~]# docker pull tomcat

我这里拉取的是tomcat latest版本的。

3:根据镜像启动容器

[[email protected] ~]# docker run --name mytomcat -d tomcat:latest

--name   自定义容器的名称

-d 是以后台方式运行

4:docker ps 查看运行中的容器

注意:此时是访问不到tomcat的,

本地访问:http://虚拟机ip:8080/

原因:

因为我们此时访问的该端口是虚拟机的端口,而我们安装的tomcat,是安装在docker中的,

因此我们是访问不到docker中的8080端口的。

因此需要做一个映射。

5:停止运行中的容器

docker stop 容器id

[[email protected] ~]# docker stop 5c6e65eddc96

6:查看所有的容器(包括运行中的,和退出的)

[[email protected] ~]# docker ps -a

ps是查看运行中的,ps -a是查看所有的。

7:启动容器

docker start 容器id

[[email protected] ~]# docker start 5c6e65eddc96

8:删除一个容器

我们上面装的tomcat不能访问了,删掉它。

删除的时候,这个容器一定要是停止状态的。

docker rm 容器id

[[email protected] ~]# docker rm 5c6e65eddc96

rm 是删除容器的,rmi 是删除镜像的。

9:启动一个做了端口影射的tomcat

需要在启动命令上加多一个参数:-p  端口映射

把我们当前虚拟机的端口映射到我们容器内部的端口。

-p 虚拟机端口:容器端口

[[email protected] ~]# docker run --name mytomcat -d -p 8888:8080 tomcat

把虚拟机中的8888端口映射到容器中8080端口

可能还要关闭防火墙才能正常访问,或者虚拟机开放该8888端口。

 

其中在做安装mysql镜像的时候,启动有报错:

具体查错日志:

//错误日志

[[email protected] ~]# docker logs ca7da8cf7cfe

error: database is uninitialized and password option is not specified

  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

这三个参数,必须指定一个

	[[email protected] ~]# docker run -p 3306:3360 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

-e 表示指定相关参数。

用navicat链接,成功。

 

具体其他软件的启动可以百度,或者去docker hub上查看官方文档,有具体的启动命令。

 

基本上docker的一些简单操作就这些了。

之后有整理在补充。

 

 

 

 

 

 

 

 

相关文章: