Docker技术相关学习二

embedded/2025/2/5 12:53:31/

一、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/embedded/159754.html

相关文章

Nginx 运维开发高频面试题详解

一、基础核心问题 原文链接:https://blog.csdn.net/weixin_51146329/article/details/142963853 1、什么是Nginx? Nginx 是一个高性能的 HTTP 和反向代理服务器,它以轻量级和高并发处理能力而闻名。Nginx 的反向代理功能允许它作为前端服务…

低代码系统-产品架构案例介绍、明道云(十一)

明道云HAP-超级应用平台(Hyper Application Platform),其实就是企业级应用平台,跟微搭类似。 通过自设计底层架构,兼容各种平台,使用低代码做到应用搭建、应用运维。 企业级应用平台最大的特点就是隐藏在冰山下的功能很深&#xf…

Python(Pandas)数据分析学习

1.Pandas基本构成 引入Pandas import pandas as pd 1.Series 行 对应Excel中的一行数据,一维数据 定义Series # 第一个参数是具体数据 # 第二个参数的对应的索引下标 # 第三个参数的行名称 data pd.Series([1,2,3,4,5], index[a,b,c,d,e], namedata) print(d…

结合机器视觉与深度学习的 Python 项目

以下是一个结合机器视觉与深度学习的 Python 项目示例,用于对茶汤照片进行背景处理、识别颜色最均匀的区域、进行色彩校正并提取 RGB 值,同时可以处理从采集装置传输到电脑的照片。 项目思路 背景处理:使用 OpenCV 库对图像进行预处理&…

【Python深入浅出】解锁Python3自定义函数:从新手到高手的进阶之路

目录 一、Python3 自定义函数初相识二、自定义函数的语法基础(一)定义函数的基本格式(二)函数命名规则(三)参数与参数传递(四)参数解包 三、函数的返回值(一)…

【C++】STL——vector的使用

目录 💕1.vector介绍 💕2.vector的基本用法 💕3.vector功能的具体用法 (讲解) 💕4.vector——size,capacity函数的使用 (简单略讲) 💕5.resize&#xff…

SpringBoot 整合 SpringMVC:配置嵌入式服务器

修改和 server 相关的配置(ServerProperties): server.port8081 server.context‐path/tx server.tomcat.uri‐encodingUTF‐8 注册 Servlet 三大组件:Servlet、Fileter、Listener SpringBoot 默认是以 jar 包的方式启动嵌入式的 Servlet 容器来启动 Spr…

python Flask-Redis 连接远程redis

当使用Flask-Redis连接远程Redis时,首先需要安装Flask-Redis库。可以通过以下命令进行安装: pip install Flask-Redis然后,你可以使用以下示例代码连接远程Redis: from flask import Flask from flask_redis import FlaskRedisa…