当前位置: 首页 > backend >正文

Linux之Docker虚拟化技术(三)

一、基于容器制作新镜像

这里以nginx为例制作镜像,修改了容器,制作成nginx:v1版本.在多台服务器共享使用创建nginx

配置文件,环境准备

## 修改nginx.conf配置文件
[root@localhost docker]# sed -e '/#/d' -e '/^$/d' /etc/nginx/nginx.conf.default 
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}## 拉取镜像
[root@localhost docker]# docker pull nginx:latest
latest: Pulling from library/nginx
b1badc6e5066: Pull complete 
a2da0c0f2353: Pull complete 
e5d9bb0b85cc: Pull complete 
14a859b5ba24: Pull complete 
716cdf61af59: Pull complete 
14e422fd20a0: Pull complete 
c3741b707ce6: Pull complete 
Digest: sha256:33e0bbc7ca9ecf108140af6288c7c9d1ecc77548cbfd3952fd8466a75edefe57
Status: Downloaded newer image for nginx:latest## 查看镜像
[root@localhost docker]# docker images | grep nginx
nginx               latest              ad5708199ec7        2 weeks ago         192MB## 镜像配置拷贝
[root@localhost docker]# docker cp /etc/nginx/nginx.conf vm01:/etc/nginx/nginx.conf
[root@localhost docker]# 
[root@localhost docker]# 
[root@localhost docker]# 

我先在将我新建的镜像做保存处理为我们的v1版本

[root@localhost docker]# docker commit 32e173542bdc nginx:v1
sha256:48b81f0350562f175b59df0ca8c2151b02dcf8c8b895bf8700dbab93cd1a7f19

查看创建的容器镜像版本信息

我们也可以将这个镜像打成一个tar包进行保存

[root@localhost docker]# docker save nginx:v1>nginx.tar

导入镜像方法

[root@localhost docker]# docker load -i nginx.tar 
Loaded image: nginx:v1
[root@localhost docker]# docker rmi -f nginx:v1
Untagged: nginx:v1
Deleted: sha256:48b81f0350562f175b59df0ca8c2151b02dcf8c8b895bf8700dbab93cd1a7f19
Deleted: sha256:dc789bf4b6f3c77ab0582be92e4c56cf417750f9efce355a996f1658da90f488

使用export导出镜像(丢失内存中的文件,并且只能使用import导入)

使用import导入信息后tag名需要修改

使用docker启动镜像情况下,export 导出的镜像只能使用export导入,并且后台命令只能使用/bin/bash

## 查看docker镜像
[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v2                  fe881f8d6ea8        26 minutes ago      191MB
nginx               v1                  48b81f035056        40 minutes ago      192MB
nginx               latest              ad5708199ec7        2 weeks ago         192MB
[root@localhost docker]### 后台启动容器 
[root@localhost docker]# docker run -itd --name=vm02 nginx:v2 nginx -g "daemon off"
65b1da3703a0eafab1cc73cda69b0cbedeb9f2f434df1003de44a7962724ecbe
[root@localhost docker]# 
[root@localhost docker]#  ## 查看容器使用情况
[root@localhost docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
32e173542bdc        nginx:latest        "/docker-entrypoint.…"   About an hour ago   Up About an hour    80/tcp              vm01[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
65b1da3703a0        nginx:v2            "nginx -g 'daemon of…"   31 seconds ago      Exited (1) 30 seconds ago                       vm02
32e173542bdc        nginx:latest        "/docker-entrypoint.…"   About an hour ago   Up About an hour            80/tcp              vm01## 启动docker镜像
[root@localhost docker]# docker run -itd --name=vm03 nginx:v2 /bin/bash
1d31a27d131ae70a0863bf563e75376e7168b9a1f6f8bd0b78d6b72387ec5373
[root@localhost docker]# 
[root@localhost docker]# 
[root@localhost docker]# 
[root@localhost docker]# ## docker import -->import ->docker run + 命令
[root@localhost docker]# 
[root@localhost docker]# 
[root@localhost docker]# 
[root@localhost docker]# docker ps -a
\CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                     PORTS               NAMES
1d31a27d131a        nginx:v2            "/bin/bash"              About a minute ago   Up About a minute                              vm03
65b1da3703a0        nginx:v2            "nginx -g 'daemon of…"   2 minutes ago        Exited (1) 2 minutes ago                       vm02
32e173542bdc        nginx:latest        "/docker-entrypoint.…"   About an hour ago    Up About an hour           80/tcp              vm01
[root@localhost docker]# 
[root@localhost docker]# docker exec -it vm03 /bin/bash
root@1d31a27d131a:/# 
root@1d31a27d131a:/# /usr/sbin/nginx

查看nginx执行镜像层数

[root@localhost docker]# docker history nginx:latest
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
ad5708199ec7        2 weeks ago         CMD ["nginx" "-g" "daemon off;"]                0B                  buildkit.dockerfile.v0
<missing>           2 weeks ago         STOPSIGNAL SIGQUIT                              0B                  buildkit.dockerfile.v0
<missing>           2 weeks ago         EXPOSE map[80/tcp:{}]                           0B                  buildkit.dockerfile.v0

[root@localhost ~]# docker run -itd --name=vm04 nginx:v2 nginx -g "daemon off;"
ec4345cdbfd3692401cbbd25e880945e8d984e0e01ecc0ac5f31f0a66ddfd340

容器启动一定要指定一个入口命令,保证容器是一个挂起的状态(存在一个进程程序)

查看容器的入口命令

[root@localhost ~]# docker run -itd --name=mysql01 -v /data/mysql:/var/lib/mysql/ -e MYSQL_ROOT_PASSSWORD=aaaAAA111. mysql:8.0.37

二、基于Dockerfile制作基础镜像服务

Dockerfile制作镜像是一个基于基础镜像,通过编写Dockerfile方式将功能进行叠加,去构建镜像,从而去创建容器

  • 基于nginx构建nginx网站镜像

## 2025年9月1日18:45:41
## create nginx image
# by author 666
## 指定基础镜:
FROM nginx:latest## 指定工作目录
WORKDIR /root## 删除默认nginx配置文件
RUN rm -rf /etc/nginx/conf.d /etc/nginx/nginx.conf## 拷贝宿主机模版文件到nginx目录
COPY nginx.conf /etc/nginx/COPY index.html /usr/share/nginx/html## 指定cmd入口命令
CMD nginx -g "daemon off;"~                                             
  • 基于centos7镜像构建ssh远程

## 2025年9月1日18:45:41
## create nginx image
# by author 666
## 指定基础镜:
FROM centos7-ansible:latestMAINTAINER www.66.cnLABEL OS 2.0
## 指定工作目录
WORKDIR /root/## 删除repo源目录
RUN rm -rf /etc/yum.repos.d/*.repo## 拷贝阿里云源目录
COPY Centos7-al.repo  /etc/yum.repos.d/## 安装openssh服务
RUN yum -y install openssh-server net-tools iproute## 设置root密码
RUN echo 1 | passwd --stdin root## 生成ssh秘钥文件
RUN sshkeygen -A
## 指定cmd入口命令
CMD nginx -g /usr/sbin/sshd -D## 设置entrypoint入口
ENTRYPOINT /usr/bin/init

三、Dockerfile制作镜像规范

  • 精简镜像:尽量让镜像只有一个服务
  • 制作的镜像源不易过大,尽量保持轻简
  • 提供注释和维护者信息
  • 减少镜像层数,可以将多条RUN指令用&&进行连接
  • 合理调整镜像指定顺序,在开启缓存情况下,已经有缓存的文件放在前面,没有缓存的文件放在后面
  • 减少外部源干扰

http://www.xdnf.cn/news/19519.html

相关文章:

  • nacos微服务介绍及环境搭建
  • Oracle 查询有哪些用户 提示用户名密码无效
  • AI 入门指南:从 “听不懂人话” 到 “比你懂你”,人工智能到底是个啥?
  • shell编程 函数、数组与正则表达式
  • 网络与信息安全有哪些岗位:(13)安全服务工程师 / 顾问
  • pip不是内部或外部命令的问题怎么解决?
  • 基于.NET Framework 4.0的FTP文件传输类
  • 【云存储桶安全】怎么满足业务需求,又最大程度上满足信息安全要求呢?
  • 构建深度学习音频识别模型:从数据预处理到性能评估
  • 【K8s】整体认识K8s之监控与升级/ETCD的备份和恢复/kustomization/CRD
  • wpf之样式
  • PAT 1089 Insert or Merge
  • UBUNTU之Onvif开源服务器onvif_srvd:1、编译
  • 如何使用VMware创建一台Ubuntu机器
  • Shell脚本实用技巧集锦:从时间判断到系统监控
  • 【数据可视化-104】安徽省2025年上半年GDP数据可视化分析:用Python和Pyecharts打造炫酷大屏
  • HTTP/2 多路复用
  • 网络流量分析——熟悉Wireshark
  • 时序数据库国产的有哪些?
  • ​​--flush-logs 的作用:刷新 MySQL 的日志文件(主要是二进制日志 binlog)​
  • 解析简历重难点与面试回答要点
  • 【开题答辩全过程】以 健身爱好者饮食管理小程序为例,包含答辩的问题和答案
  • LeetCode82删除排序链表中的重复元素 II
  • 力扣hot100 | 堆 | 215. 数组中的第K个最大元素、347. 前 K 个高频元素、128. 最长连续序列
  • 《架构师手记:SpringCloud整合Nacos实战·一》
  • Transformer的并行计算与长序列处理瓶颈总结
  • 可编辑115页PPT | 某纸制品制造企业数字化转型战略规划项目建议书
  • 【实验protocol分享】了解流式细胞术
  • 串口通讯个人见解
  • 软考中级【网络工程师】第6版教材 第4章 无线通信网 (下)