• 作者:老汪软件技巧
  • 发表时间:2024-12-30 04:03
  • 浏览量:161

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

_docker使用_docker是干什么的

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令

Dockerfile(本小节属于)

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇

前面我们经过几个小节的讲解,把常用的Dockerfile的参数都大概讲解了一次,今天这小节我们将结合实际需求来讲解。

需求

1.要求使用基础镜像centos:7

2.添加作者的邮件

3.安装nginx

4.暴露80 和443 端口

5.工作目录/root

6.使用nginx用户启动nginx

7.添加要有环境变量,key,value可以自己定义

8.添加本地的文件首页文件,替换nginx默认的首页文件

9.配置nginx启动

拆解需求

基础镜像,这个比较简单,只需要使用标准使用语句编写即可,唯一需要注意就是名字和实际匹配上。因为默认的镜像都是官方镜像,他可以简写,而我们自己是修改了tag的镜像是不能简写的。

docker.io/library/centos:7
centos:7
# 这实际上是一个镜像
FROM centos:7
#或者
FROM docker.io/library/centos:7

作者,这个也比较简单,只需要使用标准使用语句编写即可。

MAINTAINER xxx@xxx.com

安装nginx,这个说简单也简单,说复杂也算复杂。因为我们用的是centos7的镜像,而centos7目前已经过期,所以第一件事就是要更换源,更换源以后,还要考虑版本的问题,当然这里未考虑版本的问题,只考虑功能。

#这里用的命令,必须是FROM镜像里面必须有的命令
#如果没有就必须选其他方法,比如我其实在写的是写的wget
#如果通过网络下载还必须考虑容器能否上网的问题
RUN rm -rf /etc/yum.repos.d/*.repo
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum -y install epel-release
RUN yum -y install nginx

暴露端口,这个比较简单,只需要使用标准使用语句编写即可。

EXPOSE 80 443

工作目录,如果为了减少干扰,这个操作最好放到后面,所以动态步骤都做完了再写这个。

WORKDIR /root

用户,这个和工作目录一样,也尽量放到后面,还有一个要考虑就是nginx这个用户是否会被自动创建,如果不会则需要你通过RUN命令创建用户。

USER nginx

docker是干什么的_docker使用_

环境变量,这个也比较简单,只需要使用标准使用语句编写即可,也尽量放到后面

ENV A=B

复制本地文件,需要考虑就是应该放置那个目录(需要你对nginx比较了解),我这里就直接给出来对应的目录。

ADD index.html /usr/share/nginx/html/

nginx启动,这里我们就不用nginx的标准方案,因为不是所有软件都有自己前台启动方式。所以有些镜像会使用一个tail -f命令打开某个文件方式来做启动命令,确保无论里面的应用软件是否正确,都不影响容器运。当出现应用无法去启动的时候可以通过exec进入容器进行检查和修复。当然这个也是一个具有争议的问题(因为如果使用业务启动命令来容器,如果出现异常,容器无法启动,也无法进入容器检查修复,需要经过重新构建镜像才能恢复)

RUN nginx
ENTRYPOINT ["tail", "-f", "/etc/hosts"]
#实际这个并不会成功,因为不同的命令层是不一样的

合并起来就是这样的:

mkdir docker
cd docker
touch index.html
echo "this is docker test" > index.html
touch Dockerfile
vi Dockerfile
FROM centos:7
MAINTAINER xxx@xxx.com
RUN rm -rf /etc/yum.repos.d/*.repo
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum -y install epel-release
RUN yum -y install nginx
ADD index.html /usr/share/nginx/html/
EXPOSE 80 443
WORKDIR /root
ENV A=B
ENTRYPOINT ["sh", "-c", "nginx & tail -f /etc/hosts"]
# 构建镜像
docker build -t nginx:test .
# 创建容器,并暴露80端口
docker run -itd -p80:80 nginx:test
# 访问容器
curl localhost

docker使用_docker是干什么的_

总结

我们前面的命令单独写出来其实都没有问题,但是组合到一起使用就会遇到问题,下面就是我是我在编写这个Dockerfile的遇到的问题

1.下载repo本来是使用的wget命令,但是默认的镜像里面没这个命令,所以我更换成了curl命令。

2.安装nginx的时候不记得需要先安装epel源,centos的默认源里面是没有nginx的。

3.本来打算是使用nginx用户启动的,但是nginx默认的80端口,nginx这个用户作为普通用户无法启动1024以下的端口,而且还出现root安装的软件,nginx用户去启动服务的时候部分文件权限不足的情况,所以后来这个功能被取消。

4.启动使用命令原来写的是nginx命令启动,但是由于使用的RUN命令,这个命令是单独的一层,在实际上不会生效,后来是把启动命令和 tail 这个前台命令放到一起才解决。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!


Top