做装修的人到什么网站找工作怎样是做网站
news/
2025/9/28 17:05:21/
文章来源:
做装修的人到什么网站找工作,怎样是做网站,wordpress如何分栏,做网站卖假名牌违法吗docker学习第四天 docker学习第四天1. 回顾1.1. 容器的网络类型1.2. 容器的本质1.3. 数据的持久化1.4. 看有哪些卷1.5. 看卷的详细信息 2. 如何做多台宿主机里的多个容器之间的数据共享2.1. 概念2.2. 搭NFS服务器实现多个容器之间的数据共享的详细步骤2.3. 如果是多台机器… docker学习第四天 docker学习第四天1. 回顾1.1. 容器的网络类型1.2. 容器的本质1.3. 数据的持久化1.4. 看有哪些卷1.5. 看卷的详细信息 2. 如何做多台宿主机里的多个容器之间的数据共享2.1. 概念2.2. 搭NFS服务器实现多个容器之间的数据共享的详细步骤2.3. 如果是多台机器背后需要使用nfs、NAS、SAN、云存储等网络存储解决2.3.1. 数据一致性的解决方案↓2.3.2. nfs2.3.3 云存储2.3.4. nas2.3.5. san 3. docker日常操作4. docker镜像的制作4.1. 镜像里到底有什么4.2. Dockerfile4.3. 案例14.4. 案例24.5. 练习14.6. 练习2制作镜像的练习 5. 小知识点5.1. ip add没有看到ip地址 docker学习第四天
1. 回顾
1.1. 容器的网络类型 host bridge none container overlay 通过docker network ls 查看 Bridge 和 Overlay 在作用域上的主要区别在于它们的应用范围和使用环境。 Bridge 网络Bridge 网络适用于单个主机上的容器之间的通信它是 Docker 默认的网络模式。在这种模式下运行在同一主机上的两个 Docker 容器可以互相通信。 Overlay 网络Overlay 网络则用于在多个 Docker 主机上的容器之间进行通信特别是在 Docker Swarm 集群环境中。不同主机上的 Docker 容器可以通过 Overlay 网络进行通信就好像它们在同一主机上一样。 总结: 如果你只是在单台机器上运行 Docker那么 Bridge 网络就足够了。但是如果你在进行容器编排或者在多台机器上运行 Docker Swarm那么你可能需要使用 Overlay 网络。 1.2. 容器的本质 就是一个进程 [rootdocker-1 ~] ps -xf|grep containerd-shim5121 pts/2 S 0:00 | \_ grep --colorauto containerd-shim3690 ? Sl 0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id f930b469045f3e7c3c0fb8ec99aa6694ad24aa3e94d5f27bcd0358a9d3b04571 -address /run/containerd/containerd.sock4021 ? Sl 0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 0560f3b35bffc921cd86b01e6878cb936ba2dfb6e373300a11d839d71e991963 -address /run/containerd/containerd.sock4197 ? Sl 0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 952638341afc76bae529a94532fc0cc41c6cfcd368828521c9c806f90ac07dab -address /run/containerd/containerd.sock4669 ? Sl 0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id b6d347477abe4b43f14e4428dc4613b6a8b39e2afb5bf0f264e648d669579fbd -address /run/containerd/containerd.sock4782 ? Sl 0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 33efd6cf8022ab6dba350790342b94ae0a01e434311f47f5999284d866ce8ec2 -address /run/containerd/containerd.sock1.3. 数据的持久化 用到的技术就是卷 volume ----mount 挂载 实现了—数据共享和数据备份 1.4. 看有哪些卷
[rootdocker-1 ~] docker volume ls
DRIVER VOLUME NAME
local 87e38c019186eff45190b0767c95ca6d8af255f88292d0254af03c696139ca34
local 293e693c1ba0264c31632ba2af120660e4abc0fb09246dbca3bab7973dca7090
local 953abcd2432ee62358527d5865c9ad8fe73b8fb3def82a39c8cee84a850ec3d1
local a2b0573256268ba172932b7c861ac27cf0422a539ccc0bd8e705290321f8665a
local ac5af551b963ac9242efde3db8cb2159b22875fbfb9a50a7bd71421974090619
local d245e1f710c4ae8153fce2a630f5ef94cce3ac9ffa0e9a7d35a2072d1e50110e
local myvol2
local sanchaung
local sanchuang
local xie1.5. 看卷的详细信息
[rootdocker-1 ~] docker volume inspect sanchuang
[{CreatedAt: 2024-01-31T17:46:3808:00,Driver: local,Labels: null,Mountpoint: /var/lib/docker/volumes/sanchuang/_data,Name: sanchuang,Options: null,Scope: local}
]2. 如何做多台宿主机里的多个容器之间的数据共享
2.1. 概念 这是一个在数据中心中设置的 Docker Swarm 结构框架图其中包括以下部分
三个节点node-1node-2node-3每个节点都在运行一个服务副本service-replica-1service-replica-2service-replica-3这些服务副本都在 Docker 容器内部运行。所有三个节点都连接到共享文件存储允许不同节点上的容器访问共享数据。 这种设置的目标在于确保一个服务在多个服务器之间的高可用性和负载分布。 搭建步骤: 1.先搭建好nfs服务器设置好共享目录以及首页文件index.html 2.在docker宿主机上创建支持nfs文件系统的卷连接到nfs服务器 3.在宿主机上创建nginx容器使用支持nfs文件系统的卷 4.访问nginx的web网站能否能访问到index.html首页文件不同的宿主机上启动的容器看到的内容应该是一模一样的因为访问到相同的nfs服务器共享的目录 2.2. 搭NFS服务器实现多个容器之间的数据共享的详细步骤
NFS服务器是一台可以共享文件的机器
network file system 网络文件系统在网络上共享文件的
机器ip作用docker1192.168.153.166测试节点docker2192.168.153.160测试节点NFS服务器192.168.153.167数据共享的 搭建好nfs服务器 [rootnfs ~] yum install nfs-utils -y
记得在nfs服务器上重启nfs服务
service nfs restart建议docker集群内的所有的节点都安装nfs-utils软件因为节点服务器里创建卷需要支持nfs网络文件系统 防火墙和selinx必须关闭 在nfs服务器上新建共享目录和index.html网页 [rootnfs ~] mkdir /sc/web -p
[rootnfs ~] cd /sc/web/
[rootnfs web] echo welcome to sanchuang index.html
[rootnfs web] ls
index.html
[rootnfs web] cat index.html
welcome to sanchuang设置共享目录 [rootnfs web] vim /etc/exports
[rootnfs web] cat /etc/exports
/sc/web 192.168.153.0/24(rw,no_root_squash,sync)
[rootnfs web] chmod 777 /sc/web 在linux系统里也给其他用户写的权限
[rootnfs web]# 在NFS中除了no_root_squash还有许多其他的选项可以用于配置你的NFS共享。以下是一些常见的选项: rw允许客户端对NFS共享进行读写操作。ro只允许客户端对NFS共享进行读操作。sync在回复客户端请求之前将更改写入磁盘。async在回复客户端请求之前不需要将更改写入磁盘。insecure允许客户端从大于1024的非特权端口连接。secure要求客户端从小于或等于1024的特权端口连接。wdelay将多个写请求组合在一起以提高性能。no_wdelay如果使用了sync则禁用wdelay。root_squash将root用户和用户组映射为匿名用户或用户组。all_squash将所有用户和用户组映射为匿名用户或用户组。anonuid和anongid设置匿名用户或用户组的UID和GID。 共享出去 [rootnfs web] exportfs -rv
exporting 192.168.153.0/24:/sc/web
[rootnfs web]#
或者通过 service nfs restart 也可以设置nfs开机启动 [rootnfs web] systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[rootnfs web]# 在docker集群里的任意一个节点服务器上测试能否挂载nfs服务器共享的目录 在两台节点机器上都测试一下 [rootdocker-1 ~] mkdir /test
[rootdocker-1 ~] cd /test/
[rootdocker-1 test] mount 192.168.153.167:/sc/web /test
[rootdocker-1 test] df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
192.168.153.167:/sc/web nfs4 50G 1.9G 49G 4% /test
[rootdocker-1 test]#
这些命令在完成一些文件系统的操作 [rootdocker-1 ~] mkdir /test这条命令在根目录下创建了一个名为 test 的目录。 [rootdocker-1 ~] cd /test/这条命令改变了当前工作目录到 test 目录。 [rootdocker-1 test] mount 192.168.153.167:/sc/web /test这条命令将了一个远程网络文件系统来自 IP 地址为 192.168.153.167 的服务器上的 /sc/web 目录挂载到本地的 /test 目录。 [rootdocker-1 test] df -Th这条命令显示了当前系统上所有文件系统的磁盘空间使用情况。-T 选项表示同时显示文件系统的类型-h 的意思是以易读的方式如 K, M, G显示大小。 你看到的输出显示远程的 /sc/web 被挂载到了本地的 /test它的文件系统类型是 nfs4 网络文件系统版本 4总容量为 50G已经使用了 1.9G还剩 49G 可用用量百分比为 4%。
综上这些命令在操作一些本地和远程的文件系统并查看了文件系统的磁盘使用信息。
客户机测试
[rootdocker-1 test] echo machi index.html
[rootdocker-1 test] cat index.html
welcome to sanchuang
123456
machi
[rootdocker-1 test]# 在2台docker 宿主机上创建支持nfs功能的卷 nfs-web-1 –opt oaddr192.168.153.167 指定nfs服务器的地址 –opt device:/sc/web 指定nfs服务器上共享的文件夹的路径 [rootdocker-1 test] docker volume create --driver local --opt typenfs --opt oaddr192.168.153.167,nolock,soft,rw,sync --opt device:/sc/web nfs-web-1
nfs-web-1
[rootdocker-1 test] docker volume ls
DRIVER VOLUME NAME
local nfs-web-1
[rootdocker-1 test]#
[rootdocker-1 test] docker volume inspect nfs-web-1
[{CreatedAt: 2024-02-01T11:37:3608:00,Driver: local,Labels: null,Mountpoint: /var/lib/docker/volumes/nfs-web-1/_data,Name: nfs-web-1,Options: {device: :/sc/web,o: addr192.168.153.167,nolock,soft,rw,sync,type: nfs},Scope: local}
]
[rootdocker-1 test]#
记得两台机器都创建这是一个 Docker 命令用于创建一个名为 nfs-web-1 的 NFS 类型的卷。下面是这个命令各部分的详细解释 docker volume create这是 Docker 命令用于创建一个新的卷。--driver local这是指定使用的卷驱动。在本例中我们指定使用 local 驱动。--opt typenfs这是选项用于设置卷的类型其中 typenfs 表示这是一个 NFS 类型的卷。--opt oaddr192.168.153.167,nolock,soft,rw,sync这是设置 NFS 卷的选项。其中 addr192.168.153.167 则表示 NFS 服务器的地址。nolock 是 NFS 的一个选项表示禁用锁定。soft 表示在处理一个请求时如果 NFS 服务器没有响应则客户端将在重试一定次数后放弃并显示一个错误。rw 表示卷有读写权限。sync 表示所有的 I/O 操作必须在物理设备完成后才返回这可以确保数据的一致性。--opt device:/sc/web这是设置 NFS 卷的设备路径。其中 /sc/web 是 NFS 服务器上的目录。nfs-web-1这是你要创建的卷的名称。 所以这个命令的意思就是创建一个名为 “nfs-web-1” 的 NFS 类型的 Docker 卷这个卷将挂载来自地址为 “192.168.153.167” 的 NFS 服务器上的 “/sc/web” 目录卷有读写权限并且所有的 I/O 操作都是同步的。 在2台docker宿主机上都可以启动容器使用刚刚创建的nfs-web-1卷 [rootdocker-1 test] docker run -d --name lizx-web-1 -p 5588:80 -v nfs-web-1:/usr/share/nginx/html nginx
3fe06b0f77662e4c0bf707ca7012dbf4de00d4642fc3109e869d671e17697cf2
[rootdocker-1 test]# 访问创建的nginx web服务器打开浏览器去访问
2.3. 如果是多台机器背后需要使用nfs、NAS、SAN、云存储等网络存储解决
2.3.1. 数据一致性的解决方案↓
2.3.2. nfs 优点搭建服务器非常方便随便一台linux系统的机器都可以做对硬件没有要求配置起来方便 缺点性能一般依赖于传统的tcp/ip网络如果网络宽带不大影响数据的传输,有丢失数据的风险和卡顿的问题 2.3.3 云存储 优点: 直接购买不需要自己搭建–》99.9999%不丢失数据保障不丢失数据可以保障存取的速度 ops各地的服务器都可以使用在公网上可以使用 缺点: 数据在阿里云里了数据的安全性 云存储是基于云计算技术提供了互联网上的数据存储服务。用户数据存放在远程数据中心可以通过任何网络连接的设备进行访问和管理。云存储具有易于扩展、设备无关性以及按需付费等优点非常适合需要远程访问数据以及希望减少本地存储硬件投入的用户或企业。 2.3.4. nas NASNetwork Attached Storage 网络附加存储网络存储基于标准网络协议实现数据传输为网络中的Windows / Linux / Mac OS 等各种不同操作系统的计算机提供文件共享和数据备份。 1.需要专业的存储设备 --》NAS—NFS 2.使用传统的tcp/ip网络 3.其他的电脑/手机/pad等设备都可以使用 支持网络传输协议NFS,ftp,ssh,http等
简单的来说 就是小白用户使用进去之后有web界面可以点点点像百度网盘一样 NAS网络附加存储的优点包括: 简易设置NAS设备易于安装和设置无需复杂的操作步骤即可实现快速部署并建立起一个高效的存储环境。高度可靠性NAS采用冗余存储技术如RAID冗余磁盘阵列可以在硬盘损坏时保持数据的完整性提供更高的数据可靠性。随时随地访问无论你在哪里只要有网络连接你就可以访问NAS中的文件。存储空间大NAS提供了大量的存储空间可以方便地备份和管理相册、视频、设计素材等。套件丰富NAS支持扩展更多可能性例如你甚至可以搭建一个自己专属的「爱奇艺」「微信读书」「QQ音乐」。横向扩展功能为NAS增加存储容量就和增加硬盘一样简单。您不必升级或更换现有的服务器即可在不中断网络的情况下启用新的存储。高性能由于NAS专门用于提供文件服务所以其他联网设备无需再提供文件服务。运营维护成本低NAS是一种采用直接与网络介质相连来实现数据存储的设备其运营维护成本较传统存储服务器是非常低的。 成本NAS设备的前期安装和设备成本可能比较高。 可扩展性NAS的可扩展性可能受到设备大小的限制。 性能NAS的存储性能有局限性特别是在多台客户端访问NAS时性能可能会大大下降。 数据安全存储数据通过网络传输因此可能容易产生数据泄漏等安全问题。 网络影响存储数据通过网络传输因此可能易受网络上其它流量的影响。 复杂的数据备份操作NAS的数据备份操作可能比较复杂。 服务器瓶颈服务器本身可能容易成为系统瓶颈。 服务器故障如果服务器发生故障数据可能无法访问。 设备管理对于存在多个服务器的系统来说设备可能分散不便于管理。 这些缺点需要在选择NAS时考虑。希望这个信息对你有所帮助 2.3.5. san 存储区域网络 (Storage Area Network, SAN) 是企业最常用的存储网络架构要求高吞吐量和低延迟的业务关键型业务往往采用这类架构运行。如今采用全闪存存储的 SAN 部署数量增速迅猛。与旋转磁盘相比全闪存存储可提供更出色的性能、稳定一致的低延迟以及更低的总成本。SAN 将数据存储在集中式共享存储中使企业能够运用一致的方法和工具来实施安全防护、数据保护和灾难恢复。 **1.专业的存储服务器 ** **2.专业的光纤交换机 ** 3.HBA卡插到业务服务器上 SAN: 存储区域网络是一种高性能的存储网络主要用于企业级应用。它使用专业的存储服务器、光纤交换机和HBA卡将数据存储在集中式的共享存储中。简单来说SAN就像一个专门为服务器设计的高速网络可以让服务器像访问本地硬盘一样访问网络上的存储设备。 优点 存取速度快 缺点 成本极高必须在局域网里距离比较近的数据集中存储和共享 3. docker日常操作
1.安装
2.日常的命令
docker run/exec/rm/rmi/images/start/stop/kill/logs/inspect/stats/top/save/load/pull
3.网络类型和卷
4.dockerfill—镜像的制作
4. docker镜像的制作
4.1. 镜像里到底有什么 操作系统业务核心代码系统工具库运行时的环境 A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings. Docker容器镜像是一个轻量级的、独立的、可执行的软件包它包含了运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。 4.2. Dockerfile Dockerfile是制作镜像的配置文件 ----》祖传秘方 4.3. 案例1 使用busybox作为基础镜像自己编写一个脚本作为业务核心代码完成一个自己的镜像 1.编写一个shell脚本
[rootdocker-1 ~] mkdir /Dockerfile/
[rootdocker-1 ~] cd /Dockerfile/[rootdocker-1 Dockerfile] vim while.sh
#!/bin/bashi1
while true
doecho hello,world,sanchuang$ilet isleep 1
done
[rootdocker-1 Dockerfile]# 2.编辑Dockerfile
[rootdocker-1 Dockerfile] vim Dockerfile
#指定基础镜像
FROM busybox
#指定进入容器的时候进入哪个文件夹
WORKDIR /
#复制宿主机当前目录下的所有文件和文件夹到容器里的/目录下 docker cp
COPY . /
#当我们制作镜像的时候需要执行的命令,这些文件会留在做好的镜像里
RUN touch sc.txt mkdir sanchuang sleep 10
#指定容器启动的时候需要执行的命令
#本质上等于 /bin/bash while.sh 前边是命令 后边是参数
ENTRYPOINT [/bin/sh,/while.sh]
[rootdocker-1 Dockerfile]# 3.开始构建制作镜像
[rootdocker-1 Dockerfile] docker build -t scbusybox:1.0 .
[] Building 10.4s (8/8) FINISHED docker:default [internal] load build definition from Dockerfile 0.0s transferring dockerfile: 532B 0.0s [internal] load metadata for docker.io/library/busybox:latest 0.0s [internal] load .dockerignore 0.0s transferring context: 2B 0.0s [internal] load build context 0.0s transferring context: 655B 0.0s [1/4] FROM docker.io/library/busybox:latest 0.0s [2/4] COPY . / 0.0s [3/4] RUN touch sc.txt mkdir sanchuang sleep 10 10.2s exporting to image 0.0s exporting layers 0.0s writing image sha256:ca1737d185a804ba705a8ea1cd10d37b2ec36b6f9cd8a52257c90b507a7d339e 0.0s naming to docker.io/library/scbusybox:1.0 0.0s
[rootdocker-1 Dockerfile]# 4.查看镜像有没有成功
[rootdocker-1 Dockerfile] docker images|grep scbusybox
scbusybox 1.0 ca1737d185a8 About a minute ago 1.24MB
[rootdocker-1 Dockerfile]# 5.使用制作好的镜像
[rootdocker-1 Dockerfile] docker run -it --rm --name scbusybox scbusybox:1.0
hello,world,sanchuang1
hello,world,sanchuang2
hello,world,sanchuang34.4. 案例2 使用go语言的编译好的代码制作镜像 [rootdocker-1 Dockerfile] mkdir go
[rootdocker-1 Dockerfile] cd go
[rootdocker-1 go]# 1.获得go语言核心代码 [rootdocker-1 go] vim server.go
package mainimport (net/httpgithub.com/gin-gonic/gin
)func main() {r : gin.Default()r.GET(/, func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{message: hello, sanchuang 2024 nice,})})r.Run()
}[rootdocker-1 go]# 加个注释
package main // 声明这个文件属于 main 包import (net/http // 导入 net/http 包用于处理网络请求和响应github.com/gin-gonic/gin // 导入 gin 包用于创建 web 框架和路由
)func main() { // 定义 main 函数程序的入口点r : gin.Default() // 创建一个默认的 gin 引擎它包含了一些中间件和日志功能r.GET(/sc, func(c *gin.Context) { // 为 /sc 路径注册一个 GET 方法的处理函数c 是请求的上下文对象c.JSON(http.StatusOK, gin.H{ // 以 JSON 格式返回响应状态码为 200内容为一个键值对message: hello, sanchuang, // 键为 message值为 hello, sanchuang})})r.Run() // 启动 web 服务器监听默认的端口 8080
}写好核心代码之后 要安装go环境
[rootdocker-1 go] yum install epel-release -y
[rootdocker-1 go] yum install golang -y开始编译server.go成一个二进制文件(测试)
[rootdocker-1 go]# go mod init web
go: creating new go.mod: module web
go: to add module requirements and sums:go mod tidy
[rootdocker-1 go]# go env -w GOPROXYhttps://goproxy.cn,direct
[rootdocker-1 go]#
[rootdocker-1 go]# go mod tidy
[rootdocker-1 go]# go run server.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.[GIN-debug] [WARNING] Running in debug mode. Switch to release mode in production.- using env: export GIN_MODErelease- using code: gin.SetMode(gin.ReleaseMode)[GIN-debug] GET / -- main.main.func1 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2024/02/01 - 19:05:04 | 200 | 137.998µs | 192.168.153.1 | GET /把server.go编译成二进制文件 huweb是编译好的二进制程序 [rootdocker-1 go]# go build -o hnweb .
[rootdocker-1 go]# ls
apiserver.tar.gz go.mod go.sum hnweb server.go
[rootdocker-1 go]# [rootdocker-1 go]# ./hnweb
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.[GIN-debug] [WARNING] Running in debug mode. Switch to release mode in production.- using env: export GIN_MODErelease- using code: gin.SetMode(gin.ReleaseMode)[GIN-debug] GET / -- main.main.func1 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2024/02/01 - 19:12:55 | 200 | 97.402µs | 192.168.153.1 | GET /
2.编辑Dockerfile
[rootdocker-1 go] cat Dockerfile
FROM centos:7
WORKDIR /go
COPY . /go
RUN ls /go pwd
ENTYPOINT [/go/hnweb]
[rootdocker-1 go]# 3.制作镜像
[rootdocker-1 go]# docker build -t hnweb:1.0 .
[] Building 0.5s (9/9) FINISHED docker:default [internal] load build definition from Dockerfile 0.0s transferring dockerfile: 118B 0.0s [internal] load metadata for docker.io/library/centos:7 0.0s [internal] load .dockerignore 0.0s transferring context: 2B 0.0s [1/4] FROM docker.io/library/centos:7 0.0s [internal] load build context 0.1s transferring context: 16.86MB 0.0s [2/4] WORKDIR /go 0.0s [3/4] COPY . /go 0.1s [4/4] RUN ls /go pwd 0.3s exporting to image 0.0s exporting layers 0.0s writing image sha256:5a97befba8149992b8fe282d4c1ddc3a4c0d3a1e39236df947ca3dcb87bb3e3a 0.0s naming to docker.io/library/hnweb:1.0 0.0s
[rootdocker-1 go]# [rootdocker-1 go] docker images|grep hn
hnweb 1.0 5a97befba814 49 seconds ago 221MB
[rootdocker-1 go]# 4.使用制作好的镜像
[rootdocker-1 go]# docker run -d --name hnweb-1 -p 7788:8080 hnweb:1.0
1814d1caa3cf257f9a37311ee97539e0ad1a0af4117e128620535172a6fbf0bc
[rootdocker-1 go]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1814d1caa3cf hnweb:1.0 /go/hnweb 3 seconds ago Up 3 seconds 0.0.0.0:7788-8080/tcp, :::7788-8080/tcp hnweb-1
[rootdocker-1 go]# 4.5. 练习1
1、以nginx为基础镜像编写dockerfile。并构建为一个名为nginxtest的镜像要求镜像内安装一个tcpdump工具下载或从本地拉取一个tar包并解压。构建镜像后运行容器并暴露端口访问。要求熟悉dockerfile常用指令容器运行常见参数以及如何进入容器内部
[rootdocker-1 Dockerfile] mkdir nginx
[rootdocker-1 Dockerfile] cd nginx/
[rootdocker-1 nginx]#
[rootdocker-1 nginx] vim Dockerfile
# 使用官方的 Nginx 镜像作为基础镜像
FROM nginx# 更新系统和已安装的包然后安装 tcpdump 工具
RUN apt-get update apt-get install -y tcpdump# 使用 curl 工具下载 nginx 源码包并解压
RUN curl -O https://nginx.org/download/nginx-1.25.1.tar.gz tar xf nginx-1.25.1.tar.gz# 对外开放 80 端口
EXPOSE 80# 运行 Nginx 服务
CMD [nginx,-g,daemon off;][rootdocker-1 nginx]# docker build -t nginxtest .
[] Building 161.1s (7/7) FINISHED docker:default [internal] load build definition from Dockerfile 0.0s transferring dockerfile: 231B 0.0s [internal] load metadata for docker.io/library/nginx:latest 0.0s [internal] load .dockerignore 0.0s transferring context: 2B 0.0s [1/3] FROM docker.io/library/nginx:latest 0.0s [2/3] RUN apt-get update apt-get install -y tcpdump 158.4s [3/3] RUN curl -O https://nginx.org/download/nginx-1.25.1.tar.gz tar xf nginx-1.25.1.tar.gz 2.6s exporting to image 0.0s exporting layers 0.0s writing image sha256:83ccc55ecdabbcb9bd37c9dfe4856adec84f1fc80c24e3472d2f69ba923c45f6 0.0s naming to docker.io/library/nginxtest 0.0s [rootdocker-1 nginx]# docker images|grep nginxtest
nginxtest latest 83ccc55ecdab 37 seconds ago 172MB
[rootdocker-1 nginx]# [rootdocker-1 nginx]# docker run -it --name mynginx -p 80:80 nginxtest
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/02/01 12:14:34 [notice] 1#1: using the epoll event method
2024/02/01 12:14:34 [notice] 1#1: nginx/1.21.5
2024/02/01 12:14:34 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2024/02/01 12:14:34 [notice] 1#1: OS: Linux 3.10.0-1160.el7.x86_64
2024/02/01 12:14:34 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2024/02/01 12:14:34 [notice] 1#1: start worker processes
2024/02/01 12:14:34 [notice] 1#1: start worker process 32
2024/02/01 12:14:34 [notice] 1#1: start worker process 33
2024/02/01 12:14:34 [notice] 1#1: start worker process 34
2024/02/01 12:14:34 [notice] 1#1: start worker process 35
192.168.153.1 - - [01/Feb/2024:12:15:03 0000] GET / HTTP/1.1 200 615 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0 -
2024/02/01 12:15:04 [error] 32#32: *1 open() /usr/share/nginx/html/favicon.ico failed (2: No such file or directory), client: 192.168.153.1, server: localhost, request: GET /favicon.ico HTTP/1.1, host: 192.168.153.166, referrer: http://192.168.153.166/
192.168.153.1 - - [01/Feb/2024:12:15:04 0000] GET /favicon.ico HTTP/1.1 404 555 http://192.168.153.166/ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0 -4.6. 练习2制作镜像的练习
1.以centos7作为基础镜像 2.在里面安装好ipvimping命令 3.安装好nginx 4.启动容器的时候就启动nginx
[rootdocker-1 Dockerfile]# mkdir centos
[rootdocker-1 Dockerfile]# cd centos/
[rootdocker-1 centos]#
[rootdocker-1 centos]# vim Dockerfile
FROM centos:7
RUN yum install -y iproute iputils vim
RUN yum install -y epel-release
RUN yum install -y nginx
EXPOSE 80
CMD [nginx,-g,daemon off;]
[rootdocker-1 centos]#
[rootdocker-1 centos]# docker build -t my_nginx .
[] Building 145.8s (8/8) FINISHED docker:default [internal] load build definition from Dockerfile 0.0s transferring dockerfile: 192B 0.0s [internal] load metadata for docker.io/library/centos:7 0.0s [internal] load .dockerignore 0.0s transferring context: 2B 0.0s [1/4] FROM docker.io/library/centos:7 0.0s CACHED [2/4] RUN yum install -y iproute iputils vim 0.0s [3/4] RUN yum install -y epel-release 1.0s [4/4] RUN yum install -y nginx 144.3s exporting to image 0.5s exporting layers 0.5s writing image sha256:79fef96935d1a5431f92fc1c80ba5148499f2efc6720d778f2e746aa58a91221 0.0s naming to docker.io/library/my_nginx 0.0s
[rootdocker-1 centos]# docker images|grep my_nginx
my_nginx latest 79fef96935d1 21 seconds ago 991MB
[rootdocker-1 centos]#
[rootdocker-1 centos]# docker run -d --name my_nginx-1 -p 88:80 my_nginx
2dce1f298ee435fe7d999ed8cf2db4bc8071ccf9464e2a5b2ad47d1d48085125
[rootdocker-1 centos]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2dce1f298ee4 my_nginx nginx -g daemon of… 3 seconds ago Up 2 seconds 0.0.0.0:88-80/tcp, :::88-80/tcp my_nginx-1
[rootdocker-1 centos]# 解决办法
[rootdocker-1 centos]# echo Halou Gh index.html
[rootdocker-1 centos]# ls
Dockerfile index.html
[rootdocker-1 centos]# docker cp index.html my_nginx-1:/usr/share/nginx/html
Successfully copied 2.05kB to my_nginx-1:/usr/share/nginx/html
[rootdocker-1 centos]# 然后刷新页面 5. 小知识点
5.1. ip add没有看到ip地址
nmcli n off 关闭网卡
nmcli n on 启动网卡
再 ip add 查看一下
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920871.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!