docker: 使用nginx容器运行html静态网页以及制作镜像

项目背景

背景:要求把公司的静态网页部署在docker容器上,并且将容器打包交给运维人员

踩到的坑:没有弄明白export和save的区别

操作步骤

方法1,利用Dockerfile制作镜像[推荐直接看这里]

制作模板

下载基础模板

>* sudo docker pull nginx

准备html

>在index同层目录下建立Dockerfile
>* sudo gedit Dockerfile
>FROM nginx:latest
  COPY . /usr/share/nginx/html

在这里插入图片描述

打包生成镜像

生成镜像

>* sudo docker build -t html:1.0 .  【html:1.0为指定的镜像名:tag】

在这里插入图片描述

运行docker容器

  • sudo docker run -p 8080:80 -d html:1.0

检查结果:

  • 浏览器:localhost:8080
    在这里插入图片描述

导出镜像

  • sudo docker save html > html.tar

使用镜像

导入镜像

  • sudo docker load < html.tar
    在这里插入图片描述

方法2:[累赘, 不要看]

制作镜像模板

下载nginx容器
  • sudo docker pull nginx
    在这里插入图片描述
    可以看出镜像是一层一层下载的,这验证了镜像其实是个千层饼,是一层一层叠加的
开启容器
  • sudo docker run -p 8080:80 -d nginx //将80端口映射为8080,或者80:80还是原先的80端口,不可以不写。
  • netstat -anp | grep 8080 //端口已经开启了
  • sudo docker ps
    在这里插入图片描述
将html导入/usr/share/nginx/html目录
  • sudo docker cp demo/ 264f32137ad0:/usr/share/nginx/html
    • 【备注:demo目录下保存的是html文件】
  • sudo docker exec -it 264f32137ad0 bash
    • 【另一种写法:sudo docker exec -it 264f32137ad0 /bin/bash】
  • 将原来html下面的所有文件删除,将demo下载的静态文件移动到html目录下载
    在这里插入图片描述
  • 打开浏览器,输入localhost:8080就可以看到html静态网页了
    在这里插入图片描述
  • exit

使用save制作镜像

提交修改的容器,并生成新的镜像
  • sudo docker commit 264f32137ad0 nginx
  • sudo docker images
    在这里插入图片描述
导出镜像
  • sudo docker save nginx> newnginx.tar
    【另一种写法:sudo docker save -o newnginx.tar nginx】
    【备注:nginx是容器名字,可以用容器ID代替】在这里插入图片描述

使用刚刚制作的镜像

导入镜像

环境:一台新的ubuntu上

  • sudo docker load < newnginx.tar
    【另一种写法:sudo docker load --input nginxv1.tar】
    在这里插入图片描述

备注:导入容器时可能会有权限问题,这时候:sudo chmod 777 newnginx.tar
如果想重命名镜像:

docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)

开启容器并且浏览器查看
  • sudo docker run -p 8080:80 -d nginx
  • 打开浏览器,输入localhost:8080就可以看到html静态网页了
  • sudo docker inspect nginx 【查看所制作的镜像的信息】
    在这里插入图片描述
    发现修改的配置文件依然存在

出错的步骤
因为没有弄清楚save和export的区别,第一次我是使用export方法导入导出的,但是发现不能监听端口时会出错。

制作镜像

  • sudo docker container ls -a
  • sudo docker export bcad5b323e6c > niginxv2.tar
    【备注:导出镜像,bcad5b323e6c是镜像ID】

导入镜像

  • sudo cat niginxv2.tar | docker import - niginx:v2
    【将容器快照niginxv1.tar导入为镜像,并且指定镜像名字叫做niginx:v1 】
    在这里插入图片描述
    解决:
  • sudo -i 【切换到root用户】
  • cat niginv2.tar | docker import - niginx:v2
  • su - ocean 【切换到普通用户】
  • sudo docker images
    在这里插入图片描述

运行容器

  • sudo docker run -p 8080:80 -d niginx:v2
    docker: Error response from daemon: No command specified.
    See ‘docker run --help’.
    在这里插入图片描述

错误原因:
1、没有cmd命令,即使加上了bash,但是在浏览器不能查看设置的静态网页
在这里插入图片描述
在这里插入图片描述
2、查看export设置的详细信息

  • sudo docker inspect niginx:v2
    在这里插入图片描述

3、我进入import导出的镜像,发现我刚刚导入的html文件还在。
总结:采用export制作的镜像,它的配置信息什么的不见了。
推测:docker export的应用场景主要用来制作基础镜像

总结:save VS export

  • save是持久化镜像,export是持久化容器
    • sudo docker save 镜像ID或者镜像名字 > 保存名字.tar
    • sudo docker export 容器ID或者容器名字 > 保存名字.tar
  • docker load载入镜像存储文件,docker import导入容器快照,但是两者都会恢复为镜像
  • docker load不能对载入的镜像重命名,docker import容器快照文件导入时可以重新指定标签
    *容器快照文件将会丢弃所有的历史记录和元数据信息[仅保存容器当时的快照状态],而镜像存储文件将保存完整记录。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在Docker使用Nginx时,可以通过以下步骤进行配置和部署: 1. 首先,确保已经安装了DockerDocker Compose。可以在官方网站上找到相应的安装指南。 2. 创建一个新的目录,用于存放Nginx的配置文件和相关文件。 3. 在该目录下创建一个名为`Dockerfile`的文件,并添加以下内容: ``` FROM nginx:latest COPY nginx.conf /etc/nginx/nginx.conf COPY site.conf /etc/nginx/conf.d/default.conf ``` 这个Dockerfile使用最新版本的Nginx作为基础镜像,并将自定义的配置文件复制到相应的位置。 4. 在同一目录下创建一个名为`nginx.conf`的文件,用于配置Nginx的全局设置。可以根据需要进行自定义配置。 5. 创建一个名为`site.conf`的文件,用于配置Nginx的虚拟主机。以下是一个示例配置: ``` server { listen 80; server_name example.com; root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ =404; } } ``` 这个示例配置将监听80端口,将所有请求转发到`/usr/share/nginx/html`目录下,并尝试查找对应的静态文件。 6. 构建Docker镜像。在终端中进入到该目录,并执行以下命令: ``` docker build -t my-nginx . ``` 这个命令将根据Dockerfile构建一个名为`my-nginx`的镜像。 7. 运行容器。执行以下命令: ``` docker run -d -p 80:80 my-nginx ``` 这个命令将在后台运行一个基于`my-nginx`镜像容器,并将主机的80端口映射到容器的80端口。 现在,你可以通过访问`http://localhost`来查看Nginx的默认页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值