❤️99%的读者❤️都会收藏的Docker入门到实战的技术文章
Posted 小凡it故事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❤️99%的读者❤️都会收藏的Docker入门到实战的技术文章相关的知识,希望对你有一定的参考价值。
文章目录
虚拟化技术之docker技术详解(二)
关于作者
-
作者介绍
🍊 博客主页:作者主页
🍊 简介:云计算领域优质创作者🏆、学长的it故事 公众号创作者🎓、在校期间参与众多计算机相关的省赛、国赛,斩获系列荣誉。考取华为资深工程师、红帽工程师等系列认证。🍊 关注我:简历模板、学习资料、文档下载、技术支持 都可以关注、私信我哦!
让生命像一团热烈燃烧的火,直到死亡才能使它熄灭
前言
-
博文介绍
回首这半年写作之旅,将所学技术、项目实战的东西,分享给大家 。一路走来,小编从没有忘记初心,决心分享高质量的运维技术,不断提升自己,帮助linux爱好者。上一篇博文就给大家带来了超详细的docker 容器技术以及相关的虚拟化概念,今天接着介绍docker 基础用法,这篇文章文章大概1.5w字,从0到1 ,全面的介绍了docker,从入门到实战,如果学习过程中遇到问题,可以查看专栏介绍私信我,我会尽量帮助处理。
本文将独立成立一个虚拟化技术专栏,后续持续更新虚拟化Docker、K8s等文章,欢迎大家订阅
往期:docker虚拟化技术概念(一)
一、Docker 概念简述
1.1 Docker 是什么?
- 使用最广泛的开源容器引擎
- 一种操作系统级的虚拟化技术、依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)
- 一个简单的应用程序打包工具
1.2 Docker 版本及支持平台
- Docker版本:
- 社区版(Community Edition,CE)
- 企业版(Enterprise Edition,EE)
- 支持平台:
- Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu)
- Mac
- Windows
1.3 为什么要使用Docker 容器技术
-
上线流程繁琐
开发—> 测试 —> 申请资源 —> 审批 —> 部署 —> 测试
-
资源利用率低,造成资源浪费
-
扩容/缩容 不及时
-
服务器环境臃肿,维护难度越来越困难
1.4 Docker VS 传统虚拟化
-
# 传统虚拟化 --->底层 计算机硬件资源(电源、内存、CPU) ---> Host OS (宿主机操作系统),好比自己的 笔记本的windows 系统 --->Hypervisor(运行在物理和虚拟机之间的,是虚拟化的核心,模拟多个虚拟机所具备的资源,包含虚拟机资源调度) ,好比你笔记本安装的VMware workstation 软件。 ---> Guest OS 虚拟系统(自己安装的虚拟机),自己在VM 创建的虚拟主机 ---> APP 系统中的程序|服务等 # docker 容器技术 --->底层 计算机硬件资源(电源、内存、CPU) ---> Host OS (宿主机操作系统),好比自己的 笔记本的windows 系统 --->docker Engine docker 引擎,相当于大船,运 集装箱的容器,少了Guest OS 子系统 --->系统中的程序|服务等
1.5 Docker 应用场景
- 应用程序打包和发布
- 应用程序隔离
- 持续集成
- 部署微服务
- 快速搭建测试环境
- 提供PaaS 产品(平台即服务)
1.6 Docker 设计目标
- 提供简单的应用程序打包工具
- 多环境保持一致性
- 提高运维工作人员效率
1.7 Docker 技术架构
-
Docker 是基于C/S 端的
-
# Docker Client 执行docker 的命令 # Host Docker的主机,安装完Docker 后,会有一个守护进程 执行docker 命令后,Daemon 进程会使用本地镜像去创建 容器,启动容器 如果本地没有这个镜像,它会从docker 镜像仓库中拉去镜像。 # Docker Registry 镜像
1.8 Docker 文件系统类型介绍
-
aufs
AUFS是Docker最先使用的storage driver,Docker在Debian,Ubuntu系的系统中默认使用aufs,它技术很成熟,社区支持也很好,特点如下: 1.容器启动速度很快 2.存储空间利用很高效 3.内存的利用很高效 AUFS是一种联合文件系统,意思是它将同一个主机下的不同目录堆叠起来(类似于栈)成为一个整体,对外提供统一的视图。AUFS是用联合挂载来做到这一点。 AUFS使用单一挂载点将多个目录挂载到一起,组成一个栈,对外提供统一的视图,栈中的每个目录作为一个分支。栈中的每个目录包括联合挂载点都必须在同一个主机上。 在Docker中,AUFS实现了镜像的分层。AUFS中的分支对应镜像中的层。 此外,容器启动时创建的读写层也作为AUFS的一个分支挂载在联合挂载点上。
-
devicemapper
`在RedHat系中使用device mapper。device mapper在Linux2.6内核中被并入内核,它很稳定,也有很好的社区支持。`device mapper将所有的镜像和容器存储在它自己的虚拟设备上,这些虚拟设备是一些支持写时复制策略的快照设备。device mapper工作在块层次上而不是文件层次上,这意味着它的`写时复制策略不需要拷贝整个文件`。 device mapper创建镜像的过程如下: - 使用device mapper的storge driver创建一个精简配置池;精简配置池由块设备创建;- 接下来创建一个基础设备; - 每个镜像和镜像层都是基础设备的快照;这写快照支持写时复制策略,这意味着它们起始都是空的,当有数据写入时才耗费空间。在device mapper作为storage driver的系统中,容器层container layer是它依赖的镜像的快照。与镜像一样,container layer也支持写时复制策略,它保存了所有对容器的更改。当有数据需要写入时,device mapper就为它们在资源池中分配空间; 写入数据: 对容器的写操作由“需要时分配”策略完成。更新已有数据由“写时复制”策略完成,这些操作都在块的层次上完成,每个块的大小为64KB; 向容器写入56KB的新数据的步骤如下: - 进程向容器发出写56KB数据的请求; - device mapper的“需要时分配”策略分配一个64KB的块给容器快照(container snapshot);如果要写入的数据大于64KB,就分配多个大小为64KB的块。 - 将数据写入新分配的块中;
-
OverlayFS文件系统简介
`OverlayFS是目前使用比较广泛的层次文件系统`,是一种类似Aufs的一种堆叠文件系统,于2014年正式合入Linux 3.18主线内核,OverlayFS文件系统,实现简单,而且性能很好,可以充分利用不同或则相同Overlay文件系统的Page Cache,具有:`上下合并、同名遮盖、写时拷贝`等特点。 Docker虚拟化Overlay存储驱动利用了很多OverlayFS特性来构建和管理镜像与容器的磁盘结构。 从Docker1.12起,Docker也支持Overlay2存储驱动,相比于Overlay来说,Overlay2在inode优化上更加高效。但Overlay2驱动只兼容Linux kernel 4.0+以上的版本。 OverlayFS加入Linux Kernel主线后,在Linux Kernel模块中的名称从Overlayfs改名为Overlay。在真 实使用中,`OverlayFS代表整个文件系统,而Overlay/Overlay2表示Docker的存储驱动。` 在Docker虚拟化技术中,OverlayFS将一个Linux主机中的两个目录组合起来,一个在上,一个在下,对外提供统一的视图。这两个目录就是层layer,将两个层组合在一起的技术被成为联合挂载Union mount。在OverlayFS中,上层的目录被称作upperdir,下层的,目录被称作lowerdir,对外提供的统一视图被称作merged。
1.9 Docker 镜像、容器、仓库核心概念
-
镜像
创建容器的基础,类似于虚拟机的快照功能,可以理解为一个面向docker容器引擎的只读模板,每个镜像都有一个tag标签,作为其标识;比如:一个镜像可以是一个完整的centos系统,称之为centos镜像;也可以是一个安装了mysql的应用程序,称之为mysql镜像;
-
容器
基于镜像所创建的实例,可以被启动、停止、删除,多个容器之间互相隔离,互不可见的,可以保证容器的进程隔离性与平台的安全性,也可以把容器看作成为一个简易的linux环境,可以利用容器来部署业务;
-
仓库
仓库作为docker集中存放镜像的位置,当创建了自己的镜像后,可以使用push命令将镜像上传到公共仓库(public)或者私有仓库(private),这样下次再次使用时,直接从仓库pull下来即可; 仓库注册服务器(registry)是存放仓库的地方,其中包含很多仓库,如果无私有仓库,则使用当前docker最大的公共仓库docker hub,其中存放了数量庞大的镜像供用户下载使用(注:docker hub的账号需要梯子注册,国内网络无法收验证码);
1.10 Docker 安装
-
Docker 官方文档(https://docs.docker.com)
# yum 安装 安装前建议关闭selinux和firewalld 1.安装依赖包 yum install -y yum-utils 2.添加Docker软件包源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker -ce.repo 3.安装Docker CE yum install -y docker -ce 4.启动Docker服务并设置开机启动 systemctl start docker systemctl enable docker # 编译安装(忽略,一般人不用)
-
阿里云源:
https://developer.aliyun.com/mirror/docker-ce
二、Centos 7 构建Docker 平台实战
2.1 实验环境
-
环境介绍
-
服务器名称 版本 IP地址 docker-server CentOS 7.6 10.0.0.8
2.2 Docker 部署
-
安装步骤
# 官方安装教程 [root@docker-server~]# yum install -y yum-utils [root@docker-server~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装docker-ce yum install -y docker-ce # 查看docker 版本 docker version docker info
2.3 Docker 基础用法
-
基本使用
# 查看docker 信息 root@docker-server~]#docker version root@docker-server~]#docker info # 查看本地镜像 [root@docker-server~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest c662ee449a7e 4 days ago 680MB nginx latest f8f4ffc8092c 5 days ago 133MB rivers/nginx v1 f8f4ffc8092c 5 days ago 133MB # 搜索镜像 root@docker-server~]# docker search nginx # 下载镜像 [root@docker-server~]# docker pull nginx # 运行docker 中的nginx 容器 [root@web02_server~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 5d89766432d0 5 days ago 105MB nginx latest f8f4ffc8092c 5 days ago 133MB consol/tomcat-7.0 latest 7c34bafd1150 6 years ago 601MB [root@docker-server~]# docker run -itd nginx 121962a620a5f18e56fb63e8cf19668f6d1be067eeccfcceaa27437355f0d499 [root@web02_server~]# docker run -itd -p 8088:8080 consol/tomcat-7.0:latest 3088f97bbd9af1d080b117b2b94fdea35f0461f5d9b0bba0e0c50eaabed8370e # 查看容器进程 # docker ps 查看正在运行的 进程 [root@docker-server~]# docker ps -a # 显示所有的容器,包括未运行的 # 停止|重启|杀死 一个容器 #1.通过CONTAINER ID 关闭 (ID通过docker ps查看) [root@web02_server~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 51399f33ff35 nginx "/docker-entrypoint.…" 36 minutes ago Up 36 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp adoring_leavitt [root@web02_server~]# docker kill 51399f33ff35 # 2.通过names stop|start 启动关闭 [root@web02_server~]# docker run -d -p 8099:8080 --name nginx-test nginx bede0dff127c16c61c4221d217d33ec84c6d317e6cfdc6d8c6afe54a9428145b [root@web02_server~]# docker stop nginx-test nginx-test [root@web02_server~]# docker start nginx-test nginx-test 3.通过Dashboard页面关闭 # 暴露一个端口,宿主机进行访问 [root@docker-server~]# docker run -d -p 8080:80 nginx 51399f33ff3563d9444796d926409ce51e509f7b9e652fce75c415082dc72b27 浏览器输入:10.0.0.8:8080 即可访问容器里面的 nginx 浏览器输入:http://10.0.0.8:8088/,即可访问tomcat
三、Docker 镜像管理
3.1 镜像是什么?
- 一个分层存储的文件,不是一个单一的文件
- 一个软件的环境
- 一个镜像可以创建N个容器
- 一种标准化的交付
- 一个不包含Linux内核而又精简的Linux操作系统
3.2 配置加速器
Docker Hub是由Docker公司负责维护的公共镜像仓库,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
-
地址:https://hub.docker.com
# Docker镜像修改方法,vim /etc/docker/daemon.json,执行如下命令即可: vi /etc/docker/daemon.json { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] } # 如果没有daemon.json文件,可以手动创建一个 # 重启docker systemctl restart docker
3.3 镜像常用管理命令
-
docker 命令参数
[root@docker-server~]# docker --help # docker 语法 Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers # 常用选项参数,基本用不到 Options: --config string Location of client config files (default "/root/.docker") -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use") -D, --debug Enable debug mode -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem") --tlskey string Path to TLS key file (default "/root/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit # docker 管理命令,后来分类细化后才有的 Management Commands: app* Docker App (Docker Inc., v0.9.1-beta3) builder Manage builds buildx* Build with BuildKit (Docker Inc., v0.6.1-docker) config Manage Docker configs container Manage containers context Manage contexts image Manage images manifest Manage Docker image manifests and manifest lists network Manage networks node Manage Swarm nodes plugin Manage plugins scan* Docker Scan (Docker Inc., v0.8.0) secret Manage Docker secrets service Manage services stack Manage Docker stacks swarm Manage Swarm system Manage Docker trust Manage trust on Docker images volume Manage volumes # docker 命令,开始只有command命令,没有管理命令 Commands: attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes # docker命令主要分2部分,早期 只有command 这一部分,当发展到CE 版本,对docker 命令做了一个分类,形成了Management Commands 这一部分
-
常用管理命令
指令 描述 eg: ls 列出本地镜像 docker images ls build 构建镜像来自Dockerfile 后面详细介绍 history 查看镜像历史 docker history nginx inspect 现实一个或多个镜像详细信息 docker inspect tomcat pull 从镜像仓库拉取镜像 docker pull nginx push 推送一个镜像到镜像仓库 docker push rivers/nginx:v1 rm 移除一个或多个镜像 docker rm redis prune 移除没有被标记或者没有任何容器引用的镜像,-a 就会删除所有本地镜像( docker image prune -a
)docker image prune tag 创建一个引用源镜像标记目标镜像 docker tag nginx:latest rivers/nginx:v1 save 保存一个或多个镜像到一个tar 归档文件(假如某台不能上网,就在可以上网的机器上拉取,归档,scp传过去,加载) docker save nginx -o nginx.tar load 加载镜像来自tar归档或标准输入 docker load -i nginx.tar
三、Docker 容器管理
3.1 创建容器常用选项
-
创建镜像常用选项
选项 描述 -i, –interactive 交互式 -t, –tty 分配一个伪终端 -d, –detach 运行容器到后台 -e, –env 设置环境变量 -p, –publish list 发布容器端口到主机 -P, –publish-all 发布容器所有EXPOSE的端口到宿主机随机端口 –name string 指定容器名称 -h, –hostname 设置容器主机名 –ip string 指定容器IP,只能用于自定义网络 –network 连接容器到一个网络 -v, –volume list
–mount mount(新方式)将文件系统附加到容器 –restart string 容器退出时重启策略,默认no,可选值:[always] -m,–memory 容器可以使用的最大内存量 –memory-swap 允许交换到磁盘的内存量 –memory-swappiness=<0-100> 容器使用SWAP分区交换的百分比(0-100,默认为-1) –oom-kill-disable 禁用OOM Killer –cpus 可以使用的CPU数量 –cpuset -cpus 限制容器使用特定的CPU核心,如(0-3, 0,1) –cpu-shares CPU共享(相对权重)
3.2 常用管理命令
-
常用管理命令
选项 描述 ls 列出容器 inspect 查看一个或多个容器详细信息 exec 在运行容器中执行命令 commit 创建一个新镜像来自一个容器(用的少) cp 拷贝文件/文件夹到一个容器 logs 获取一个容器日志 port 列出或指定容器端口映射 top 显示一个容器运行的进程 stats 显示容器资源使用统计 stop/start/restart 停止/启动一个或多个容器 rm 删除一个或多个容器 prune 移除已停止的容器
3.3 容器和镜像命令实战
3.3.1 镜像命令实战总结
-
镜像命令
#查找redis镜像 [root@web02_server~]# docker search redis #下载镜像 [root@web02_server~]# docker pull redis #查看本机镜像 [root@web02_server~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 5d89766432d0 5 days ago 105MB nginx latest f8f4ffc8092c 5 days ago 133MB consol/tomcat-7.0 latest 7c34bafd1150 6 years ago 601MB [root@web02_server~]# #上传镜像 [root@web02_server~]# docker push redisnew:latest #备份镜像为tar包 [root@web02_server~]# docker save nginx -o nginx.tar #导入备份的镜像文件 [root@web02_server~]# docker load -i nginx.tar #删除镜像(必须先删除该镜像启动的所有容器) [root@web02_server~]# docker rmi nginx:latest [root@web02_server~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f49824647c75 centos:latest "/bin/bash" 11 minutes ago Exited (1) 7 seconds ago apache [root@web02_server~]# docker rm apache # 删除自定义的apache 容器 apache # 查看镜像的详细信息 [root@web02_server~]# docker inspect redis:latest # 查看镜像的历史信息 [root@web02_server~]# docker history redis:latest # 给镜像添加新的名词和标签 [root@web02_server~]# docker tag redis:latest newname:newtag [root@web02_server~]# docker tag nginx:latest rivers/nginx:v1
3.3.2 容器命令实战总结
-
容器命令实战
# 在后台启动容器 [root@web02_server~]# docker run -itd nginx cb4c606fd62558321677a9b15b3be40390bdd0077da6a5ee3d9f884bb31d03a5 # 在前台启动容器 [root@web02_server~]# docker run -it --name Centos centos:latest /bin/bash [root@web02_server~]# ctrl+p, ctrl+q # 使用快捷键退出,保证容器不关闭 [root@web02_server~]# docker ps -l #查看最近启动的容器进程 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fef50558fd7f centos:latest "/bin/bash" About a minute ago Up About a minute Centos [root@web02_server~]# # 查看正在运行的容器 [root@web02_server~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fef50558fd7f centos:latest "/bin/bash" 2 minutes ago Up 2 minutes Centos cb4c606fd625 nginx "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 80/tcp silly_curie 3088f97bbd9a consol/tomcat-7.0:latest "/bin/sh -c /opt/tom…" 2 hours ago Up 2 hours 8778/tcp, 0.0.0.0:8088->8080/tcp, :::8088->8080/tcp magical_lumiere # 只查看id [root@web02_server~]# docker ps -q fef50558fd7f cb4c606fd625 3088f97bbd9a # 查看所有容器,包含未启动的 [root@web02_server~]# docker ps -a # 启动、停止、重启容器 [root@web02_server~]# docker stop Centos #前提是启动时 加参数 --name 选项才可以 Centos [root@web02_server~]# docker start Centos Centos [root@web02_server~]# docker ps -q # 只查看ID fef50558fd7f cb4c606fd625 3088f97bbd9a [root@web02_server~]# docker stop fef50558fd7f fef50558fd7f [root@web02_server~]# docker restart fef50558fd7f fef50558fd7f [root@web02_server~]# # 删除容器 -f 参数,强制删除 [root@web02_server~]# docker rm -f fef50558fd7f fef50558fd7f [root@web02_server~]# # 删除所有容器 [root@web02_server~]# docker rm -f $(docker ps -aq) # 进入容器的默认进程 [root@web02_server~]# docker attach cb4c606fd625 2021/10/04 07:51:40 [notice] 1#1: signal 28 (SIGWINCH) received 2021/10/04 07:51:40 [notice] 1#1: signal 28 (SIGWINCH) received 2021/10/04 07:51:40 [notice] 31#31: signal 28 (SIGWINCH) received 2021/10/04 07:51:40 [notice] 31#31: signal 28 (SIGWINCH) received [root@web02_server~]# exit # 退出后容器会关闭 # 查看容器详细信息 [root@web02_server~]# docker inspect cb4c606fd625 [root@web02_server~]# docker inspect 7f39d656b934|grep -i ipaddr # 查看容器IP地址 "SecondaryIPAddresses": null, "IPAddress": "172.17.0.3", "IPAddress": "172.17.0.3", # 进入nginx容器,查看nginx路径,设置html文件,访问测试 [root@web02_server~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7f39d656b934 nginx "/docker-entrypoint.…" 3 minutes ago Up 2 minutes 0.0.0.0:8000->80/tcp, :::8000->80/tcp wizardly_tesla [root@web02_server~]# docker exec -it 7f39d656b934 /bin/bash root@7f39d656b934:/# cd /usr/share/nginx/html/ #进入nginx网站目录 root@7f39d656b934:/usr/share/nginx/html# ls 50x.html index.html root@7f39d656b934:/usr/share/nginx/html# root@7f39d656b934:/usr/share/nginx/html# echo "<h1>this nginx Container</h1>" > index.html # 准备测试文件内容 root@7f39d656b934:/usr/share/nginx/html# exit # 测试访问 [root@web02_server~]# curl 0 10.0.0.8:8000/index.html curl: (7) Failed connect to 0:80; Connection refused <h1>this nginx Container</h1> [root@web02_server~]# # 从容器内拷贝首页文件到宿主机,修改后拷贝回容器内 [root@web02_server~]# docker cp 7f39d656b934:/usr/share/nginx/html/index.html . [root@web02_server~]# ls anaconda-ks.cfg backup index.html nohup.out szz-job-v1.jar [root@web02_server~]# vim index.html <h1>this nginx Container</h1> <h2>在宿主机上修改的index.html</h2> # 将本地index.html 拷贝到docker容器里面 [root@web02_server~]# docker cp ./index.html 7f39d656b934:/usr/share/nginx/html/index.html [root@web02_server~]# # 测试 [root@web02_server~]# docker inspect 7f39d656b934|grep -i ipaddr "SecondaryIPAddresses": null, "IPAddress": "172.17.0.3", "IPAddress": "172.17.0.3", [root@web02_server~]# curl http://172.17.0.3 <h1>this nginx Container</h1> <h2>在宿主机上修改的index.html</h2> [root@web02_server~]# # 启动一个nginx 容器 [root@web02_server~]# docker run -d -e evn=prod -p 88:80 --name web01 -h nginx-server --restart=always nginx 3d175068754b1e1d5d14970e5f41b35c6cbcb37427b9cf83e4a284ec377aeed0 -e 环境变量 evn --name 设置名称 web01 -h 设置 主机名 nginx-server -- restart=always 设置开机启动,docker 重启了,设置了restart=always,docker 也会自动拉起nginx服务 echo $evn prod [root@web02_server~]# docker exec -it web01 /bin/bash root@nginx-server:/# echo $evn prod root@nginx-server:/# hostname nginx-server root@nginx-server:/# # 只查看web01 容器运行的端口 [root@web02_server~]# docker port web01 80/tcp -> 0.0.0.0:88 80/tcp -> :::88 [root@web02_server~]# # 不进入容器,查看容器利用率 [root@web02_server~]# docker stats web01 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 3d175068754b web01 0.00% 1.719MiB / 904.6MiB 0.19% 65 / 0B 3.2MB / 0B 2 ^C [root@web02_server~]# docker stats web01 --no-stream|awk '{print $3}' NAME 0.00% [root@web02_server~]# docker stats web01 --no-stream|awk 'NR==2{print $3}' 0.00%
3.3.3 资源控制命令总结
-
资源限制
# 限制redis 容器使用资源,非常有必要,最多使用500M,最多使用1个cpu [root@web02_server~]# docker run -m="500m" --cpus="1" -d redis ce392030c634d7206b51a11af880492232ae48ba8d7d36b4e6e30e07af17238c [root@web02_server~]# # 限制CPU的使用速率: [root@web02_server~]# docker run --cpu-quota 20000 redis # 据多个容器设置其占用CPU的比例,如下为1:1:2:4 [root@web02_server~]# docker run --cpu-shares 1024 容器1^C [root@web02_server~]# docker run --cpu-shares 1024 容器2^C [root@web02_server~]# docker run --cpu-shares 2048 容器3^C [root@web02_server~]# docker run --cpu-shares 4096 容器4^C # 根据多个容器进行绑定所使用的CPU的核心,如下为八颗CPU,分配给两个容器: [root@web02_server~]# docker run --cpuset-cpus 0,1,2,3 容器1^C [root@web02_server~]# docker run --cpuset-cpus 4,5,6,7 容器2^C #内存控制 #限制容器1使用的内存为512M; [root@web02_server~]# docker run -m 512m 容器1^C #blkio的控制: 如果一台服务器上多个容器的部署,会出现同时又多个程序进程读写磁盘数据的情况; [root@web02_server~]# docker run --device-write-bps /dev/sda1:1mb 容器1^C [root@web02_server~]# docker run --device-read-bps /dev/sda1:1mb 容器2^C
3.4 容器数
以上是关于❤️99%的读者❤️都会收藏的Docker入门到实战的技术文章的主要内容,如果未能解决你的问题,请参考以下文章
99%的人看了它都会说这是一篇很全的tomcat服务❤️❤️[⭐建议收藏⭐]
99%的人看了它都会说这是一篇很全的tomcat服务❤️❤️[⭐建议收藏⭐]
❤️Docker超详细基础教程,快速入门docker首选❤️(万字长文建议收藏)