CentOS7安装Docker-2024

CentOS7安装Docker-2024

安装

  • 更新yum仓库:
yum -y update
  • 安装yum-utils并配置阿里云的docker仓库和相关插件:
sudo yum install -y yum-utilsyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm
  • 下载最新版本的docker:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y----或下载指定版本(跟版本号即可,通过命令yum list docker-ce --showduplicates | sort -r可查看当前所有的版本)
yum install docker-ce-20.10.6 -y
  • 设置开机启动:
systemctl start docker && systemctl enable docker
  • 查看版本:
docker version

image-20241028120659115

  • 配置阿里云加速器:
1.进入https://cr.console.aliyun.com/    
2.在镜像工具--镜像加速器中找到当前操作系统,根据文档复制所有命令到系统中运行

image-20241028120902328

image-20241028120919241

  • 重启docker:
systemctl daemon-reload
systemctl restart docker
  • 卸载docker:
yum remove -y docker
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker
  • 如出现以下docker镜像拉取失败,可按如下方式修改:

image-20241028145246654

​ 修改/etc/docker/daemon.json文件:

sudo tee /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://docker.1ms.run","https://hub.rat.dev","https://docker.1panel.live"]
}
EOF

​ 重启服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

image-20241028145510556

  • 常用命令
docker search 镜像名		--搜索镜像
docker pull  镜像名		--拉取镜像
docker images			  --列出镜像
docker rmi				  --删除镜像

容器相关命令

1、新建并启动容器

使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将

列举一些常用的选项。

-d选项:表示后台运行

-P选项:随机端口映射

-p选项:指定端口映射,有以下四种格式。

– ip:hostPort:containerPort

– ip::containerPort

– hostPort:containerPort

– containerPort

–net选项:指定网络模式,该选项有以下可选参数:

–net=bridge:默认选项,表示连接到默认的网桥。

–net=host:容器使用宿主机的网络。

–net=container:NAME-or-ID:告诉 Docker让新建的容器使用已有容器的网络配置。

–net=none:不配置该容器的网络,用户可自定义网络配置。

docker run -d -p 91:80 nginx

这样就能启动一个 Nginx容器。在本例中,为 docker run添加了两个参数,含义如下:

-d 后台运行

-p 宿主机端口:容器端口 #开放容器端口到宿主机端口

访问 http://Docker宿主机 IP:91/,将会看到nginx的主界面如下:

image-20241028150553604

需要注意的是,使用 docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在

该名称的镜像, Docker就会自动从 Docker Hub下载镜像并启动一个 Docker容器。

2、列出容器

用 docker ps命令即可列出运行中的容器

docker ps

如需列出所有容器(包括已停止的容器),可使用-a参数。该列表包含了7列,含义如下

- CONTAINER_ID:表示容器 ID。

- IMAGE:表示镜像名称。

- COMMAND:表示启动容器时运行的命令。

- CREATED:表示容器的创建时间。

- STATUS:表示容器运行的状态。UP表示运行中, Exited表示已停止。

- PORTS:表示容器对外的端口号。

- NAMES:表示容器名称。该名称默认由 Docker自动生成,也可使用 docker run命令的–name选项

自行指定。

3、停止容器

使用 docker stop命令,即可停止容器

docker stop f0b1c8ab3633

其中f0b1c8ab3633是容器 ID,当然也可使用 docker stop容器名称来停止指定容器

4、强制停止容器

可使用 docker kill命令发送 SIGKILL信号来强制停止容器

docker kill f0b1c8ab3633
5、启动已停止的容器

使用docker run命令,即可新建并启动一个容器。对于已停止的容器,可使用 docker start命令来启

动

docker run f0b1c8ab3633	
6、查看容器所有信息
docker inspect f0b1c8ab3633
7、查看容器日志
docker container logs f0b1c8ab3633
8、查看容器里的进程
docker top f0b1c8ab3633
9、容器与宿主机相互复制文件
docker cp 容器id:要拷贝的文件在容器中的路径   宿主机相应的路径
如:docker cp f0b1c8ab3633:/etc/nginx/nginx.cong /mydata/nginx
10、进入容器

使用docker exec命令用于进入一个正在运行的docker容器。如果docker run命令运行容器的时候, 没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了

docker exec -it f0b1c8ab3633 /bin/bash (有的容器需要把/bin/bash换成sh)
11、容器内安装vim、ping、ifconfig等指令

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

12、删除容器

使用 docker rm命令即可删除指定容器

docker rm f0b1c8ab3633

该命令只能删除已停止的容器,如需删除正在运行的容器,可使用-f参数

强制删除所有容器

docker rm -g $(docker ps -a -q)

使用Dockerfile构建镜像

1.示例

Dockerfile是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节。先来编写一个最简单的Dockerfile,以前文下载的Nginx镜像为例,来编写一个Dockerfile修改该Nginx镜像的首页:

  • 在/root/下新建目录docker-test,在里面创建Dockerfile文件,并增加以下内容:
FROM nginx
RUN echo '<h1>This is DockerFile test</h1>' > /usr/share/nginx/html/index.html
  • 在Dockerfile所在目录下用以下命令构建镜像:
docker build -t nginx:test .
其中,-t指定镜像名字,命令最后的点(.)表示Dockerfile文件所在路径
  • 执行以下命令,即可使用该镜像启动一个 Docker容器:
docker run -d -p 92:80 nginx:test
test表示在上一步构建的镜像
  • 在浏览器中访问http://docker所在IP:92:

image-20241028153218918

Dockerfile文件中的常用命令:

命令用途
FROM基础镜像文件
RUN构建镜像阶段执行命令
ADD 添加文件,从src目录复制文件到容器的dest,其 中 src可以是 Dockerfile所在目录的相对路径, 也可以是一个 URL,还可以是一个压缩包
COPY拷贝文件,和ADD命令类似,但不支持URL和压 缩包
CMD容器启动后执行命令
EXPOSE声明容器在运行时对外提供的服务端口
WORKDIR指定容器工作路径
ENV指定环境变量
ENTRYPINT容器入口, ENTRYPOINT和 CMD指令的目的一 样,都是指定 Docker容器启动时执行的命令,可 多次设置,但只有最后一个有效。
USER该指令用于设置启动镜像时的用户或者 UID,写在 该指令后的 RUN、 CMD以及 ENTRYPOINT指 令都将使用该用户执行命令。
VOLUME指定挂载点,该指令使容器中的一个目录具有持 久化存储的功能,该目录可被容器本身使用,也 可共享给其他容器。当容器中的应用有持久化数 据的需求时可以在 Dockerfile中使用该指令。格 式为: VOLUME[“/data”]。

其他镜像的Dockerfile文件配置可参考hub.docker.com或github中的配置,如mysql在github中可以看到Dockerfile如何配置:

image-20241028153815039

2.Dockerfile构建Java项目

  • 拉取Java8和mysql镜像:
docker pull openjdk:8-jdk
docker pull mysql:8.0.28
# 后台启动两个服务
docker run -d openjdk:8-jdk
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name root mysql:8.0.28
  • 在/root/docker-test下创建crud-demo目录,上传本地已经打包好的crud-demo.jar(上传jar包前需在idea中把服务器对应ip和数据库更改为和docker服务器匹配):

image-20241029094501741

image-20241028155910905

  • 在该目录中创建Dockerfile文件,并添加以下内容:
# 基于哪个镜像
FROM openjdk:8-jdk
# 复制文件到容器
ADD crud_demo-0.0.5.jar /crud_demo-0.0.5.jar
# 声明需要暴露的端口
EXPOSE 8888
# 配置容器启动后执行的命令
ENTRYPOINT java ${JAVA_OPTS} -jar /crud_demo-0.0.5.jar
  • 构建镜像:
docker build -t crud_demo:0.0.5 .

image-20241028161124857

  • 启动镜像,-d为在后台启动:
docker run -d -p 8888:8888 crud_demo:0.0.5我们可以通过以下命令查看启动的情况
docker logs [docker ps中的id ] -f

image-20241028183020250

  • 通过postman或浏览器接口访问服务.

image-20241029094548213

3.将Java项目发布到阿里云远程镜像仓库

阿里云docker镜像仓库:https://cr.console.aliyun.com/cn-hangzhou/instance/repositories

  • 在镜像仓库中创建个人实例:

image-20241029102140603

  • 在个人实例中先创建命名空间再创建镜像仓库,镜像仓库可以关联github等账号:

image-20241029102331507

  • 根据镜像仓库的命令提示运行即可:

    • 登录阿里云Docker Registry:
    docker login --username=aliyun账号 crpi.cn-chengdu.personal.cr.aliyuncs.com
    

    image-20241029102742529

    • 把镜像推送到镜像仓库(因我本地已经有该镜像,没有可按阿里云镜像仓库命令拉取或推送):
    docker tag crud_demo:0.0.5 crpi-kxv0he4lrontf5t.cn-chengdu.personal.cr.aliyuncs.com/michealzou/crud_demo:0.0.5
    

    image-20241029102919345

    • 推送到远程库:
    docker push crpi-kxvv0he4lrontf5t.cn-chengdu.personal.cr.aliyuncs.com/michealzou/crud_demo:[镜像版本号]
    

    image-20241029103122152

    • 拉取镜像:
    docker pull crpi-kxvv0he4lrontf5t.cn-chengdu.personal.cr.aliyuncs.com/michealzou/crud_demo:[镜像版本号]
    

    image-20241029103228158

    • 此时通过docker images查看到该镜像:

    image-20241029103311120

    • 通过镜像id可运行该镜像,通过docker logs [docker ps的id] -f可查看运行情况:
    docker run -d -p 9999:8888 5c962719e0b9
    

    image-20241029103513032

    image-20241029103528654

    • 通过postman或浏览器访问接口:

    image-20241029103559767

4.把Java项目发布到本地仓库

  • 在根据了下创建/docker目录,并创建docker-compose.yml文件,文件内容如下:
version: '1'
services: registry:container_name: docker-registryimage: registry:2ports:- 5000:5000volumes:- /data/docker-registry:/var/lib/registry
  • 创建/data/docker-registry用于指定本地库;
  • 启动私有仓库:
docker compose up -d

image-20241029111526328

  • 设置私有仓库的用户名和密码(需要先下载httpd-tools工具来设置):
yum install -y httpd-tools
# 生成密码文件
htpasswd -Bc auth.htpasswd [用户名]

image-20241029111809981

  • 登录本地库:
docker login 192.168.xxx.xxx:5000
# 如果登录不上去是因不支持https协议,需要在daemon.json文件中修改:
vim /etc/docker/daemon.json
增加:"insecure-registries" : ["192.168.xxx.xxx:5000"]# 修改后重启
systemctl daemon-reload && systemctl restart docker

image-20241029112134537

  • docker ps -a就可以看到该镜像,再通过docker start 镜像id启动:

image-20241029112450450

  • 再到jar包所在目录去构建项目到仓库:
docker build -t 192.168.xxx.xxx:5000/crud-demo:版本号 .

image-20241029112615788

image-20241029112633328

  • 通过docker push/pull ...就可以推送或拉取到本地库中:

image-20241029112732095

  • 运行镜像:
docker run -d -p 5000:5000 镜像id

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

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

相关文章

121.WEB渗透测试-信息收集-ARL(12)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;120.WEB渗透测试-信息收集-ARL&#xff08;11&#xff09; 点击管理控制台 连接成功&…

Java | Leetcode Java题解之第513题找树左下角的值

题目&#xff1a; 题解&#xff1a; class Solution {public int findBottomLeftValue(TreeNode root) {int ret 0;Queue<TreeNode> queue new ArrayDeque<TreeNode>();queue.offer(root);while (!queue.isEmpty()) {TreeNode p queue.poll();if (p.right ! nu…

w005基于Springboot学生心理咨询评估系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

NOIP-2022 题解

T1 一眼是计数类的题目&#xff0c;那就要思考怎么计数了 这道题目还是很简单的 类似于动态规划&#xff0c;只要找到转移的方法就行了&#xff0c;从哪里可以做出来 首先 , 先考虑 C 因为 F 是 C 下边随便加一个点 , 所以只要求出 C 就求出了 F 。 首先, 先考虑 C 因为 F 是…

SpringCloud接入nacos配置中心

这里写自定义目录标题 版本选择项目搭建pom.xml本地的 application.ymlchenfu-miniapp-dev.yml 中的配置项接收配置的实体类 版本选择 spring-cloud-Alibaba版本依赖关系 本文章&#xff0c;采用的 springboot 版本是 2.6.13&#xff0c;spring-cloud-alibaba 版本是 2021.0.5…

Reduce函数

Reduce函数&#xff1a; 概念表述&#xff1a; reduce()方法是一个迭代方法对数组中的每个元素按序执行一个提供的 reducer 函数&#xff0c;每一次运行 reducer函数体会将先前元素的计算结果作为参数传入&#xff0c;最后将其结果汇总为单个返回值。用于累积运算。 执行机制&…

(二十二)、k8s 中的关键概念

文章目录 1、总体概览2、第一层&#xff1a;物理机、集群、Node、Pod 之间的关系2、第二层&#xff1a;命名空间 Namespace3、定义4、控制平面&#xff08;Control Plane&#xff09;5、特别的概念 Service6、Deployment 经过 之前几篇文章对 k8s 的实践&#xff0c;结合实践&…

QT 中彻底解决中文乱码问题的指南

在使用 QT 进行开发时&#xff0c;中文乱码问题是许多开发者常遇到的困扰。这不仅影响用户体验&#xff0c;还可能导致数据处理错误。本文将详细介绍在 QT 中彻底解决中文乱码问题的方法&#xff0c;帮助开发者创建更友好的应用程序。 一、中文乱码问题的原因 在 QT 中出现中文…

appium文本输入的多种形式

目录 一、send_keys方法 二、press_keycode方法 三、subprocess方法直接通过adb命令输入 一、send_keys方法 这个是最常用的方法&#xff0c;不过通常使用时要使用聚焦&#xff0c;也就是先点击后等待&#xff1a; element wait.until(EC.presence_of_element_located((By…

AI模型库 : 下一个大型供应链攻击目标

像 Hugging Face 这样的AI模型平台&#xff0c;很容易受到攻击者多年来通过 npm、PyPI 和其他开源存储库成功执行的同类攻击的影响 Hugging Face 等AI模型存储库为攻击者提供了与 npm 和 PyPI 等开源公共存储库相同的将恶意代码植入开发环境的机会。 在今年 4 月即将举行的 Bl…

元学习-学习笔记

学习视频&#xff1a;火炉课堂 | 元学习(meta-learning)到底是什么鬼&#xff1f;_哔哩哔哩_bilibili 一、从传统机器学习到元学习 我们传统的机器学习&#xff0c;是手工设计一个模型&#xff0c;然后将训练数据投进模型中进行训练&#xff0c;得到一个最优的模型参数&#x…

bytetrack训练日志解读和相应源码分析

文章目录 日志结构训练过程概述评估结果对应代码80个周期665次迭代概念说明损失值日志结构 2024-10-12 09:04:25 | INFO | yolox.core.trainer:179 - Training start.

文件inode

磁盘结构&#xff1a; 众所周知扇面是磁盘存储数据的地方&#xff0c;而一个磁盘有个6个磁盘面&#xff0c;而磁头指向都是相同半径的扇面&#xff0c;所以我们可以抽象出来一个三维指针&#xff1b; 这样我们就抽象出来了一个磁盘&#xff0c;而我们的每个磁盘面都有相同名字…

微信小游戏function signature mismatch,RuntimeError: function signature mismatch

我看网上很多人再搜&#xff0c;没有解决方案。开一下尘封多年的博客&#xff0c;希望能帮到有缘人。 除了其他人发的插件版本问题&#xff0c;缓存问题&#xff0c;华佗问题。 我遇到还有个情况是 Task语法和 Enable Exceptions to Full Without Stacktrace 组合的问题。 如…

MES系列- 统计过程分析(SPC)实现

MES系列文章目录 ISA-95制造业中企业和控制系统的集成的国际标准-(1) ISA-95制造业中企业和控制系统的集成的国际标准-(2) ISA-95制造业中企业和控制系统的集成的国际标准-(3) ISA-95制造业中企业和控制系统的集成的国际标准-(4) ISA-95制造业中企业和控制系统的集成的国际标准…

MMA: Multi-Modal Adapter for Vision-Language Models

两个观察 图1所示。各种基于transformer的CLIP模型中不同层的数据集级识别精度。这个实验是为了确定样本属于哪个数据集。我们用不同的种子运行了三次&#xff0c;并报告了每层识别精度的平均值和标准差。 X E m b e d XEmbed XEmbed是指变压器块之前的文本或图像嵌入层&#x…

外包干了7天,技术明显退步。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;22年通过校招进入南京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

【银河麒麟高级服务器操作系统·实例分享】裸金属服务器开机失败分析及处理建议

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 现象描述 裸金属物理服务器开机卡在EFI stub页面…

怎么在抖音视频里标注店铺定位信息?

随着短视频平台的兴起&#xff0c;抖音作为短视频领域的佼佼者&#xff0c;凭借其庞大的用户基础和强大的营销工具&#xff0c;已然成为了众多商家推广业务、吸引顾客的重要平台。通过在抖音视频中准确标注店铺定位信息&#xff0c;不仅能增加店铺的曝光率&#xff0c;还能方便…

Spring 设计模式之策略模式

Spring 设计模式之策略模式 策略模式构成部分java举例 策略模式 策略模式&#xff1a;允许定义一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以互相替换&#xff0c;且算法的变化可以独立于使用它们的客户端。 构成部分 Context&#xff08;上下文&…