Docker有啥用

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以用与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

Docker两个基础概念

镜像(Images)

Docker镜像是一个只读的模板。包含了容器运行时所需要的文件系统和一些参数。镜像是无状态的,也不会改变。镜像是用来创建容器的。你可以使用docker pull命令获取一个别人已创建好的镜像,或者使用dockerbuild来构建一个自己的镜像,如果觉得上面说的不清楚,那你也可以把镜像理解为我们Windows的系统镜像,也就是说一个镜像拥有固定的初始环境,而这个环境可以在任何一个兼容的机器去安装运行。

容器(Containers)

Docker容器就像是一个文件夹,容器中包含了应用运行所需的一切。每个容器都是一个隔离的和安全的应用平台。容器是镜像的一个实例,它是有状态的,而且随时会改变,容器一般是短暂的,其实它跟我们传统意义上的虚拟机的基本概念是一样的,但是有又一些特点与优势,它类似于一个“微系统”,小巧而灵活。

举个例子:

在传统的方式中,我们在Linux系统部署一个Wordpress网站,需要做的步骤是:安装lamp/lnmp环境->配置数据库->下载源码->修改源码配置->完成。

而切换到Docker下是这样的:部署Docker->拉取镜像->创建容器->完成。

从主要步骤来看好像也没有减少多少步骤,但是在实际部署过程中,采用传统方式的话需要做的工作是非常多的,而通过Docker的方式进行启动则变得非常容易,下面演示一下:

使用Docker部署一个wordpress网站

在开始之前我们还需要了解下面几个命令:

  • pull #拉取镜像
  • run #创建容器

下面进行简单的演示,暂不对相关命令进行详细的讲解,对于Dockcer部署的话下期讲解。

首先查看Docker是否正常运行:

systemctl status docker




docker进程会占用block io吗 docker进程卡住_docker容器别人访问很卡


然后修改镜像加速地址:

echo -e "{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}" > /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker


docker进程会占用block io吗 docker进程卡住_docker_02


然后通过docker info命令查看镜像加速地址是否成功修改:


docker进程会占用block io吗 docker进程卡住_docker容器别人访问很卡_03


到这里Docker的验证就完成了,然后开始拉取镜像。

pull拉取镜像

docker的pull指令其实跟我们的yum install大致的意思是一样的,你也可以把它理解为是在安装一个wordpress应用

docker pull wordpress


docker进程会占用block io吗 docker进程卡住_数据库_04

拉取wordpress镜像完成


然后继续拉取一个MariaDB镜像:


docker进程会占用block io吗 docker进程卡住_docker容器别人访问很卡_05

拉取mariadb镜像


run创建容器

创建一个容器需要用run指令,基本格式如下:

docker run -d ${镜像}

-d :后台运行容器

创建mariadb容器

拉取完成之后自然是创建一个容器(应用)了,按照先后顺序,我们先创建一个数据库容器,命令如下:

docker run -tid -e MYSQL_ROOT_PASSWORD=zuogongjiao mariadb

创建成功会出现一串ID值,如果出现其他提示信息那就是有问题了。

创建成功之后,我们通过下面这个命令获取容器的ID以通过ID进入容器操作(也可以在创建的时候指定容器名)

docker ps


docker进程会占用block io吗 docker进程卡住_docker容器别人访问很卡_06

创建容器并查看容器运行ID


得到ID之后,我们通过下面这个命令进入容器

docker exec -ti b /bin/bash

其中,b是ID的第一个字符,也就是无需指定全部的ID值也可以进入一个容器(前提是通过特点字符就能筛选出唯一的容器)

进入容器之后,我们就可以登录并创建数据库了:

mysql -uroot -pzuogongjiao

create database wordpress;

数据库密码是创建容器时指定的:-e MYSQL_ROOT_PASSWORD=zuogongjiao


docker进程会占用block io吗 docker进程卡住_Docker_07

创建数据库


数据库创建完成之后,可以选择创建一个普通用户用于wordpress的数据管理,也可以直接使用root用户,这里建议使用普通用户去给wordpress使用,所以这时候还需要使用下面的命令创建用户:

grant all privileges on wordpress.* to 'zgj'@'%' identified by 'zuogongjiao';

创建完成之后,我们可以退出数据库使用新的用户登录:

quit;
mysql -uzgj -pzuogongjiao


docker进程会占用block io吗 docker进程卡住_docker容器别人访问很卡_08

使用新用户登录数据库


然后查看当前可操作的数据库:

show databases;


docker进程会占用block io吗 docker进程卡住_docker容器别人访问很卡_09

查看数据库列表


那么到这步,数据库部分就完成了,下面开始创建wordpress容器:

创建Wordpress容器

创建之前需要先执行下面的命令回到宿主机:

exit


docker进程会占用block io吗 docker进程卡住_Docker_10


为了便于管理容器,我们可以对数据库容器进行重命名,命令如下:

docker rename elastic_bhaskara db


docker进程会占用block io吗 docker进程卡住_docker容器别人访问很卡_11


修改好容器名之后就继续创建wordpress容器,这次可以加上--link参数,具体命令如下:

docker run -tid --name=wordpress --link db:mysql -p 80:80 wordpress

然后如果想看容器的运行情况,可以使用下面的命令查看实时日志:

docker logs -f wordpress


docker进程会占用block io吗 docker进程卡住_docker容器别人访问很卡_12

查看容器运行日志


创建容器之后,我们可以直接在浏览器输入宿主机的IP(前提是映射80端口,否则需要IP+端口的方式)进行访问,然后得出这样一个界面:


docker进程会占用block io吗 docker进程卡住_数据库_13

wordpress安装程序


我们直接点继续,然后就可以填写网站信息了,填写完成之后点击安装wordpress:


docker进程会占用block io吗 docker进程卡住_数据库_14

填写网站信息


然后就安装完成了:


docker进程会占用block io吗 docker进程卡住_数据库_15

wordpress安装完成


然后我们再次输入Docker宿主机IP地址进行访问:


docker进程会占用block io吗 docker进程卡住_数据库_16


这时候就可以看到,我们的网站已经搭建完成了,中途没有出现任何php错误,不兼容之类的环节,可以说非常的顺利,另外Docker作为一个跨平台的工具,可以在Mac、Windows、Linux中随处运行与构建,大大的方便了运维工作。

你认为Docker是否可以在学习或工作中帮助到你,请在评论中说出来吧