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

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.dtcms.com/a/362129.html

相关文章:

  • STM32项目分享:基于单片机的图书馆座位监测系统
  • docker-nacos-v3
  • 告别发票山,拥抱高效流:一位财务经理的“解放”宣言
  • 第四次工业革命简史:从图灵测试到ChatGPT的AI革命
  • ModelScope 开发环境配置指南
  • leetcode笔记
  • OpenCV轻松入门_面向python(第四章色彩空间类型转换)
  • 从全栈开发到微服务架构:一次真实面试的深度解析
  • Ansible 常用模块归纳总结
  • 【Axure高保真原型】表格增删改查(含下拉列表)
  • Swift 解法详解:LeetCode 368《最大整除子集》
  • SQL Server从入门到项目实践(超值版)读书笔记 25
  • 使用 Google OR-Tools 轻松解决复杂优化问题(如排程优化)
  • HarvardX TinyML小笔记2(番外3:数据工程)
  • Node.js版本管理工具 || 全配置安装
  • Claude AI 因编写勒索软件和开展勒索活动而被滥用
  • Agent落地元年:谁在成为最坚实的土壤?
  • 【前端】跨域
  • 懒加载详细讲解
  • 在Linux系统上第一次创建java项目并运行
  • `[特殊字符]LeetCode每日一题 1792. 最大平均通过率(打卡第一天)`
  • 在 React Native 层禁止 iOS 左滑返回(手势返回/手势退出)
  • Unity 串口通讯2 硬件SDK 开发[数据监听,按键监听]
  • 人工智能——课程考核
  • Python OpenCV图像处理与深度学习:Python OpenCV图像几何变换入门
  • 线程池发生了异常该怎么处理?
  • Groovy 的核心语法
  • 计算机视觉与深度学习 | 传统图像处理技术的未来发展前景分析
  • 算法练习——169.多数元素
  • 焦耳热技术助力顶刊研究:薄层质子交换膜实现高效水电解制氢