docker基础命令即LNMP搭建(内涵 APACHE自建镜像)

本文介绍了Docker的基础知识,包括容器、工作原理、安装过程和常用命令。详细讲解了如何通过Docker搭建LNMP和LAMP环境,涉及网络配置、镜像操作及容器管理,同时涵盖内存限制和镜像制作。最后提到了解决Docker启动报错的处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker容器

docker容器可以理解为比传统虚拟机更加轻量级的一个虚拟机,它拥有着比传统虚拟机显著优越的计算能力和贷款能力,虽然在隔离性上确实比传统虚拟机差一些,但是docke技术确实能为企业带来不小的收益。
最明显的就是节省了大量的重新部署的时间,比方进行一个LVS的构建或者是LNMP的搭建,即使是通过脚本来进行编写也是需要花起码半小时左右的时间才能完成基本的部署。而docker类似快照,它可以将任何一个环境像是快照一般给制作成一个容器,并且可以根据用户需求来上传到官方网站上,随时随地都可以进行一个拉取,所以,它极大地节省了一个环境需要部署的时间。

docker工作原理

docker的工作原理如下图:
在这里插入图片描述

从左至右,通过本机输入的拉取,运行等命令,命令会根据需求寻找对应的镜像,如果本机中找不到,会直接上到官网网站去进行拉取。
docker的运行,镜像是核心,通过镜像,创建若干个子类虚拟机
docker的容器上传平台
https://registry.hub.docker.com
此为它的容器平台,用户可以登陆进去来进行容器的打包、上传等,同时,这个平台和自身下载的docker也拥有一定的联系,可以通过命令去查看自己的容器是否在自身用户拥有,自己所需求的容器平台上又是否拥有
注册:
在这里插入图片描述

出现提示后,选择注册类型,可以注册0元类型的,而后会收到邮箱的发送,进入邮箱点击有效链接即可完成注册,之后选择相应的版本平台即可存放容器数据。

docker安装

可以上docker的官方网站来查看安装手册,由于是外网,可能会比较慢,
https://docs.docker.com
在这里插入图片描述

中间的鲸鱼标志就是它的官方下载手册,点进去选择系统,这边选择的是linux系统,它同时也支持windows和苹果。
在linux中也可以主动勾选镜像版本,这边我选择的是linux的centos镜像。
根据指引,他会先让你注意安装docker的前提是什么,根据官方描述就是需要注意是否为centos7以上的版本,6则不支持。
而后根据指引执行如下命令:

 yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

此目的为防止在服务器或者虚拟机之前装有docker包,导致安装docker失败或者启动失败。执行完该命令之后,就可以执行之后的指引内容——安装

创建docker专用下载通道:

yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

开启存储库

yum-config-manager --enable docker-ce-nightly
yum-config-manager --enable docker-ce-test

安装docker

yum install docker-ce docker-ce-cli containerd.io

安装完成后使用命令使docker永久开启

systemctl start docker
systemctl enable docker

使用docker

基础docker的命令大致分为三种类型:容器操作类,查询类,制造类
查询类
查询类主要是查询docker的版本,容器是否有在平台中,以及容器的详细信息
刚下载的docker,可以通过docker -v 来查看docker的版本,如果没有指定版本来进行安装(指定版本来安装是另一套安装命令,详细可以去看相应的下载文档)那么默认就会下载一个最新版本的(docker更新速度很快)

docker -v 来查看docker的版本

docker info 则是可以查看docker当前在此版本的环境信息。
docker images 是要重点讲一下的,该命令可以查看此服务器上拥有的images容器

REPOSITORY(镜像名称)
TAG(标签)
IMAGE ID(镜像id号)
CREATED(创建时间)
SIZE(镜像大小) docker ps -a 是列出所有的容器 docker serach 容器名称 可以查看平台中所有同名的开源容器
NAME 镜像名字
DESCRIPTION 来自哪里
STARS 下载次数
OFFICIAL 是否为官方 docker stats 可以查看容器的配置情况

镜像操作类

容器操作类主要分为运行,创建,重命名,删除,上传,下载等
运行
docker run 镜像名:标签

比如可以尝试运行一下docker run hello-world,hello-world为docker的官方文档,因此,如果本机没有hello-world文档的时候,会默认去到平台上拉取该文档。当出现Hello from Docker!时,即代表该docker工作正常

此时再通过docker images或docker ps -a 命令来查看,可以看到会多出来一个容器,即为hello-world。
在这里插入图片描述

下载镜像

docker pull 容器名 为下载容器,即是从平台中进行容器的拉取一个开源可用的容器。默认拉取最多下载源的和官方的。
不过这边要注意的是,由于平台是个外国网站,所以不管上传还是下载都有可能有一定的延迟,甚至可能导致下载失败。

重命名和复制克隆镜像

docker tag 镜像名:标签 要重命名的容器名:要重命名的标签
假设更改之前拉取的helloworld镜像,docker tag hello-world:latest hello-xiaoyang:vi2
在这里插入图片描述

可以看到最下方又多出了一个自己设定的镜像,不过他们的容器ID是一样的

删除镜像

删除镜像的默认命令为docker rmi 容器名,但是此命令能成功需要满足两个前提条件,一个是镜像名和标签没有重复,并且要保证他们没有正在运行。
当然,使用docker rmi -f 容器名可以进行强制删除。

登录

先前有讲过在平台进行账号的注册,这边可以使用docker login来进行登录
输入完账号之后,当显示有Login Succeeded字符时,就代表登陆成功了。
注意:为提高登录成功几率,要关闭防火墙和selinux

上传容器

docker push 镜像 可以用来上传镜像,但是有一个前提就是需要提前进行登录,即是在docker登录了的前提下,上传好的容器可以直接存储在自己用户的平台中。
不过这里有一个坑,就是需要先将该容器改名为自己的用户名/镜像名,而后在通过新的名字来进行上传。

docker tag nginx:latest yuechengshuier/nginx:latest 
docker push yuechengshuier/nginx

之后在平台上就可以看到上传好的容器了
在这里插入图片描述

备份

docker save –o 存出文件名 存出的镜像 可以存储一份镜像名,这么做的目的是为了防止公司在没有网络的情况下仍然能下载容器。

docker save -o nginx.img nginx:latest

默认会把新生成的文件放在当前的路径下(为了提高辨识度,建议选择容器的时候不要只输入名字,而是名字:标签)

恢复

有备份自然有恢复,回复的命令为docker load --input 文件名 或者

docker load < 文件名

模拟故障,删除先前备份的nginx镜像:docker rmi nginx

docker load input nginx.img 
docker load --input nginx.img 

此时再次输入docker images 可以发现原先删除的镜像恢复过来了

创建删除容器类

创建容器

docker create -it 镜像运行的程序
-i 让容器的标准输入保持打开
-t 让Docker分配一个伪终端

这里要说的是,如果启动容器,那么最好选择run命令来进行,当然也可以使用start命令

docker run -itd 镜像名称 /bin/bash

进入容器

通过docker ps -a 来查看当前状态正在up的容器,而后将他们的id复制下来,

docker exec -it 容器id /bin/bash
docker exec -it cfcf6ffdc39b  /bin/bash

而后就可以进入此容器进行相应的操作

带宽处理

容器消耗的资源是和真实服务器共享的,因此,容器默认消耗的资源会直接将内存拉满,需要做的就是将内存做一个限定,以防止容器将真实服务器卡爆。

选择正在运行的容器,/sys/fs/cgroup/cpu/docker/路径下,存储着两个文件, cpu.cfs_quota_us和cpu.cfs_period_us,他们分别管控着该容器的资源流动。进入到相应的容器目录,输入以下命令,可以使的该资源流动只会占用整个

服务器的20%

echo 10000 > cpu.cfs_quota_us
echo 50000 > cpu.cfs_period_us

相关的还有很多,例如一个cpu处理:

echo 250000 > cpu.cfs_quota_us
echo 250000 > cpu.cfs_period_us

半个cpu处理:

echo 1000000 > cpu.cfs_quota_us
echo 500000 > cpu.cfs_period_us

删除容器

docker rm 容器id 即可删除容器(如果正在运行中可以加个-f参数)

导出容器

类似镜像储存,容器一样可以被当作备份来导出。
docker export 容器的ID/名称 > 文件名

导入容器

cat 文件名| docker import –生成的镜像名称:标签
开启容器内存大小限制
docker run -m 大小mb 镜像名称
限制容器内存运行时的大小

自制镜像

镜像获取有三种方式,第一种就是直接在平台直接进行拉取,一种是在本地存储的镜像拉取到linux系统中,还有一种就是使用命令行来进行镜像操作。
这边着重讲第三种dockerfile,首先制作的镜像需要拥有一个干净的镜像作为一个参照,而后,选择自己要部署的镜像的软件,为了识别,以它的名字和作用创建一个相对应的文件夹,比如,这个容器就是为了nginx而搭建的,那么就创建一个nginx的文件夹。
进入到文件夹中,编写脚本文件。
脚本文件名必须是dockerfile,内容为如下:

FROM centos:7
MAINTAINER xiaoyang
RUN yum install -y wget net-tools pcre-devel zlib-devel gcc  gcc-c++ make && \
        yum clean all && \
        rm -rf /var/chache/yum/*
RUN wget http://nginx.org/download/nginx-1.10.3.tar.gz
RUN tar zxf nginx-1.10.3.tar.gz
WORKDIR nginx-1.10.3
RUN ./configure --prefix=/usr/local/nginx && make && make install
EXPOSE 80
ENV PATH $PATH:/usr/local/nginx/sbin
CMD ["nginx","-g", "daemon off;"]

FROM为来自的镜像,这边规定必须为centos7以上才可以使用
MAINTAINER为作者信息
RUN即为镜像运行之后所需要做的事情
WORKDIR 类似linux命令中的cd

EXPOSE即为该端口的端口号
CMD为启动容器时执行的命令,不可重复,默认会执行最后一条
ENTRYPOINT 类似CMD,但是可以执行多条,CMD只会执行最后一条
ADD 将当前目录下的文件添加至容器中
COPY 将当前目录下的文件添加至容器中
VOLUME 设置卷/主机目录

编写完毕之后,使用docker build -t 镜像名称:标签 . 来制作,.的意思即是要在制作的目录中遍寻镜像安装命令。
LNMP搭建
在分别安装好了三个镜像之后(mysql,nginx/httpd,php),分别使用容器来进行安装
1)创建lnmp网络
docker network create lnmp

2)创建mysql容器

docker run -d \
 --name lnmp_mysql\
 --net lnmp\
 --mount src=mysql-vol,dst=/var/lib/mysql\
 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.6 --character-set-server=utf8

3)创建php容器(需要在nginx先安装,因为需要名称nginx做关联)

docker run -d --name lnmp_php --net lnmp --mount
src=wwwroot,dst=/wwwroot php:v1

4)创建nginx容器

docker run -d --name lnmp_nginx --net lnmp -p 88:80 --mount
src=wwwroot,dst=/wwwroot nginx:v1

当他们做了关联后,可以直接使用ping命令,例如,nginx容器内ping mysql容器,假若
ping通,证明都做了关联。

网页包放在了指定的挂载点,即/wwwroot上
LAMP搭建
同样,需要准备好相应的镜像材料(mysql,nginx/httpd,php)
创建http目录:mkdir apache

vim dockerfile
FROM centos:7
MAINTAINER xiaoyang
RUN yum -y install httpd
RUN yum -y update
RUN yum -y install vim
RUN yum -y install lrzsz
RUN yum -y install net-tools
RUN yum -y install unzip
EXPOSE 80
ADD run.sh /run.sh						#将脚本放在容器的家目录中
ADD index.html /var/www/html/index.html			#复制网页进入html中
RUN chmod 775 /run.sh				#给予脚本执行权限
CMD ["/run.sh"]				#开启镜像自动执行脚本执行脚本

[root@localhost apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*     #清理apache缓存
exec /usr/sbin/apachectl -D FOREGROUND   #启动apache

使用docker build -t 镜像名字:标签 .来进行镜像生成

1)创建lamp网络
docker network create lamp

2)创建mysql容器
docker run -d
–name lamp_mysql
–net lamp
–mount src=mysql-vol,dst=/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.6 --character-set-server=utf8

3)创建php容器(需要在apche先安装,因为需要名称apache做关联)
docker run -d --name lamp_php --net lamp --mount src=wwwroot,dst=/wwwroot php:v1

4)创建httpd容器
docker run -d --name lamp_httpd --net lamp -p 1212:80 --mount src=wwwroot,dst=/wwwroot httpd:v1

当他们做了关联后,可以直接使用ping命令,假若ping通,证明都做了关联。

网页包apache默认放在了/var/www/html下

报错拓展

#docker启动报错:WARNING: IPv4 forwarding is disabled. Networking will not work.
需要做如下配置:

vi /usr/lib/sysctl.d/00-system.conf
添加如下代码:

net.ipv4.ip_forward=1

重启network服务
systemctl restart network

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值