Docker部署及基本操作

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 allFROM 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/localtimeFROM 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.rhkb.cn/news/426883.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL实战面试题(附案例答案+建表语句+模拟数据+案例深度解析),练完直接碾压面试官

知识点思维导图 案例1 建表语句与模拟数据 用户表 users CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, signup_date DATE NOT NULL ); INSERT INTO users (username, email, signu…

『功能项目』QFrameWork框架重构OnGUI【63】

我们打开上一篇62QFrameWork背包框架的项目&#xff0c; 上文将功能实现在一个脚本中 本章要做的事情让脚本实现背包框架思想 首先按照图示创建脚本&#xff1a; 创建脚本&#xff1a;Item.cs namespace QFramework {public class Item{//道具public string Key;public string …

2024秋季云曦开学考

web ezezssrf 打开环境&#xff0c;代码审计 看起来有点多&#xff0c;要绕过五层 第一层&#xff1a;存在弱比较&#xff0c;使用数组或0e绕过 yunxi[]1&wlgf[]2 yunxis878926199a&wlgfs155964671a 第二层&#xff1a;存在强比较&#xff0c;此处使用string限制…

superset 解决在 mac 电脑上发送 slack 通知的问题

参考文档: https://superset.apache.org/docs/configuration/alerts-reports/ 核心配置: FROM apache/superset:3.1.0USER rootRUN apt-get update && \apt-get install --no-install-recommends -y firefox-esrENV GECKODRIVER_VERSION0.29.0 RUN wget -q https://g…

【智路】智路OS airos-edge

欢迎来到智路OS https://gitee.com/ZhiluCommunity/airos-edge 智路OS是全球首个开源开放的智能网联路侧单元操作系统&#xff08;简称“智路OS”&#xff09;&#xff0c; 是以高等级自动驾驶技术为牵引&#xff0c;沉淀出来的“车路云网图”一体化的智能交通基础软件平台。…

Ansible——Playbook基本功能

文章目录 一、Ansible Playbook介绍1、Playbook的简单组成1&#xff09;“play”2&#xff09;“task”3&#xff09;“playbook” 2、Playbook与ad-hoc简单对比区别联系 3、YAML文件语法&#xff1a;1. 基本结构2. 数据类型3. 列表4. 字典&#xff08;映射&#xff09;5. 注释…

【数据结构】排序算法---归并排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言——迭代版C语言——递归版PythonJavaC——迭代版C——递归版Go 结语 1. 定义 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法。该算法是采用分治法&#xff0…

CentOS7.9环境上NFS搭建及使用

Linux环境NFS搭建及使用 1. 服务器规划2. NFS服务器配置2.1 主机名设置2.2 nfs安装2.2.1 repo文件替换2.2.2 NFS服务安装 2.3 nfs配置2.4 服务查看2.5 资源发布2.6 配置nfs服务开机自启2.7 端口开放 3.应用服务器配置3.1 主机名设置3.2 nfs安装3.2.1 repo文件替换3.2.2 NFS服务…

你真的需要理解Diffusion(扩散模型),它在视觉领域具有无与伦比的美丽!

【Vision结合Diffusion】模型的研究方向&#xff0c;探索了如何利用扩散模型在数据空间中模拟随机游走的特性&#xff0c;以生成高质量和逼真的图像。这一领域的研究&#xff0c;通过结合视觉感知和文本描述&#xff0c;推动了图像合成技术的发展&#xff0c;尤其是在个性化图像…

对人像图添加指定光源,再进行二次扩图

在一些业务场景中&#xff0c;需要对人像图片添加特定光源&#xff0c;来增加氛围感&#xff0c;例如赛博朋克科技、海边夕阳余晖、以及红蓝相间的高冷&#xff1b;但实现这个功能的难点是&#xff1a;如何将光源与原图片融合&#xff0c;在图片上产生正常光的镜面反射&#xf…

从数据仓库到数据中台再到数据飞轮:我了解的数据技术进化史

这里写目录标题 前言数据仓库&#xff1a;数据整合的起点数据中台&#xff1a;数据共享的桥梁数据飞轮&#xff1a;业务与数据的双向驱动结语 前言 在当今这个数据驱动的时代&#xff0c;企业发展离不开对数据的深度挖掘和高效利用。从最初的数据仓库&#xff0c;到后来的数据…

工业一体机在汽车零部件工厂ESOP系统中的关键作用

在当今竞争激烈的汽车市场中&#xff0c;汽车零部件工厂的高效生产和严格质量控制至关重要。而工业一体机在汽车零部件工厂的 ESOP&#xff08;电子标准化作业程序&#xff09;系统中发挥着关键作用。 一、汽车零部件工厂面临的挑战 汽车零部件的生产过程复杂且要求严格&#…

【sgCreateCallAPIFunctionParam】自定义小工具:敏捷开发→调用接口方法参数生成工具

<template><div :class"$options.name" class"sgDevTool"><sgHead /><div class"sg-container"><div class"sg-start"><div style"margin-bottom: 10px">参数列表[逗号模式]<el-too…

soc及其相关概念

用户无法直接操作内存&#xff0c;只能让内存映射到用户空间然后操作 1. 内存映射&#xff08;Memory-Mapped Files&#xff09;内存映射文件是一种方法&#xff0c;它允许一个或多个进程将一个文件或者一个匿名区域映射到它们各自的虚拟地址空间中。当文件被映射到内存后&…

Android WebView H5 Hybrid 混和开发

对于故乡&#xff0c;我忽然有了新的理解&#xff1a;人的故乡&#xff0c;并不止于一块特定的土地&#xff0c;而是一种辽阔无比的心情&#xff0c;不受空间和时间的限制&#xff1b;这心情一经唤起&#xff0c;就是你已经回到了故乡。——《记忆与印象》 前言 移动互联网发展…

前端开发之迭代器模式

在前端开发中&#xff0c;设计模式是提升代码可读性、可扩展性和可维护性的关键。迭代器模式&#xff08;Iterator Pattern&#xff09;是行为型设计模式中的一种&#xff0c;能够让我们顺序访问一个集合中的元素&#xff0c;而不暴露其底层的结构。在 TypeScript 这样具有类型…

Golang | Leetcode Golang题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; func reconstructQueue(people [][]int) (ans [][]int) {sort.Slice(people, func(i, j int) bool {a, b : people[i], people[j]return a[0] > b[0] || a[0] b[0] && a[1] < b[1]})for _, person : range people {idx : pe…

element-ui 日期选择器设置禁用日期

element-ui 日期选择器设置禁用日期 效果图如下&#xff1a; 2024-09-01 到2024-09-18之间的日期都不可选 2024-01-01之前的日期都不可选 官方文档中 picker-options 相关的介绍 实现功能&#xff1a; ​ 某仓库有限制最大可放置资产数量&#xff0c;且资产出借和存放都有…

高端论坛报告分享 | 李维森:中国地理信息产业发展报告(2024)

本报告为中国地理信息产业协会会长李维森在“2024中国地理信息产业大会”所作报告《中国地理信息产业发展报告&#xff08;2024&#xff09;》。转载请注明来源于中国地理信息产业协会。 本报告为中国地理信息产业协会会长李维森在“2024中国地理信息产业大会”所作报告《中国地…

Linux系统应用之知识补充——OpenEuler(欧拉)的安装和基础配置

前言 这篇文章将会对OpenEuler的安装进行详解&#xff0c;一步一步跟着走下去就可以成功 注意 &#xff1a;以下的指令操作最好在root权限下进行&#xff08;即su - root&#xff09; ☀️工贵其久&#xff0c;业贵其专&#xff01; 1、OpenEuler的安装 这里我不过多介绍&a…