Docker技术相关学习二

news/2025/2/5 21:49:37/

一、Docker简介

        1.Docker之父Solomon Hykes形容docker就像传统的货运集装箱。

        2.docker的特点和优势:

                轻量级虚拟化:Docker容器相较于传统的虚拟机更加的轻量和高效,能够快速的启动和停止来节省系统资源。

                一致性:确保应用程序在不同的环境中具有一致的运行表现

                可移植性:可以轻松的将docker从一个平台迁移到另一个平台,无需考虑依赖和环境配置的差异

                最高的资源利用:多个docker可以共享主机的操作系统内核从而可以更有效的利用系统资源。

                易于部署和扩展:能够快速部署新的应用实例,也可以轻松的进行水平扩展

        3.docker在企业中的应用场景:

                   

        4.docker的优势:

                对于开发人员:build once and run anywhere

                对于运维人员:configure once and run anything

二、部署docker

        1.容器工作方法:

        

        2.安装docker-ce并启动服务:

                yum  install  docker-ce  -y

                编辑docker 启动文件,设定其使用iptables的网络设定方式,默认使用nftables

vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
--iptables=true

                启动docker:systemctl enable docker --now

                在rhel7中需要修改以下配置信息,其目的是将桥接网口的流量交给iptables处理,使用iptables的规则进行流量过滤以及启用网络数据的转发功能,即可以将一个网口的数据包转发到另外一个接口上

vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1

三、Docker的基本操作

        1.dcoker 镜像管理:

                搜索镜像:docker search nginx

                拉取镜像:docker pull busybox

                查看本地镜像:docker iamges

                查看镜像信息:docker  image  inspect  nginx:1.26

                保存镜像:docker image  save nginx:latest  -o nginx-latest.tar.gz

                删除镜像:docker rmi nginx:latest

        2.容器的常用操作:

                启动容器:docker run -d --name  mario  -p  80:8080  xiao/mario

                                   docker run -it  --name  centos7  centos:7

                进入容器中,按ctrl+d退出并停止容器,按ctrl+pq退出但不停止容器,其中-d参数表示容器在后台运行当前终端会立即返回且容器的输出不会显示在终端,宿主机的80端口会映射到容器的8080端口,可以通过浏览器访问 http://localhost来访问,会将该请求转发到容器内的web应用。其中 -i参数表示以交互模式运行容器(使容器的标准输入保持打开状态),-t参数表示为其分配一个伪终端,即可以在容器内使用命令行工具。

                重新进入容器:docker attach centos7 

                在容器中执行命令:docker exec -it test  ifconfig       

                查看当前运行容器:docker ps

                查看所有容器:docker ps -a

                查看容器运行的详细信息:docker inspect busybox

                停止容器:docker stop busybox

                杀死容器:docker kill busybox

                开始停止的容器:docker start busybox

                容器内的第一个进程必须一直处于运行状态否则这个容器会处于退出状态

                删除停止的容器:docker rm centos7

                删除运行的容器:docker rm -f busybox

                删除所有停止的容器:docker container prue -f  

        3.容器内提交:

docker run -it --name  test busybox
touch testfile
#删除容器
docker rm test
#删除容器后开启新的容器文件
docker run -it --name test busybox

                通过上述示例可以看到容器内刚开始创建的文件已经不存在,当需要在再次打开容器时仍然可以看到之前创建过的文件,可以执行容器内内容提交的命令来永久保存

#容器内内容提交命令
docker commit -m "add testfile" test busybox:v1
#查看本地镜像的提交动作
docker image history busybox:v1

        4.系统中文件和容器中的文件传输

#把容器中文件复制到本机
docker cp test2:/testfile  /mnt
#把本机文件复制到容器中
docker cp /etc/fstab  test2:/fstab

        5.查询容器内部日志:docker logs web

四、docker 镜像构建

        1.docker 镜像结构:

                共享宿主机的kernel

                采用分层结构最大的好处是共享资源

        2.镜像运行的基本原理:

                

        copy-on-write可写容器层,容器以下所有镜像层都是只读的,docker从上往下依次查找文件,容器层保存镜像变化的部分,并不会对镜像本身进行任何修改。

        3.镜像获取方式:

                docker pull 镜像地址

                docker load -i 本地镜像包

        4.镜像构建参数:

        

        5.dockerfile实例:

[root@server1 ~]# mdkir docker
[root@server1 ~]# cd docker/
[root@server1 docker]# cp ~/nginx-1.23.3.tar.gz .
[root@server1 docker]# vim Dockerfile
FROM centos:7
ADD nginx-1.23.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.23.3
RUN yum install -y gcc make pcre-devel openssl-devel
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --with-http_ssl_module --with-http_stub_status_module
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

        6.通过dockerfile生成镜像:docker build -t webserver:v1

        7.镜像优化示例:

                缩减镜像层(docker会将每个指令执行的结果作为一个单独的镜像层,每个镜像层都有自己的文件系统它们相互堆叠):

[root@server1 docker]# vim Dockerfile
FROM centos:7 as build
ADD nginx-1.23.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.23.3
RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS
-g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --
with-http_stub_status_module && make && make install && cd .. && rm -fr nginx-
1.23.3 && yum clean all
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

                docker build -t webserver:v2

                多阶段构建(允许使用多个from语句构建镜像):

[root@server1 docker]# vim Dockerfile
FROM centos:7 as build
ADD nginx-1.23.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.23.3
RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS
-g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --
with-http_stub_status_module && make && make install && cd .. && rm -fr nginx-
1.23.3 && yum clean all
FROM centos:7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]


http://www.ppmy.cn/news/1569616.html

相关文章

面试--你的数据库中密码是如何存储的?

文章目录 三种分类使用 MD5 加密存储加盐存储Base64 编码:常见的对称加密算法常见的非对称加密算法https 传输加密 在开发中需要存储用户的密码,这个密码一定是加密存储的,如果是明文存储那么如果数据库被攻击了,密码就泄露了。 我们要对数据…

大模型高级工程师实践 - 将课程内容转为视频

通过整合之前生成的文字、音频、PPT,我们能够制作出引人入胜的科普课程视频,使表达更加生动且多样化。本节课程将介绍如何利用音视频处理工具ffmpeg和moviepy,快速将课程内容转化为视频。 1. 原理介绍 当前的大模型文生视频或图生视频方案还…

基于“蘑菇书”的强化学习知识点(五):条件期望

条件期望 摘要一、条件期望的定义二、条件期望的关键性质三、条件期望的直观理解四、条件期望的应用场景五、简单例子离散情况连续情况 摘要 本系列知识点讲解基于蘑菇书EasyRL中的内容进行详细的疑难点分析!具体内容请阅读蘑菇书EasyRL! 对应蘑菇书Eas…

Linux_线程同步生产者消费者模型

同步的相关概念 同步:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步竞态条件:因为时序问题,而导致程序异常,我们称之为竞态条件。 同步的…

CentOs9新手教程

CentOS 9是基于RHEL的CentOS Stream版本,主要用于开发和测试环境,不适合作为生产环境的稳定系统。它提供了最新的软件和功能,但可能存在不稳定性和兼容性问题。如果你需要一个稳定的生产环境,建议使用CentOS Linux版本。 安装环境…

4 前端前置技术(中):node.js环境

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 前言

使用PaddlePaddle实现逻辑回归:从训练到模型保存与加载

1. 引入必要的库 首先,需要引入必要的库。PaddlePaddle用于构建和训练模型,pandas和numpy用于数据处理,matplotlib用于结果的可视化。 import paddle import pandas as pd import numpy as np import matplotlib.pyplot as plt 2. 加载自定…

C语言内存之旅:从静态到动态的跨越

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一 动态内存管理的必要性二 动态…