赞
踩
需求:通过dockerfile,构建nginx镜像,且运行容器后,生成页面:我带你学习docker运行nginx服务
#1. 创建Dockerfile,注意文件名,首字母大写 mkdir Docker_learn cd Docker_learn touch Dockerfile chmod 777 Dockerfile vim Dockerfile #在Dockerfile文件中写入以下内容: FROM nginx RUN echo '<meta charset=utf8> 我带你学习doker运行nginx服务 #2.构建镜像文件,需进入Docker_learn目录,进行构建 docker build . #3.修改镜像名的tag docker tag 镜像ID 镜像名称 docker tag b42 my_nginx #4运行该镜像文件 docker run -d -p 80:80 my_nginx #5查看宿主机的80端口
#copy指令从宿主机复制文件/目录到新的一层镜像内
copy chaoge.py /home/
#支持多个文件,以及通配符形式复制,语法要满足golang的filepath.match
copy charge* /tmp/cc?.txt. /home/
#COPY指令能够保留源文件的元数据,如权限 访问时间等等,这点很重要
1、特性和COPY基本一致,不过多了些功能
2、源文件是一个URL,此时docker引擎会下载该链接,放入目录路径,且权限自动设为600,若这不是期望结果,还得增加一层RUN指令进行调整
3、源文件是一个URL,且是一个压缩包,不会自动解压,也得单独用RUN指令解压
Dockerfile官方更为推进使用COPY,ADD包含了更多复杂的功能,且ADD会使构建缓存失效,导致镜像构建缓慢。
#1、用法,注意是双引号
CMD ["参数1","参数2"]
#2、在指定了entrypoint指令后,用CMD指定具体的参数
#3、docker不是虚拟机,容器就是一个进程,既然是进程,那么程序在启动的时候需要指定些运行参数,这就是CMD指令作用
#4、例如centos镜像默认的CMD是/bin/bash,直接docker run -it centos cant /etc/os-release
#5、CMD运行shell命令,也会被转化为shell形式
例如 CMD echo $PATH
会被转换为 CMD ["sh","-c","echo $PATH"]
#该容器运行时,执行命令。 等同于命令行的直接操作 docker run -it centos cat /etc/os-release
CMD ["cat","/etc/os-release"]
把宿主机安装,启动nginx的理念放入到dockerfile
1、RUN yum install nginx
2、RUN 配置文件修改 sed
3、RUN systemctl start nginx 这是错误的,容器内程序必须前台运行,你的容器时启动不了的
4、正确的应该是CMD [“nginx”,“-g”,“daemon off;”]
这里要注意的是,docker不是虚拟机的概念,虚拟机里的程序运行,基本上都是在后台运行,利用systemctl运行,但是容器内没有后台进程的概念,必须在前台运行。
容器就是为了主进程而存在,主进程如果退出了,容器就失去意义,自动退出。
和RUN指令一样,分为两者格式
FROM centos
RUN rpm --rebuilddb && yum install epel-release -y
RUN rpm --rebuilddb && yum install curl -y
CMD ["curl","-s","http://ipinfo.io/ip"]
2、构建Dockerfile的镜像,进入Dockerfile目录
docker build .
2.1 发现如下问题:
Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist
2.2 解决方法,centos更换为带appstream的镜像文件,取名centos_app:
#进入centos的容器
docker run -it --name centos_app centos bash
#进入yum的repos 目录
cd /etc/yum.repos.d/
#修改 centos 文件内容
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
#生成缓存更新(第一次更新,速度稍微有点慢,耐心等待两分钟左右)
yum makecache
#运行 yum update
yum update -y
#另外起个链接,安装完成后生产新的镜像
docker commit 容器IT 新镜像名(centos_app)
2.3 更新Dockerfile为如下:
FROM centos_app
RUN rpm --rebuilddb && yum install epel-release -y
RUN rpm --rebuilddb && yum install curl -y
CMD ["curl","-s"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。