Docker部署及基本操作

news2025/2/23 6:45:10

Docker是一个开源的平台 ,用于开发、交付和运行应用程序。它能够在Windows,macOS,Linux计算机上运行,并将某一应用程序及其依赖项打包至一个容器中,这些容器可以在任何支持Docker的环境中运行。容器彼此隔离,但可以通过特定的通道相互传递信息。Docker提供了一个轻量级的虚拟化解决方案。由于运行在同一计算机上的所有容器共享同一个操作系统内核,避免了启动与维护虚拟机的开销。因此相比于传统的虚拟机,Docker容器更加轻便、快速、容易部署。使用Docker,开发者可以避免在两台计算机上运行效果不一致的问题,容器提供了一致的行为,进而使得应用程序在不同环境的计算机上有相同的运行效果。

一、Docker安装部署

1、软件仓库配置

[root@docker-node1 yum.repos.d]# vim docker-ce.repo
[docker]
name=docker
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
########################################
[docker]
name=docker
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0

[root@docker-node1 ~]# dnf makecache

2、docker安装

[root@docker-node1 ~]# yum install docker-ce.x86_64 -y
[root@docker-node1 ~]# systemctl enable --now docker

二、Docker镜像管理

[root@docker-node1 ~]# docker search nginx	#镜像搜索
alpine 版本:nginx镜像的最小安装发型版本

[root@docker-node1 ~]# docker pull nginx:1.26-alpine	#镜像拉取

[root@docker-node1 ~]# docker load -i nginx:1.26-alpine.tar.gz
#导入本地镜像

[root@docker-node1 ~]# docker images
#查看本地镜像

[root@docker-node1 ~]# docker image inspect nginx:latest
#查看镜像信息

[root@docker-node1 ~]# docker history nginx:1.26-alpine
#查看镜像结构

[root@docker-node1 ~]# docker save -o nginx:1.26-alpine.tar.gz nginx:1.26-alpine
#导出镜像,一个包可以包含多个镜像
[root@docker-node1 ~]# docker save `docker images | awk 'NR>1{print $1":"$2}'` -o images.tar.gz
#保存所有镜像

[root@docker-node1 ~]# docker rmi nginx:1.26-alpine
#删除镜像

[root@docker-node1 ~]# docker rmi `docker images | awk 'NR>1{print $1":"$2}'`
#删除所有镜像

三、Docker容器管理

[root@docker-node1 ~]# docker run --rm  --name web1 nginx
#停止容器后删除容器
#进入到容器中,按<ctrl>+<d>退出并停止容器,不会有容器进程可以使用docker -rm删除停止的容器,#按<ctrl>+<pq>退出但不停止容器,会有进程可以使用docker -rm -f删除运行中的容器

[root@docker-node1 ~]# docker run -d --name web1 nginx
4f6e766f02fa52ad851775e8b52f0c318b9aec6456dc39e5dbcb6183c8475990
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS     NAMES
4f6e766f02fa   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   80/tcp    web1
#后台运行

[root@docker-node1 ~]# docker run -it --name web  --network none busybox
#指定网络

-d #后台运行
-i #交互式运行
-t #打开一个终端
--name #指定容器名称
-p #端口映射 -p 80:8080 把容器8080端口映射到本机80端口
--rm #容器停止自动删除容器
--network #指定容器使用的网络

[root@docker-node1 ~]# docker ps #查看当前运行容器
[root@docker-node1 ~]# docker ps -a #查看所有容器
[root@docker-node1 ~]# docker inspect busybox #查看容器运行的详细信息

[root@docker-node1 ~]# docker stop busybox #停止容器
[root@docker-node1 ~]# docker kill busybox #杀死容器,可以使用信号
[root@docker-node1 ~]# docker start busybox #开启停止的容器

[root@docker-node1 ~]# docker rm centos7 #删除停止的容器
[root@docker-node1 ~]# docker rm -f busybox #删除运行的容器
[root@docker-node1 ~]# docker container prune -f #删除所有停止的容器

#重新进入容器
[root@docker-node1 ~]# docker attach centos7

[root@docker-node1 ~]docker run -it --name test busybox
[root@docker-node1 ~]docker rm test
#在容器中创建文件,删除容器后文件消失

[root@docker-node1 docker]# docker run -it --name aaa busybox
/ # touch file
/ # ls
bin    dev    etc    file   home   lib    lib64  proc   root   sys    tmp    usr    var
#ctrl+pq
[root@docker-node1 dockedocker commit -m "add file" aaa busybox:v1
[root@docker-node1 docker]# docker rm -f aaa
[root@docker-node1 docker]# docker run -it --name aaa busybox:v1
/ # ls
bin    dev    etc    file   home   lib    lib64  proc   root   sys    tmp    usr    var
#提交内容永久保存

[root@docker-node1 ~]# docker cp test:/file /mnt/
#把容器文件复制到本机

[root@docker-node1 ~]# docker cp /etc/passwd test:/
#把本机文件复制到容器

[root@docker-node1 ~]# docker logs  test
# 查询容器内部日志

[root@docker-node1 ~]# docker run -d --name test nginx	
[root@docker-node1 ~]# docker attach test
#重新进入容器
[root@docker-node1 ~]# docker start test
[root@docker-node1 ~]# docker exec -it test bash
#在容器中执行命令

四、Docker镜像构建

1、镜像构建常用参数

#FROM COPY 和MAINTAINER
[root@docker-node1 ~]# mkdir docker/
[root@docker-node1 ~]# cd docker/
[root@docker-node1 docker]# touch leefile
[root@docker-node1 docker]# vim Dockerfile 
FROM busybox:latest #指定使用的基础镜像
MAINTAINER lee@timinglee.org #指定作者信息
COPY leefile / #复制当前目录文件到容器指定位置,leefile必须在当前目录中
[root@docker-node1 docker]# docker build -t example:v1 . #构建镜像
#ADD
[root@docker-node1 docker]# touch leefile{1..3}
[root@docker-node1 docker]# tar zcf leefile.gz leefile*
[root@docker-node1 docker]# vim Dockerfile
FROM busybox
MAINTAINER lee@timinglee.org
COPY leefile /
ADD leefile.gz /
[root@docker-node1 docker]# docker build -t example:v2 .
[root@docker-node1 docker]# docker run -it --rm --name test example:v2
/ # ls
bin       etc       leefile   leefile2 lib       proc     sys       usr
dev       home     leefile1 leefile3 lib64     root     tmp       var 
#ENV CMD
FROM busybox
MAINTAINER lee@timinglee.org
ENV NAME lee
CMD echo $NAME
#CMD ["/bin/echo", "$NAME"]
#CMD ["/bin/sh", "-c", "/bin/echo $NAME"]
[root@docker-node1 docker]# docker run -it --rm --name test example:v3
lee
FROM busybox
MAINTAINER lee@timinglee.org
ENV NAME lee
#CMD echo $NAME
CMD ["/bin/echo", "$NAME"]
#CMD ["/bin/sh", "-c", "/bin/echo $NAME"]
[root@docker-node1 docker]# docker run -it --rm --name test example:v3
$NAME
#ENV CMD
FROM busybox
MAINTAINER lee@timinglee.org
ENV NAME lee
#CMD echo $NAME
#CMD ["/bin/echo", "$NAME"]
CMD ["/bin/sh", "-c", "/bin/echo $NAME"]
[root@docker-node1 docker]# docker run -it --rm --name test example:v3
lee
#ENTRYPOINT
FROM busybox
MAINTAINER lee@timinglee.org
ENV NAME lee
ENTRYPOINT echo $NAME
[root@docker-node1 docker]# docker run -it --rm --name test example:v3 sh
lee
#EXPOSE VOLUME VOLUME
FROM busybox
MAINTAINER lee@timinglee.org
ENV NAME lee
EXPOSE 80 443
VOLUME /var/www/html
WORKDIR /var/www/html
RUN touch leefile
[root@docker-node1 docker]# docker build -t example:v4 .
[root@docker-node1 docker]# docker run -it --rm --name test example:v4
/var/www/html #

2、docker镜像构建

基于红帽7系统构建nginx镜像

[root@docker-node1 ~]# docker rmi `docker images | awk '/none/{print $3}'`
[root@docker-node1 ~]# docker rmi busybox:v{1..5}
#删除多余容器
[root@docker-node1 ~]# docker load -i /mnt/centos-7.tar.gz
#导入镜像
[root@docker-node1 docker]# vim Dockerfile
FROM centos:7
LABEL Mail=leo@leoma.org
ADD nginx-1.26.1.tar.gz /
WORKDIR /nginx-1.26.1
RUN yum install gcc make pcre-devel openssl-devel -y
RUN ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
RUN make
RUN make install
EXPOSE 80 443
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

[root@docker-node1 docker]# mv /root/nginx-1.26.1.tar.gz .	#确保文件在/etc/docker目录中
[root@docker-node1 ~]# dnf install httpd -y
[root@docker-node1 ~]# vim /etc/httpd/conf/httpd.con
Listen 8888
[root@docker-node1 ~]# systemctl start httpd


[root@docker-node1 ~]# mkdir /var/www/html/rhel7.9
[root@docker-node1 ~]# mount /dev/sr1 /var/www/html/rhel7.9/

[root@docker-node1 ~]# docker run -it --name centos centos:7
[root@71f26db211dc yum.repos.d]# vi centos7.repo
[centos7]
name=centos7
baseurl=http://172.17.0.1:8888/rhel7.9
gpgcheck=0
[root@77d42e14da27 yum.repos.d]# exit
exit
[root@docker-node1 ~]# docker rm centos
[root@docker-node1 ~]# docker commit -m "add repo" centos centos:repo
[root@docker-node1 docker]# docker build -t nginx:v1 

3、镜像构建优化

  • 选择最精简的基础镜像

  • 减少镜像的层数

  • 清理镜像构建的中间产物

  • 选择最精简的基础镜像

  • 减少镜像的层数

缩减镜像层

[root@docker-node1 docker]# vim Dockerfile
FROM centos:repo
LABEL Mail=leo@leoma.org
ADD nginx-1.26.1.tar.gz /
WORKDIR /nginx-1.26.1
RUN yum install gcc make pcre-devel openssl-devel -y &&  ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module && make && make install && rm -fr /nginx-1.26.1 && yum clean all
EXPOSE 80 443
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
#缩减RUN层

多阶段构建

[root@docker-node1 docker]# vim Dockerfile
FROM centos:repo AS build
ADD nginx-1.26.1.tar.gz /
WORKDIR /nginx-1.26.1
RUN yum install gcc make pcre-devel openssl-devel -y &&  ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module && make && make install && rm -fr /nginx-1.26.1 && yum clean all

FROM centos:repo
LABEL Mail=leo@leoma.org
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;"]

最精简镜像构建

[root@docker-node1 docker]# vim Dockerfile
FROM nginx:1.23 AS base
ARG TIME_ZONE
RUN mkdir -p /opt/var/cache/nginx && \
    cp -a --parents /usr/lib/nginx /opt && \
    cp -a --parents /usr/share/nginx /opt && \
    cp -a --parents /var/log/nginx /opt && \
    cp -aL --parents /var/run /opt && \
    cp -a --parents /etc/nginx /opt && \
    cp -a --parents /etc/passwd /opt && \
    cp -a --parents /etc/group /opt && \
    cp -a --parents /usr/sbin/nginx /opt && \
    cp -a --parents /usr/sbin/nginx-debug /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libpcre* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
    cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime

FROM gcr.io/distroless/base-debian11
COPY --from=base /opt /
EXPOSE 80 443
ENTRYPOINT ["nginx","-g","daemon off;"]

[root@docker-node1 ~]# docker run --rm -d --name webserver nginx:v3
e08c99379278c8dbd5417859601ac18c7ad5d78550499c2649fd946d75fae013
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                   CREATED         STATUS         PORTS             NAMES
e08c99379278   nginx:v3   "nginx -g 'daemon of…"   5 seconds ago   Up 4 seconds   80/tcp, 443/tcp   webserver
#测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2146486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rpm方式安装Mysql报错依赖冲突解决

使用rpm安装mysql时在安装到client包时报错依赖库冲突以及GPG密钥问题&#xff0c; 解决 1&#xff0c;下载 MySQL 的 YUM 存储库文件。 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2&#xff0c;安装下载的 YUM 存储库文件。 sudo rpm -…

Promise.all解决同时请求同一接口,返回值渲染时间问题

语法&#xff1a;Promise.all(iterable); 参数&#xff1a;iterable 一个可迭代对象&#xff0c;如 Array 或 String。 返回值&#xff1a;如果传入的参数是一个空的可迭代对象&#xff0c;则返回一个已完成&#xff08;already resolved&#xff09;状态的 Promise。 如果传入…

万能小程序运营管理系统 _requestPost 任意文件读取漏洞复现

0x01 产品简介 万能小程序运营管理系统是一种功能全面的系统,旨在帮助开发者和运营人员更好地管理和推广小程序。该系统集成了多种功能模块,覆盖了从小程序开发、部署到运营管理的全链条服务。系统通过提供丰富的功能和工具,帮助用户轻松搭建、管理和优化小程序。该系统支持…

提高数据集成稳定性:EMQX Platform 端到端规则调试指南

自 5.7.0 版本起&#xff0c;EMQX 支持了 SQL 调试&#xff0c;并支持在数据集成全流程中进行规则调试&#xff0c;使用户能够在开发阶段就全面验证和优化规则&#xff0c;确保它们在生产环境中的稳定高效运行。 点击此处下载 EMQX 最新版本&#xff1a;https://www.emqx.com/z…

JavaSE - 面向对象编程01

01 什么是面向对象编程(oop) 答&#xff1a;就是只关心对象之间的交互&#xff0c;而并不关心任务是怎样具体完成的。例如把一个大象放进冰箱需要几步&#xff1f;如果是面向对象编程只会思考冰箱和大象之间的交互&#xff0c;那么给出的答案就是&#xff1a;把冰箱门打开&…

PyCharm用法

一、汉化 要将‌PyCharm设置为中文&#xff0c;可以通过以下两种方法&#xff1a;‌ 通过内置插件市场安装中文语言包 1.打开PyCharm&#xff0c;点击File -> Settings&#xff08;在Mac上是PyCharm -> Preferences&#xff09;。 2.在设置界面中选择Plugins&#x…

[Linux]进程控制详解

1.创建进程 进程调用fork,当控制转移到内核中的fork代码后&#xff0c;内核做&#xff1a; ● 分配新的内存块和内核数据结构给子进程 ● 将父进程部分数据结构内容拷贝至子进程 ● 添加子进程到系统进程列表当中 ● fork返回&#xff0c;开始调度器调度 这个前面提到过&#…

智能玩具用离线语音识别芯片有什么优势

随着科技的发展&#xff0c;很多智能电子产品和儿童玩具实现了与人类的交互&#xff0c;语音芯片在这些人机交互中起到了不可替代的作用&#xff0c;语音识别芯片在智能玩具中的应用就为其带来了更多的优势。‌ 离线语音识别&#xff0c;即小词汇量、低成本的语音识别系统&…

esp32 wifi 联网后,用http 发送hello 用pc 浏览器查看网页

参考chatgpt Esp32可以配置为http服务器&#xff0c;可以socket编程。为了免除编写针对各种操作系统的app。完全可以用浏览器仿问esp32服务器&#xff0c;获取esp32的各种数据&#xff0c;甚至esp的音频&#xff0c;视频。也可以利用浏览器对esp进行各种操作。但esp不能主动仿…

【深度学习】(2)--PyTorch框架认识

文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader&#xff08;数据加载器&#xff09;4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…

【STL】vector 基础,应用与操作

vector 是 C 标准库中最常用的顺序容器之一&#xff0c;提供了动态数组的功能。与普通数组相比&#xff0c;vector 能够根据需求自动扩展或收缩&#xff0c;为程序员提供了更灵活的数据存储方案。本文将详细介绍 vector 的相关操作&#xff0c;并结合实例代码帮助读者深入理解。…

MindShare PCIE 3.0 笔记-第一二章

MindShare 官网&#xff0c;地址如下: MindShare Chapter 1&#xff1a;PCIE 背景介绍 - PCI 总线模型 1. 以 PCI 总线作为外设总线的 SOC 芯片架构 下图展示了一个以 PCI 总线作为外设总线的 SOC 芯片架构(PCI 总线类似 AXI 下的 AHB&#xff1f;)&#xff1a; 由上图可知…

Django Auth组件

文章目录 前言一、使用场景二、使用步骤1.验证用户( authenticate() 方法)2.注册用户3.退出登陆4.装饰器 前言 Django 的用户认证组件基于以下几个核心概念&#xff1a; 1.用户认证&#xff1a;处理用户的登录、注销和密码管理&#xff0c;提供了一个User模型和相关的视图、表…

技术美术一百问(02)

问题 前向渲染和延迟渲染的流程 前向渲染和延迟渲染的区别 G-Buffer是什么 前向渲染和延迟渲染各自擅长的方向总结 GPU pipeline是怎么样的 Tessellation的三个阶段 什么是图形渲染API? 常见的图形渲染API有哪些&#xff1f; 答案 1.前向渲染和延迟渲染的流程 【例图…

图神经网络池化方法

图神经网络池化方法 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 图神经网络池化方法前言一、扁平图池化二、分层图池化1.节点聚类池化2.节点丢弃池化 参考文献 前言 图池化操作根据其池化策略的差异&#xff…

软考(中级-软件设计师)(0919)

软考 一、软件设计师-历年考试考点分布情况-上午-计算机与软件工程知识 知识点分数说明比例软件工程基础知识11开发模型、设计原则、测试方法、质量特性、CMM、Pert图、风险管理14.67%面向对象12面向对象基本概念、面向对象分析与设计、UML、常见算法16.00%数据结构与算法10…

代码随想录算法day37 | 动态规划算法part10 |

今天开始正式子序列系列&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 300.最长递增子序列 本题是比较简单的&#xff0c;感受感受一下子序列题目的思路。 力扣题目链接(opens new window) 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长…

读mamba有感,自然而然产生的问题及答案。

原文链接&#xff1a;https://arxiv.org/abs/2312.00752 Q&#xff1a;为什么说Mamba可以比肩甚至超越transformer&#xff1f;各自有什么优劣&#xff1f; A&#xff1a;Transformer在处理长序列时&#xff0c;存在着计算效率低下的问题&#xff0c;无法对有限窗口之外的任何…

查询中的行选择

用WHERE子句限制从查询返回的行。一个WHERE子句包含一个必须满足的条件&#xff0c;WHERE子句紧跟着FROM子句。如果条件是true&#xff0c;返回满足条件的行。 在语法中&#xff1a; WHERE 限制查询满足条件的行 condition 由列名、表达式、常数和比较操作组成…

bootstrap application nacos环境配置失效

tmd 环境配置 是yaml &#xff0c;yml 后缀配置不生效 (不&#xff0c;看你取得文件名是什么) 如果 file-extension 配置的是yaml 就读取不到 yml 中的配置 2 . 如果还不行&#xff0c;、nacos 配置只能卸载bootstrap.yml 中&#xff0c;application.yml 不生效 bootstrap.yml…