预览

0x01:docker是什么?

docker是一个开源的容器引擎,其核心部件docker镜像,docker镜像可以理解为预装了环境的操作系统镜像(也有没有搭建任何环境的空白镜像)

0x02:docker能干什么?

docker可以用来快速部署应用程序需要运行的环境以及各种依赖

比如如果我们要运行一个依赖于lamp环境的web应用,那么我们只需要直接pull一个lamp的镜像,然后用此镜像创建一个容器来运行我们的web应用。

0x03:docker技术的优点是什么?

快速搭建环境
体积小(一个docker镜像的体积可能只是虚拟机的十分之一)
跨平台运行


通过一个例子来说明docker的基本操作

部署基于lamp环境的web应用

第一步:用docker search命令搜索lamp镜像

1
docker search image

第二步:选择一个docker镜像,将他pull下来默认的tag是latest(相当于版本号),我们选择tutum/lamp镜像

1
docker pull image:tag

然后我们查看一下我们docker里面有哪些镜像

1
docker images


我们可以看到,tutum/lamp已经在我们的本地镜像列表了,tag是latest,还显示了镜像的ID,以及该镜像的创造时间

第三步:用该镜像创建并运行一个容器,并通过端口映射将容器的80端口映射到主机的8080端口

1
docker run -it -p 8080:80 image:tag /bin/bash


后面接的/bin/bash表示启动容器的时候运行bash
现在让我们来访问下我们主机的8080端口看看lamp环境是否运行


然后我们发现连接被重置了,这是为什么呢,因为我们启动容器的时候并没有启动lamp环境,我们查看下容器根目录下有什么

我们可以看到,在根目录下有个run.sh,我们要运行这个文件才能启动我们的lamp环境
运行run.sh

我们可以用ctrl+p + ctrl+q退出容器,并将后台运行容器,,然后在访问主机的8080端口

我们可以看到,容器已经成功运行了
我们可以在var/www/html目录找到该页面的index.html也就是我们将自己需要运行的web应用放到var/www/html目录下就可以运行了,但是这样我们就必须要把要运行的程序的源文件拷贝到docker容器里面或者在docker里面用wget直接下载应用程序的源代码。其实docker提供了一种挂载目录的方法,通过-v参数,将主机目录挂载到容器的某个目录。
我们还是做一个小小的demo来展示-v参数的用法

第一步:在主机创建一个目录,然后用tutum/lamp镜像创建一个容器,并通过-v参数来将主机目录挂载到容器然后在运行容器的lamp环境

1
2
docker run -it -p 9090:80 -v /file:/var/www/html tutum/lamp /bin/bash
./run.sh


现在访问一下9090端口

什么也没有,原来html目录下的index.html也没有生效
我们在主机的file目录下新建一个index.html然后输出hello world

然后我们再访问一下9090端口就能看到hello world了

前面我们提到过,我们可以使用ctrl+p ctrl+q来后台运行当前容器,并返回到主机的shell命令行,但是有时候我们又需要切换到容器的命令行我们该怎么办呢?

1
2
3
docker ps/docker ps -a
若容器处于停止运行状态,我们使用docker start container_name/id来使它运行
docker attach container_name/id

如果容器是处于后台运行状态,我们可以通过docker ps 命令来查看正在运行的容器的列表,如果容器是处于未运行状态,我们可以通过ps -a命令来查看所有的容器。然后找到目标容器,将它启动。
然后通过docker attach 命令来连接容器

从上图中我们可以看到,使用attach命令后并没有进入容器的shell,然后我们按下ctrl+z过后才进入容器的shell命令行
之所以会这样是因为我们上次返回主机的shell的时候是在后台运行./run.sh,现在通过attach命令进入后所看到的还是运行./run.sh的状态,然后我们按下ctrl+z就将./run.sh暂时挂起,然后返回容器的shell命令行了
然后我们就可以在容器的shell命令行下执行一些操作了,比如配置数据库啊什么的。

当然我们配置好的容器可以使用commit命令来创建一个新的镜像

下面是docker的一些常用命令的总结

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
34
35
36
37
38
39
40
41
42
43
搜索镜像
docker search ImageName
下载镜像,tag相当于版本信息,如果没有指定tag,默认下载latest的镜像
docker pull ImageName:tag
删除镜像
docker rmi ImageName
利用镜像创建一个容器,执行后会切换为镜像的shell命令行
docker run -it centos
docker run -it ImageName:tag /bin/bash
镜像端口映射
docker run -p 4000:80 ImageName
删除所有镜像
docker rmi $(docker images -q)
用image创建容器
docker run -itd ImageName:tag /bin/bash
或者
docker run -d --name=dedecms -p 1000:80 tutum/lamp
用上面创建的进入不了容器的命令行,可以通过下面这种方式
docker exec -it dedecms /bin/bash
查看正在运行的容器列表
docker ps
查看所有的容器,包括未运行的容器
docker ps -a
如果我们要退出容器,但是不停止容器
ctrl+p 之后 ctrl+q
删除所有容器
docker rm $(docker ps -a -q)
在外部终端让让容器执行命令
docker exec -it affectionate_darwin /run.sh
从容器创建一个新的镜像
docker commit -a "Drac0nids" -m "lamp base" dedecms lamp_base

最后更新: 2018年06月17日 01:29

原始链接: http://drac0nids.top/2018/02/26/docker搭建web环境/

× 请我吃糖~
打赏二维码