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

lab2:docker基础实战

一、实验目的

1.通过本次实验,完成Docker主机的安装和配置、镜像的搜索和下载、容器生命周期的基本管理、容器网络的管理。

2.通过Dockerfile来构建nginx镜像,了解Dockerfile镜像构建过程。

二、实验内容与实验要求

1.完成Docker的安装和配置。

2.完成Docker镜像的基本操作。

3.完成Docker Hub的基本操作。

4.完成Docker容器的基本操作。

5.掌握通过Dockerfile构建镜像。

三、实验过程与结果

1. 预备工作

创建1核2G的服务器

# xxx为姓名拼音
hostnamectl set-hostname xxx

检查内核版本并移除旧版本,安装docker依赖工具:

uname -rsudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2. Docker的安装

截图:查看hello-world镜像

安装docker并下载hello-world镜像:

# 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io# 启动Docker
systemctl enable docker --nowsudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://rixj4ohf.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker# 测试运行hello-world,由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。
若能正常输出信息,则说明安装成功。
docker run hello-world# 查看下载的hello-world镜像
docker images

3. Docker镜像的基本操作

# 获取镜像
docker pull nginx# 查询镜像
docker images# 查询部分镜像
docker image ls nginx# 查看镜像的大小
docker system df

(1)镜像查询:

查询镜像:

查看镜像大小:

(2)镜像删除:

通过短ID或镜像完整ID删除镜像:

查看删除后镜像:

通过仓库名+标签删除镜像,-f强制删除

  1. Docker容器的基本操作

(1)容器的创建与启停

创建一个基于httpd镜像的新容器。(若本地没有会拉取)

docker create httpd

查看容器信息:

docker ps -a

根据显示的容器ID或容器名称启动容器。

停止容器运行:

重启容器:

暂停容器:

恢复暂停的容器:

杀掉容器进程,强制停止容器:

启动容器,给容器重新命名:

(2)容器的运行

运行一个新容器,该容器基于ubuntu:14.04:

docker run ubuntu:14.04 /bin/echo 'Hello world'

启动一个 bash 终端,执行exit,退出容器:

docker run -it ubuntu:14.04 /bin/bash

不使用-d参数:

docker run ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

使用-d参数:

docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

通过docker logs [container ID or NAMES]获取容器的输出信息:

(3)进入容器

启动一个容器:

docker run -dit ubuntu:14.04

使用attach命令,直接进入容器启动命令的终端:
执行exit
再启动一个容器:

docker run -dit ubuntu:14.04

通过docker exec进入容器:

docker exec -it <container ID> bash

退出容器

(4)删除容器

删除一个处于终止状态的容器。若容器没有退出则无法删除,需要先停止容器。

使用docker rm -f来删除一个处于运行状态的容器。

删除所有已终止容器:

docker rm -v $(docker ps -aq -f status=exited)
  1. 私有镜像仓库搭建

​ 安装运行docker-registry:

# 获取官方registry 镜像并运行容器
docker run -d -p 5000:5000 --restart=always --name registry registry

​ 查看本机已有镜像:

​ 通过docker tag命令将基础镜像ubuntu:14.04镜像进行标记。

docker tag ubuntu:14.04 127.0.0.1:5000/myubuntu:14.04
docker images

​ 上传标记的镜像:

docker push 127.0.0.1:5000/myubuntu:14.04

​ Curl查看仓库中的镜像:

curl 127.0.0.1:5000/v2/_catalog

​ 删除已有镜像,再尝试从私有仓库中下载这个镜像:

docker image rm 127.0.0.1:5000/myubuntu:14.04
docker images
docker pull 127.0.0.1:5000/myubuntu:14.04
docker images

6. Dockerfile文件构建

​ 添加端口TCP:81

​ 下载centos 7:

docker pull centos:7

​ 进入nginx_demo,下载nginx源码压缩包:

mkdir nginx_demo# 进入文件夹,下载nginx源码压缩包。
cd nginx_demo
wget http://nginx.org/download/nginx-1.12.2.tar.gz

​ 创建Dockerfile文件,并通过Dockerfile创建nginx镜像:

vim Dockerfile# 编辑如下内容到Dockerfile中
# base image
FROM centos:centos7# MAINTAINER
MAINTAINER jrzhang@stu.ecnu.edu.cn# 修改 yum 的源配置来解决镜像源无法访问的问题
RUN sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-Base.repo && \sed -i 's|^#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-Base.repo && \yum clean all && yum -y makecache# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel 
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2# execute command to compile nginx
RUN ./configure \
--user=nginx --group=nginx \
--prefix=/usr/local/nginx --with-file-aio \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_sub_module  \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \ 
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module  \
--with-http_secure_link_module \
--with-http_degradation_module  \
--with-http_stub_status_module && make && make installRUN chmod -R 755 /usr/local/nginx/EXPOSE 80

# 通过Dockerfile创建nginx镜像
docker build -t my_nginx:v1 .

​ 查看构建的镜像:

docker images

​ 镜像名称:my_nginx,标签v1,镜像ID 53e3162421c7

7. Nginx镜像验证

​ 通过构建的镜像,运行一个容器,将端口进行映射:

docker run -d -p 80:80 my_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"# -p 80:80 : 将容器的80端口映射到主机的80端口
# /usr/local/nginx/sbin/nginx -g "daemon off;" : 设置nginx非daemon守护进程,否则容器会自动退出

​ 查看容器状态:

​ 打开浏览器,输入ecs-docker弹性IP地址,默认端口为80,进行验证,显示“Welcome to nginx!”,说明容器运行正常:

8. Dockerfile指令添加

编辑Dockerfile文件:

# 在原有Dockerfile基础上,增加如下内容到Dockerfile最后一行
CMD /usr/local/nginx/sbin/nginx -g "daemon off;"

通过Dockerfile创建新的nginx镜像:

docker build -t my_nginx:v2 .
docker images

通过镜像,运行一个容器,将端口进行映射,将容器的80端口映射到主机的81端口:

docker run -d -p 81:80 my_nginx:v2
docker ps

打开浏览器进行验证,输入弹性IP地址,端口为81,进行验证,显示“Welcome to nginx!”,说明容器运行正常:

9. 删除相关资源!!!

相关文章:

lab2:docker基础实战

一、实验目的 1.通过本次实验&#xff0c;完成Docker主机的安装和配置、镜像的搜索和下载、容器生命周期的基本管理、容器网络的管理。 2.通过Dockerfile来构建nginx镜像&#xff0c;了解Dockerfile镜像构建过程。 二、实验内容与实验要求 1.完成Docker的安装和配置。 2.完…...

Druid 1.2 源码导读

Druid 是阿里巴巴开源的数据库连接池和监控组件&#xff0c;广泛用于 Java 应用程序中。Druid 1.2 版本提供了高性能的连接池和丰富的监控功能。以下是对 Druid 1.2 源码的导读&#xff0c;帮助你理解其架构和设计。 1. 源码获取 从 GitHub 上获取 Druid 1.2 的源码&#xff…...

千益畅行,共享旅游卡市场乱象解析与未来展望

在当今旅游市场蓬勃发展的大背景下&#xff0c;共享旅游卡作为一种新兴的旅游消费模式&#xff0c;受到了广泛关注。然而&#xff0c;伴随着其快速发展&#xff0c;市场乱象也层出不穷。作为千益畅行共享旅游卡的全国运营总监&#xff0c;我深感有必要对这些问题进行深入剖析&a…...

Dubbo源码解析-服务导出(四)

一、服务导出 当我们在某个接口的实现类上加上DubboService后&#xff0c;就表示定义了一个Dubbo服务&#xff0c;应用启动时Dubbo只要扫描到了DubboService&#xff0c;就会解析对应的类&#xff0c;得到服务相关的配置信息&#xff0c;比如&#xff1a; 1. 服务的类型&…...

浅谈React的虚拟DOM

React的虚拟DOM&#xff1a;揭秘高效渲染的秘密 在React中&#xff0c;虚拟DOM&#xff08;Virtual DOM&#xff09;是一个核心概念&#xff0c;它是React能够提供高效渲染和更新的关键。虚拟DOM是一个轻量级的JavaScript对象&#xff0c;表示真实的DOM树。通过使用虚拟DOM&am…...

linux上海康SDK安装并设置环境变量

将HCNetSDK下linux部分复制到客户端电脑/usr/lib/HCNetSDK下:sudo cp -r H /usr/lib/HCNetSDK H是我的文件夹&#xff0c;要把这个文件夹的内容复制到/usr/lib/HCNetSDK路径里。 编辑&#xff1a;vi ~/.bashrc 找到export,按 i 插入换行添加 export LD_LIBRARY_PATH$LD_LIB…...

【计算机网络】UDP网络程序

一、服务端 1.udpServer.hpp 此文件负责实现一个udp服务器 #pragma once#include <iostream> #include <string> #include <cstdlib> #include <cstring> #include <functional> #include <strings.h> #include <unistd.h> #incl…...

什么是全域电商?有哪些电商代运营公司能做全域电商代运营?

什么是全域电商&#xff1f;有哪些电商代运营公司能做全域电商代运营&#xff1f; 随着电商行业的迅猛发展&#xff0c;传统的单一平台运营模式已经无法满足品牌多元化发展的需求。在此背景下&#xff0c;全域电商作为一种新兴的运营方式应运而生&#xff0c;成为越来越多品牌在…...

微信小程序上传pdf和显示

引用&#xff1a;https://blog.csdn.net/qq_54027065/article/details/129854339 loadResume(){let that thisuni.showLoading({title:"下载中"})wx.downloadFile({url:url,success:(res)>{console.log(res,"res11111")if (res.statusCode 200){setTi…...

MongoDB分布式集群搭建----副本集----PSS/PSA

MongoDB分布式集群 Replication 复制、Replica Set 复制集/副本集 概念 一、 副本集的相关概念 1.概念 “ A replica set is a group of mongod instances that maintain the same data set. ” 一组MongoDB服务器&#xff08;多个mongod实例&#xff09;&#xff08;有不…...

PDF编辑的好东西

1.Eage浏览器 直接拖到浏览器中就ok了&#xff0c;这样读书的话是非常爽的&#xff0c;然后的话最近&#xff0c;也不知道学啥&#xff0c;vue开发网站&#xff0c;一开始的配置&#xff0c;也是给我难到了&#xff0c;所以没有办法&#xff0c;就随便找点书看看吧&#xff0c…...

块设备的两种访问方法的区别

概述 1.当我们运行类似于“dd if/dev/sdb1ofsdb1.img”的命令把整个/dev/sdb1裸分区复制到sdb1.img的时候&#xff0c;内核走的是def_blk_fops这个file_operations 2.另外一种方法是通过文件系统来访问块设备&#xff0c;file_operations的实现则位于文件系统内&#xff0c;文…...

java 泛型中的 ?

在 Java 泛型中&#xff0c;? 被称为通配符&#xff08;wildcard&#xff09;&#xff0c;它代表了未知的类型。使用通配符可以增加代码的灵活性&#xff0c;允许在不知道具体类型的情况下操作泛型类或接口。通配符主要有以下几种形式&#xff1a; 无界通配符&#xff08;Unbo…...

如何在jupyter notebook切换python环境

目录 参考链接 首先确保conda已经正常安装 conda --version 或者conda -V 以下请将“myenv”替换成自己的命名&#xff01;&#xff01;&#xff01; 1-查看虚拟环境目录 conda env list 2-创建虚拟环境命令 conda create -n myenv 或者 conda create --name myenv 3-激活虚拟环…...

用Python将Word文档转换为Markdown格式

Markdown作为一种轻量级标记语言&#xff0c;以其简洁的语法和广泛的兼容性&#xff0c;特别适合用于博客、技术文档和版本控制系统中的内容管理。而Word文档则因其强大的排版功能&#xff0c;常常成为文档制作的首选。然而&#xff0c;直接使用Word格式在某些平台上可能显得过…...

CSV 文件

CSV&#xff0c;全称为 Comma-Separated Values&#xff09;&#xff08;逗号分隔值&#xff09;&#xff0c;是一种常用的文本文件格式&#xff0c;用于存储表格数据&#xff0c;如电子表格或数据库。它采用纯文本形式&#xff0c;以逗号作为字段之间的分隔符&#xff0c;每行…...

SpringCloud核心组件(五)

文章目录 Gateway一. 概述简介1. Gateway 是什么2. 什么是网关?3.Gateway 和 Nginx 两个网关的区别什么是流量入口&#xff1f; 4.Gateway 能干嘛5.gateway 三大核心概念6.运行方式 二. 入门案例a.创建gateway模块&#xff0c;在pom.xml中引入依赖b.创建启动类GatewayApplicat…...

TCP为什么需要三次握手和四次挥手,有哪些需要注意的地方?

TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了确保数据能够准确无误地从一端发送到另一端&#xff0c;TCP设计了一系列机制来保证通信的可靠性&#xff0c;其中包括连接建立和断开的过程。 三次握手&#xff08;Three-…...

机器学习(基础2)

特征工程 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 特征工程API 实例化…...

Cpolar 内网穿透使用

Cpolar登录地址&#xff1a;cpolar - secure introspectable tunnels to localhost 使用固定公网TCP连接ssh ssh -p端口号 用户名公网地址...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...