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

Docker技术相关学习二

一、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.kler.cn/a/532979.html

相关文章:

  • CSS 值和单位详解:从基础到实战
  • 【BUUCTF杂项题】荷兰宽带数据泄露、九连环
  • 安全策略配置
  • 【25考研】南开软件考研复试复习重点!
  • 实现基础的shell程序
  • kubernetes(二)
  • oracle: 表分区>>范围分区,列表分区,散列分区/哈希分区,间隔分区,参考分区,组合分区,子分区/复合分区/组合分区
  • Tag注解
  • C++滑动窗口技术深度解析:核心原理、高效实现与高阶应用实践
  • 2024.1版android studio创建Java语言项目+上传gitee
  • 解决带空格的字符串输入问题:C/C++中的几种常用函数
  • 网络原理(5)—— 数据链路层详解
  • 使用SpringBoot发送邮件|解决了部署时连接超时的bug|网易163|2025
  • Verilog基础(一):基础元素
  • 用C语言实现一个Shell:Tutorial - Write a Shell in C
  • C语言:深入了解指针2(超详细)
  • LLMs瞬间获得视觉与听觉感知,无需专门训练:Meta的创新——在图像、音频和视频任务上实现最优性能。
  • 基于 Java 开发的 MongoDB 企业级应用全解析
  • ZOMI - AISystem AI Infra 分享
  • 【Rust自学】20.1. 最后的项目:单线程Web服务器
  • 基于python热门歌曲采集分析系统
  • 【力扣】53.最大子数组和
  • open-webui启动报错:OSError: [WinError 1314] 客户端没有所需的特权。
  • AI Block Blast Solver:提升游戏体验的智能助手
  • Innodb为何能干掉MyISAM
  • 编程AI深度实战:大模型哪个好? Mistral vs Qwen vs Deepseek vs Llama