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

docker 容器启动详解

1.启动容器 

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

docker run -d \

  -p 8080:80 \

  -v /data/webapp:/app \

  -e APP_ENV=production \

  -e DB_HOST=db.example.com \

  -it \

  --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:以后台模式运行容器。这样容器会在后台运行,不会占用当前终端。

-it: 以交互式,终端方式启动容器

-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参数

相关文章:

docker 容器启动详解

1.启动容器 示例 1:启动一个复杂的 Web 应用容器 docker run -d \ -p 8080:80 \ -v /data/webapp:/app \ -e APP_ENVproduction \ -e DB_HOSTdb.example.com \ -it \ --network my_network \ --name webapp_container \ --restart always \ --memory 1g \ --cpu-sh…...

【spring ai】java 实现RAG检索增强,超快速入门

rag 需求产生的背景介绍: 在使用大模型时,一个常见的问题是模型会产生幻觉(即生成的内容与事实不符),同时由于缺乏企业内部数据的支持,导致其回答往往不够精准和具体,偏向于泛泛而谈。这些问题…...

【Java SE 题库】递归的魅力之--> 汉诺塔问题

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 题目 2. 分析 2.1 图解 2.2 代码解析 3. 完整代码 3.1 运行截图 4. 小结 1. 题目 汉诺塔问题是一个经典的递归问题,源自一个古老的印度传…...

《为什么要在三层交换机 VLAN 上配置 IP 地址?》

如果在三层交换机上划分了 VLAN10 和 VLAN20 但没有给 IP 地址的情况下,只有相同 VLAN 的端口之间才能相互通信。 这是因为在没有为 VLAN 配置 IP 地址(即没有创建 SVI,交换虚拟接口)时,三层交换机仅作为一个二层设备…...

Git的基本使用入门

参考:Git速查 git的基本概念 git常用命令大部分是基于三大分区来执行的。先来了解一些专有名词吧。 工作区,也叫 Working Directory暂存区,也叫 stage,index版本库,也叫本地仓库,commit History 将代码推…...

Elasticsearch 入门

ES 概述 ES 是一个开源的高扩展的分布式全文搜索引擎。 倒排索引 环境准备 Elasticsearch 官方地址:https://www.elastic.co/cn/ 下载地址: 注意:9300 端口为 Elasticsearch 集群间组件的通信端口,9200 端口为浏览器访问的 h…...

WebSocket 集成 Spring Boot 的实战指南

🍁 作者:知识浅谈,CSDN签约讲师&博客专家,华为云云享专家,阿里云专家博主,InfoQ签约作者 📌 擅长领域:全栈工程师、爬虫、ACM算法,大数据,深度学习 &…...

无人机集群路径规划:四种优化算法(BKA、CO、PSO、PIO)求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化…...

第二届 龙信杯 电子数据取证竞赛部分Writeup

大佬文章: 龙信杯复现(23、24) | BthclsBlog 手机部分 资料:2024年第二届龙信杯 WP_2024龙信杯wp-CSDN博客 1.分析手机检材,请问此手机共通过adb连接过几个设备?[标准格式:3] 2 /data/a…...

偷啥的都有!

好久不做地铁了,昨个儿加班儿太晚,就没骑车回家。早上到了地铁站,想起我前一阵儿下雨时候,把自行车放在了地铁站,结果尾灯被人偷了! 真是偷啥的都有! 2024年10月15日 7:41...

【中文注释】planning_scene_tutorial.cpp

planning_scene_tutorial.cpp #include <rclcpp/rclcpp.hpp>// MoveIt 相关头文件 #include <moveit/robot_model_loader/robot_model_loader.h> #include <moveit/planning_scene/planning_scene.h> #include <moveit/kinematic_constraints/utils.h>…...

【Vue3】 h()函数的用法

目录 介绍 参数 使用案例 1.创建虚拟 DOM 元素 2. 组件的动态渲染 3. 创建功能组件 4.渲染动态属性 5. 使用插槽 6. 创建动态标签 介绍 h() 函数用于辅助创建虚拟 DOM 节点&#xff0c;它是 hypescript 的简称——能生成 HTML (超文本标记语言) 的 JavaScript&#x…...

Flask如何实现前后端分离项目

在现代Web开发中&#xff0c;前后端分离是一种常见的架构模式&#xff0c;其中前端和后端分别独立开发和部署&#xff0c;通过API进行通信。Flask作为后端框架&#xff0c;可以很容易地与前端框架&#xff08;如React、Vue.js或Angular&#xff09;配合使用来实现前后端分离。以…...

二维码生成器 1.02.41| 一站式QR码生成器和美化工具

二维码生成器是一个有用的QR码生成器应用程序。可以轻松地为网站链接、文本、WiFi、名片、短信、社交媒体账户等生成QR码。该应用支持更改QR码的颜色、码眼图案和框架&#xff0c;并可以添加徽标和文本&#xff0c;使QR码更加美观。使用此QR码生成器&#xff0c;可以使用设计精…...

腾讯云视立方·直播 SDK 合规使用指南

为帮助使用直播 SDK 的开发运营者&#xff08;以下简称“您”&#xff09;在符合个人信息保护相关法律法规、政策及标准的规定下合规接入、使用第三方SDK&#xff0c;深圳市腾讯计算机系统有限公司&#xff08;以下简称"我们"&#xff09;特制定《直播 SDK 接入使用说…...

在 Spring 中使用 @EhCache 注解作为缓存

文章目录 项目概况项目设置一个简单的 RESTful Web 服务Spring 整合 EhCache第 1 步&#xff1a;更新依赖项以使用 EhCache Spring 注解第 2 步&#xff1a;设置自定义缓存管理器第 3 步&#xff1a;配置 EhCache第 4 步&#xff1a;测试缓存 刷新缓存总结推荐阅读文章 EhCache…...

npm install进度卡在 idealTree:node_global: sill idealTree buildDeps

ping一下源&#xff1a;ping http://registry.npm.taobao.org/ ping不通&#xff0c;原因&#xff1a;原淘宝npm永久停止服务&#xff0c;已更新新域名~~震惊&#xff01;&#xff01;&#xff01; 重新安装&#xff1a;npm config set registry https://registry.npmmirror.c…...

力扣1031. 两个非重叠子数组的最大和

力扣1031. 两个非重叠子数组的最大和 题目解析及思路 题目要求找到两段长分别为firstLen 和 secondLen的子数组&#xff0c;使两段元素和最大 图解见灵神 枚举第二段区间的右端点&#xff0c;在左边剩余部分中找出元素和最大的第一段区间&#xff0c;并用前缀和优化求子数组…...

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

前言【Unity实战篇】 接入百度自动翻译,实现文本自动翻译功能一、获取百度翻译开发平台的APPID和密钥二、Unity中接入自动翻译功能三、Unity中实现自动翻译文本Text功能总结前言 日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。本篇文章将演示怎样在Unity中接入…...

ubuntu samba

参考&#xff1a; 基于Ubuntu22.04的Samba服务器搭建教程&#xff08;新手保姆级教程&#xff09;_ubuntu samba-CSDN博客 当时按照这个不行&#xff1a; 主要做了这些修改 1、ufw 打开端口 这些都打开了 Samba服务使用的端口和协议如下1234: Port 137 (UDP) - NetBIOS 名…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...