docker 容器操作详解

news2024/10/12 9:19:55

1.启动容器 

 示例 1:启动一个复杂的 Web 应用容器

docker run -d \

  -p 8080:80 \

  -v /data/webapp:/app \

  -e APP_ENV=production \

  -e DB_HOST=db.example.com \

  --network my_network \

  --name webapp_container \

  --restart always \

  --memory 1g \

  --cpu-shares 512 \

  --dns 8.8.8.8 \

  --dns 8.8.4.4 \

  --dns-search example.com \

  --privileged \

  --user webuser \

  myapp:latest

 详细解释

-d:以后台模式运行容器。这样容器会在后台运行,不会占用当前终端。

-p 8080:80:将主机的 8080 端口映射到容器的 80 端口。这样可以通过主机的 8080 端口访问容器内的 Web 服务。

-v /data/webapp:/app:将主机的 /data/webapp 目录挂载到容器的 /app 目录。这样可以在主机上修改文件,容器内会实时同步。

-e APP_ENV=production:设置环境变量 APP_ENV 为 production。这可以用于配置应用的运行环境。

-e DB_HOST=db.example.com:设置环境变量 DB_HOST 为 db.example.com。这可以用于配置应用连接的数据库地址。

--network my_network:指定容器连接到名为 my_network 的自定义网络。这样容器可以与其他在同一个网络中的容器通信。

--name webapp_container:为容器指定一个名称 webapp_container。这样可以通过这个名称来管理容器。

--restart always:设置容器的重启策略为 always。这意味着即使容器因任何原因停止,Docker 也会自动重启它。

--memory 1g:限制容器使用的最大内存为 1GB。这可以防止容器占用过多内存导致系统不稳定。

--cpu-shares 512:设置容器的 CPU 份额为 512。这可以影响容器在多核系统中的 CPU 调度优先级。

--dns 8.8.8.8:指定容器使用的 DNS 服务器为 8.8.8.8。这可以确保容器能够正确解析域名。

--dns 8.8.4.4:指定容器使用的另一个 DNS 服务器为 8.8.4.4。提供备用 DNS 服务器可以增加解析的可靠性。

--dns-search example.com:指定容器的 DNS 搜索域为 example.com。这样在解析域名时,如果域名不完整,会自动加上 example.com。

--privileged:赋予容器扩展的权限。这可以让容器执行一些特权操作,如访问设备文件等。

--user webuser:设置容器的用户为 webuser。这可以提高安全性,避免以 root 用户运行应用。

myapp:latest:指定要运行的 Docker 镜像及其标签。这里使用的是 myapp 镜像的 latest 版本。

 示例 2:启动一个复杂的数据库容器

docker run -d \

  -p 3306:3306 \

  -v /data/db:/var/lib/mysql \

  -e MYSQL_ROOT_PASSWORD=rootpassword \

  -e MYSQL_DATABASE=mydb \

  --network db_network \

  --name db_container \

  --restart unless-stopped \

  --memory 2g \

  --cpu-shares 1024 \

  --dns 8.8.8.8 \

  --dns-search example.com \

  --privileged \

  --user mysql \

  mysql:5.7

 详细解释

-d:以后台模式运行容器。

-p 3306:3306:将主机的 3306 端口映射到容器的 3306 端口。这样可以通过主机的 3306 端口访问容器内的 MySQL 数据库。

-v /data/db:/var/lib/mysql:将主机的 /data/db 目录挂载到容器的 /var/lib/mysql 目录。这样可以持久化数据库数据。

-e MYSQL_ROOT_PASSWORD=rootpassword:设置环境变量 MYSQL_ROOT_PASSWORD 为 rootpassword。这是 MySQL 根用户的密码。

-e MYSQL_DATABASE=mydb:设置环境变量 MYSQL_DATABASE 为 mydb。这会在容器启动时创建一个名为 mydb 的数据库。

--network db_network:指定容器连接到名为 db_network 的自定义网络。

--name db_container:为容器指定一个名称 db_container。

--restart unless-stopped:设置容器的重启策略为 unless-stopped。这意味着除非手动停止容器,否则 Docker 会自动重启它。

--memory 2g:限制容器使用的最大内存为 2GB。

--cpu-shares 1024:设置容器的 CPU 份额为 1024。

--dns 8.8.8.8:指定容器使用的 DNS 服务器为 8.8.8.8。

--dns-search example.com:指定容器的 DNS 搜索域为 example.com。

--privileged:赋予容器扩展的权限。

--user mysql:设置容器的用户为 mysql。

mysql:5.7:指定要运行的 Docker 镜像及其标签。这里使用的是 mysql 镜像的 5.7 版本。

 示例 3:启动一个复杂的开发环境容器

docker run -it \

  -v /home/user/project:/project \

  -e PROJECT_NAME=myproject \

  --network dev_network \

  --name dev_container \

  --memory 2g \

  --cpu-shares 512 \

  --dns 8.8.8.8 \

  --dns-search example.com \

  --privileged \

  --user developer \

  --entrypoint /bin/bash \

  mydevimage:latest

 详细解释

-it:分配一个伪终端并保持打开状态。这样可以在容器内进行交互式操作。

-v /home/user/project:/project:将主机的 /home/user/project 目录挂载到容器的 /project 目录。这样可以在主机上编辑项目文件,容器内会实时同步。

-e PROJECT_NAME=myproject:设置环境变量 PROJECT_NAME 为 myproject。这可以用于配置开发环境。

--network dev_network:指定容器连接到名为 dev_network 的自定义网络。

--name dev_container:为容器指定一个名称 dev_container。

--memory 2g:限制容器使用的最大内存为 2GB。

--cpu-shares 512:设置容器的 CPU 份额为 512。

--dns 8.8.8.8:指定容器使用的 DNS 服务器为 8.8.8.8。

--dns-search example.com:指定容器的 DNS 搜索域为 example.com。

--privileged:赋予容器扩展的权限。

--user developer:设置容器的用户为 developer。

--entrypoint /bin/bash:覆盖镜像的默认入口点,使用 /bin/bash 作为入口点。这样可以直接进入容器的 shell。

mydevimage:latest:指定要运行的 Docker 镜像及其标签。这里使用的是 mydevimage 镜像的 latest 版本。

示例4:启动一个超级复杂的 Web 应用容器

docker run -d \

  --name webapp_container \

  --hostname webapp-host \

  --user webuser \

  --workdir /app \

  --env-file /path/to/env/file \

  -e APP_ENV=production \

  -e DB_HOST=db.example.com \

  -p 8080:80 \

  -v /data/webapp:/app \

  -v /data/logs:/var/log/app \

  --network my_network \

  --ip 192.168.1.100 \

  --add-host dbhost:192.168.1.101 \

  --dns 8.8.8.8 \

  --dns 8.8.4.4 \

  --dns-search example.com \

  --memory 1g \

  --memory-swap 2g \

  --cpu-shares 512 \

  --cpuset-cpus "0-1" \

  --cap-add NET_ADMIN \

  --device /dev/snd \

  --read-only \

  --tmpfs /run \

  --tmpfs /tmp \

  --security-opt apparmor=unconfined \

  --label com.example.department=IT \

  --label com.example.project=myproject \

  --log-driver json-file \

  --log-opt max-size=10m \

  --log-opt max-file=3 \

  --restart always \

  --stop-timeout 30 \

  --entrypoint /usr/local/bin/start.sh \

  --privileged \
  --sysctl net.ipv4.ip_forward=1 \
  --ulimit nofile=1024:2048 \

  myapp:latest

详细解释

-d:以后台模式运行容器。这样容器会在后台运行,不会占用当前终端。

--name webapp_container:为容器指定一个名称 webapp_container。这样可以通过这个名称来管理容器。

--hostname webapp-host:设置容器的主机名 webapp-host。这可以在容器内部通过主机名进行识别。

--user webuser:设置容器的用户为 webuser。这可以提高安全性,避免以 root 用户运行应用。

--workdir /app:设置容器的工作目录为 /app。这样在容器内运行命令时,默认路径是 /app。

--env-file /path/to/env/file:从指定的文件中读取环境变量。这可以方便地管理多个环境变量。

-e APP_ENV=production:设置环境变量 APP_ENV 为 production。这可以用于配置应用的运行环境。

-e DB_HOST=db.example.com:设置环境变量 DB_HOST 为 db.example.com。这可以用于配置应用连接的数据库地址。

-p 8080:80:将主机的 8080 端口映射到容器的 80 端口。这样可以通过主机的 8080 端口访问容器内的 Web 服务。

-v /data/webapp:/app:将主机的 /data/webapp 目录挂载到容器的 /app 目录。这样可以在主机上修改文件,容器内会实时同步。

-v /data/logs:/var/log/app:将主机的 /data/logs 目录挂载到容器的 /var/log/app 目录。这样可以持久化应用的日志。

--network my_network:指定容器连接到名为 my_network 的自定义网络。这样容器可以与其他在同一个网络中的容器通信。

--ip 192.168.1.100:为容器指定一个静态 IP 地址 192.168.1.100。这可以确保容器在网络中的地址固定。

--add-host dbhost:192.168.1.101:添加一个自定义的主机条目 dbhost,指向 IP 地址 192.168.1.101。这可以方便地在容器内通过主机名访问其他服务。

--dns 8.8.8.8:指定容器使用的 DNS 服务器为 8.8.8.8。这可以确保容器能够正确解析域名。

--dns 8.8.4.4:指定容器使用的另一个 DNS 服务器为 8.8.4.4。提供备用 DNS 服务器可以增加解析的可靠性。

--dns-search example.com:指定容器的 DNS 搜索域为 example.com。这样在解析域名时,如果域名不完整,会自动加上 example.com。

--memory 1g:限制容器使用的最大内存为 1GB。这可以防止容器占用过多内存导致系统不稳定。

--memory-swap 2g:设置容器的交换内存限制为 2GB。这可以允许容器在内存不足时使用磁盘空间。

--cpu-shares 512:设置容器的 CPU 份额为 512。这可以影响容器在多核系统中的 CPU 调度优先级。

--cpuset-cpus "0-1":限制容器只能使用 CPU 核心 0 和 1。这可以控制容器的 CPU 使用范围。

--cap-add NET_ADMIN:添加 NET_ADMIN 能力,允许容器进行网络管理操作。

--device /dev/snd:将主机的声卡设备 /dev/snd 挂载到容器中。这可以允许容器使用音频设备。

--read-only:将容器的根文件系统设置为只读。这可以提高容器的安全性。

--tmpfs /run:将 /run 目录挂载为临时文件系统。这样可以确保该目录的数据不会持久化。

--tmpfs /tmp:将 /tmp 目录挂载为临时文件系统。这样可以确保该目录的数据不会持久化。

--security-opt apparmor=unconfined:禁用 AppArmor 安全策略。这可以允许容器不受 AppArmor 的限制。

--label com.example.department=IT:为容器添加一个标签 com.example.department=IT。这可以用于管理和分类容器。

--label com.example.project=myproject:为容器添加一个标签 com.example.project=myproject。这可以用于管理和分类容器。

--log-driver json-file:设置容器的日志驱动为 json-file。这可以控制容器日志的格式和存储方式。

--log-opt max-size=10m:设置容器日志的最大大小为 10MB。这可以防止日志文件过大。

--log-opt max-file=3:设置容器日志文件的最大数量为 3 个。这可以防止日志文件过多。

--restart always:设置容器的重启策略为 always。这意味着即使容器因任何原因停止,Docker 也会自动重启它。

--stop-timeout 30:设置容器停止的超时时间为 30 秒。这可以确保容器有足够的时间优雅地停止。

--entrypoint /usr/local/bin/start.sh:覆盖镜像的默认入口点,使用 /usr/local/bin/start.sh 作为入口点。这样可以指定启动脚本。

--privileged:赋予容器扩展的权限。这可以让容器执行一些特权操作,如访问设备文件等。
--sysctl net.ipv4.ip_forward=1:设置容器的内核参数 net.ipv4.ip_forward 为 1。这可以启用 IP 转发,允许容器进行网络路由。
--ulimit nofile=1024:2048:设置容器的文件描述符限制。nofile=1024:2048 表示软限制为 1024,硬限制为 2048。这可以控制容器可以打开的文件描述符数量。

myapp:latest:指定要运行的 Docker 镜像及其标签。这里使用的是 myapp 镜像的 latest 版本。

进入容器后退出容器不停止

ctrl +p+q

exit 退出并停止容器

示例5:启动一个一次性容器,退出后立即删除,用户测试

docker run --rm alpine cat/etc/issue

启动alpine容器 并查看里面的 /etc/issue的信息

示例6:启动一个开机自动运行的容器

docker run -d --name nginx --restart=always -p 80:80 nginx

启动nginx镜像的容器并命名为nginx -d 后台运行 ----restart=always 开机自动运行

-p 80:80将主机的 80端口映射到容器的 80 端口(前面80是主机的)

其他参数

--privileged 容器获得真正root权限,甚至可以容器内在启动docker

--sysctl 修改容器内核参数

--ulimit 指定ulimit参数

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

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

相关文章

有什么方法可以保护ppt文件不被随意修改呢?

在工作或学习中,我们常常需要制作powerpoint演示文稿,担心自己不小心改动了或者不想他人随意更改,我们可以如何保护PPT呢?下面小编就来分享两个常用的方法。 方法一:为PPT设置打开密码 为PPT设置打开密码是最直接有效…

Prim算法实现最小生成树

Prim算法是一种用来寻找图的最小生成树的贪心算法。最小生成树是连接图中所有顶点的边的子集,这些边的权重总和最小,且形成一个树形结构,包含所有顶点。 Prim算法的基本步骤如下: 初始化: 选择任意一个顶点作为起始点…

全栈开发要掌握的技术

文章目录 1、前端开发2、后台开发2.1 编程语言2.2 网络框架 3、数据库开发3.1 RDBMS3.2 NoSQL 数据库 4、移动开发4.1 本地开发4.2 跨平台开发 5、云计算5.1 云平台5.2 容器化和协调 6、用户界面/用户体验设计6.1 设计工具6.2 原型和线框图 7、基础设施和 DevOps7.1 基础设施即…

C语言读取data.json文件并存入MySQL数据库小案例

本地有一个data.json文件 data.json [{"id": 1,"name": "Alice","age": 30},{"id": 2,"name": "Bob","age": 25} ]要将 data.json 文件中的数据存储到 MySQL 数据库中,首先需要…

快速入门Tomcat服务(业务发布基础技能)

文章目录 1 Tomcat简介 2 安装tomcat 2.1 安装jdk 2.2 安装Tomcat 3 Tomcat目录结构 4 Tomcat重要配置文件 1 Tomcat简介 Tomcat是Sun公司官方推荐的Servlet和JSP容器,在中小型系统和并发访问用户不是很多的场合下,其作为轻量级应用服务…

如何在Node.js里实现依赖注入

什么是依赖注入 依赖注入是一种用于在开发过程中实现控制反转(IoC)的技术。在IoC中,对程序流的控制是颠倒的:依赖项不是控制其依赖项的创建和管理的组件,而是从外部源提供给组件。 在传统的编程模式中,一个…

【ECC校验及使用】

ECC校验及使用 1 RAM ECC Demo 在IC设计中会经常用到ram来进行存储,在存储数据时我们写读时需要知道在传输过程中有没有出现差错,因此需要额外的校验位也存储下来; ECC验证能纠正1bit错误,能发现2bit错误,但是无法纠正…

第十三章:监控过程组(13.1控制质量--13.7监督沟通)

前言: 监督 是收集项目绩效数据,计算绩效指标,并报告和发布绩效信息。 控制 是比较实际绩效与计划绩效,分析偏差,评估趋势以改进过程,评价可选方案,并建 议必要的纠正措施。 13.1 控制质量 本过…

数据库SQL基础教程(二)

目录 连接(JOIN) 语法: 不同的 SQL JOIN INNER JOIN 关键字 LEFT JOIN 关键字 SQL LEFT JOIN 语法 RIGHT JOIN 关键字 SQL RIGHT JOIN 语法 FULL OUTER JOIN 关键字 SQL FULL OUTER JOIN 语法 UNION 操作符 SQL UNION 语法 SQL UNION ALL 语法 SELECT I…

大数据毕业设计选题推荐-B站短视频数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

软媒市场新蓝海:软文媒体自助发布与自助发稿的崛起

在信息时代的浪潮中,软媒市场以其独特的魅力和无限的潜力,成为了企业营销的新宠。随着互联网的飞速发展,软文媒体自助发布平台应运而生,为企业提供了更加高效、便捷的营销方式。而自助发稿功能的加入,更是让软媒市场的蓝海变得更加广阔。 软媒市场的独特价值 软媒市场之所以能…

YOLO_V8分割

YOLO_V8分割 YOLO安装 pip install ultralytics YOLO的数据集转化看csdn 数据标注EIseg EIseg这块,正常安装就好,但是numpy和各类包都容易有冲突,python版本装第一点 数据标注过程中,记得把JSON和COCO都点上,把自…

计算机毕业设计 基于Hadoop平台的岗位推荐系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

python脚本封装APK,轻松随意无须复杂配置

优点:轻松随意不设置,缺点:新用户试用,VI专属能力。 (笔记模板由python脚本于2024年10月11日 06:16:14创建,本篇笔记适合“资深”编程的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.py…

基于Springboot+Vue的网上订餐系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

@controller注解和@RestController注解详解

文章目录 控制器MVC控制器REST 控制器 controllerRestController总结 控制器 MVC控制器 在了解这两种注解之前我们需要先知道控制器的概念,我们项目中常见的就是MVC控制器,MVC 是一种软件架构模式,它将应用程序分为三个主要组件:…

R语言统计分析——气泡图

参考资料:R语言实战【第2版】 气泡图(bubble plot)用来展示三个定量变量间的关系:先创建一个二维散点图,然后用点的大小来代表第三个边变量的值。 我们可以使用symbols()函数来创建气泡图。该函数可以在指定的(x,y)坐标…

如何鉴定一段抗体序列的CDR区(CDR1、CDR2、CDR3)

愿武艺晴小朋友一定得每天都开心 如果有一批的抗体序列,可按下面的步骤来处理: (1)可以先处理为fasta的格式(或者不处理手动粘贴) >20B11 NIVLTQSPASLAVSLGQRATISCKASQSVDYDGDSYMNWYQQKPGQPPKLLIYAASNLESGIPARFSGSGSGTDFTLNIHPVEEEDAA…

华为启动鸿蒙原生应用开发者激励计划 12月31日前上架最高可获10万元

华为开发者官网今天发布了《鸿蒙原生应用开发者激励计划》的公告。此计划是华为给鸿蒙原生应用的开发者提供的现金及流量扶持的专属激励资源,鼓励开发者积极投入鸿蒙原生应用开发,加速应用上架,共创鸿蒙生态。 开发者需要在本计划要求的报名周…

深度学习:手写感知机

文章目录 前言感知机模型训练模型预测小结 前言 上面是一只猫,人类的大脑可以很轻松地识别出。人脑是如何识别的呢? 人类能够识别出这只猫,是因为这张图片具有猫的典型特征。例如,猫的耳朵、眼睛、猫须、嘴巴等独特的形态特征&am…