【 Docker 容器详细介绍和说明】

Docker 容器详细介绍和说明

      • Docker 容器详细介绍和说明
      • Docker 安装步骤(以Ubuntu为例):
      • 使用Docker创建并运行容器:
      • VSCode远程连接Docker容器:
      • 步骤1:配置Docker环境
      • 步骤2:配置PyCharm
      • 步骤3:测试连接
      • docker 容器常用命令

Docker 容器详细介绍和说明

Docker容器是什么?
Docker容器是一种轻量级、可移植的软件打包和运行环境,它允许开发者将应用及其依赖以独立的单元进行分发和部署。每个容器都运行在一个隔离的环境中,具有自己的文件系统、网络空间和资源限制。容器与宿主机共享内核,但通过Linux命名空间(namespaces)和控制组(cgroups)技术实现了进程、网络、文件系统等层面的隔离,使得多个容器可以在同一台物理机或虚拟机上高效并行运行。

Docker容器的特点:

  1. 标准化: 保证应用在开发、测试、生产环境的一致性。
  2. 便携性: 可以在任何安装了Docker引擎的机器上运行。
  3. 资源隔离: 确保容器内的应用程序不会影响到其他容器或宿主机。
  4. 微服务架构友好: 适合构建基于微服务的应用程序,每个服务可以封装在一个单独的容器中。
  5. 快速启动: 相对于传统虚拟机,容器启动速度快,资源消耗更少。

Docker容器的使用场景:

  • 微服务架构中的服务部署
  • CI/CD流程中的持续集成与交付
  • 应用程序生命周期管理
  • 面向开发者的本地开发环境设置
  • 云原生应用的构建与发布

Docker 安装步骤(以Ubuntu为例):

# 更新apt包索引
sudo apt-get update# 安装必要的一些系统工具
sudo apt-get install -y \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common# 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -# 添加Docker的APT仓库
sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) \stable"# 更新apt包索引,并安装Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io# 启动Docker服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

使用Docker创建并运行容器:

# 拉取一个镜像,例如官方的nginx镜像
docker pull nginx# 创建并运行一个新容器
docker run --name my_nginx -d -p 8080:80 nginx# 上述命令含义:
# --name 给容器命名
# -d 表示后台运行
# -p 将主机端口映射到容器端口# 测试访问容器
curl http://localhost:8080# 查看正在运行的容器
docker ps# 停止并移除容器
docker stop my_nginx
docker rm my_nginx

VSCode远程连接Docker容器:

为了能在VSCode中远程连接并编辑运行在Docker容器内部的应用代码,你可以使用VSCode的Remote Development扩展功能,具体步骤如下:

  1. 在VSCode中安装插件 ms-vscode-remote.vscode-remote-extensionpack,该扩展包含用于远程开发的支持。
  2. 运行你的Docker容器时,确保挂载本地目录到容器内作为工作区(如 -v /path/to/local/code:/workspace),并且开启持久化TTY以便于交互式登录(如 -it)。
  3. 在VSCode的命令面板(Ctrl+Shift+P)中选择“Remote-Containers: Attach to Running Container”,然后从列表中选择你已运行的Docker容器。
  4. VSCode会自动加载容器内部的工作区,你现在可以直接在VSCode中编辑并运行容器内的项目代码。

请注意,实际操作过程中可能需要根据不同的开发需求调整容器配置以及VSCode Remote-Containers扩展的设置。

在PyCharm中远程连接Docker容器进行开发和调试,需要按照以下步骤操作:

步骤1:配置Docker环境

确保远程服务器上已经正确安装并运行了Docker,并且创建了一个带有SSH服务的Docker容器。同时,容器内已安装Python解释器以及必要的库。

# 在远程服务器上创建并启动一个带有SSH服务的Docker容器
sudo docker run -d --name my_container \-p 2222:22 \  # 映射容器内部的22端口到主机的一个非默认端口(例如2222)-v /path/to/project:/app \  # 如果要编辑容器内的代码,挂载本地项目目录到容器内-e USER=root \  # 设置用户-e PASSWD=my_password \  # 设置密码,或者使用密钥登录image_name:tag# 进入容器,设置root用户的密码或公钥认证(如果尚未完成)
docker exec -it my_container bash
passwd root  # 更改密码
# 或者添加公钥到authorized_keys文件以启用无密码登录

步骤2:配置PyCharm

步骤2.1:配置远程解释器

  1. 打开PyCharm,在菜单栏选择 File > Settings (Windows/Linux) 或 PyCharm > Preferences (macOS)。

  2. 在设置窗口中找到 Project: Your_Project_Name > Project Interpreter

  3. 点击齿轮图标然后选择 Add > Add Remote...

  4. 选择 SSH Interpreter 并点击下一步。

  5. 填写远程服务器的 SSH 配置信息:

    • 主机名:远程服务器IP地址或域名
    • 用户名:远程服务器的用户名
    • 端口号:SSH端口,如果是上面映射的非默认端口,则填写2222
    • Authentication type:根据实际情况选择密码或密钥验证
  6. 在下一个界面,选择 “Use Docker Compose” 或 “Use Dockerfile” 来指定容器,或者直接选择 “Existing interpreter” 并填入容器内的Python解释器路径(如 /usr/bin/python3)。

  7. 如果是通过现有的解释器连接,可能还需要映射容器内部的项目路径到宿主机(即你的本地开发环境)。

步骤2.2:配置部署(可选)

如果你需要将本地项目的更改同步到容器内,可以配置Deployment。

  1. 在设置窗口,转到 Build, Execution, Deployment > Deployment,点击"+"添加一个新的SFTP或FTPS部署配置。
  2. 填写远程主机的相同SSH连接信息,并指定本地与远程路径的映射关系。

步骤3:测试连接

完成上述配置后,你可以尝试测试连接是否成功。若能正常连接到远程解释器并在PyCharm中运行、调试容器内的代码,则表示配置成功。

docker 容器常用命令

以下是一些Docker容器常用的命令示例及其详细说明:

  1. 查看本地镜像

    docker images
    

    该命令用于显示当前主机上所有的Docker镜像列表,包括镜像ID、标签和大小等信息。

  2. 拉取镜像

    docker pull ubuntu:latest
    

    此命令从Docker Hub或其他配置的镜像仓库下载指定标签(这里是latest)的Ubuntu镜像。

  3. 创建并运行容器

    docker run -it --name my_container ubuntu:latest /bin/bash
    

    这条命令将创建一个新的容器,并命名为my_container,使用的是最新版的Ubuntu镜像。-it参数表示以交互模式运行(分配一个终端),并在容器内启动/bin/bash shell。

  4. 列出正在运行的容器

    docker ps
    

    列出所有正在运行的容器的基本信息。

  5. 列出所有容器(包括停止状态的)

    docker ps -a
    
  6. 进入已运行的容器

    docker exec -it my_container bash
    

    这个命令允许你在一个已经运行的名为my_container的容器中打开一个新的shell会话。

  7. 停止容器

    docker stop my_container
    

    停止指定名称或ID的容器。

  8. 重启容器

    docker restart my_container
    
  9. 删除容器

    docker rm my_container
    

    删除已停止的容器,若要强制删除正在运行的容器,可以加上 -f 参数:

    docker rm -f my_container
    
  10. 查看容器日志

    docker logs my_container
    

    显示指定容器的日志输出。

  11. 提交容器为新镜像

    docker commit my_container new_image_name
    

    将当前修改后的容器保存为新的镜像。

  12. 更新容器资源限制

    docker update --cpu-shares 512 my_container
    

    更新容器的CPU份额等资源限制。

以上是Docker容器操作中常见的命令,实际使用时可能需要根据具体需求调整参数和选项。

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

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

相关文章

日本发动全面侵华战争他们在怕什么?为何不敢动陕西,

日本全面侵华战争之谜:恐惧与野心的交织 在二十世纪三十年代,日本帝国主义以令人发指的暴行和残忍手段,对中国发动了全面侵华战争。然而,在这场战争中,有一个引人关注的现象:日本侵略者在进攻过程中&#…

python和nodejs一键安装当前项目所有依赖

python和nodejs一键安装当前项目所有依赖。群里有人问怎么快速安装网上下载的源码里面的依赖。所以在这里分享一下。更多问题可以自己加群917400262问我。 目录导航 1.0 python一键安装当前项目所有依赖2.0 nodejs一键安装当前项目所有依赖 1.0 python一键安装当前项目所有依赖…

snakemake: 基础知识

为了有效地学习和使用 Snakemake,你需要具备一定的基础知识。这些基础知识将帮助你更好地理解 Snakemake 的工作原理和如何在你的项目中应用它。以下是学习 Snakemake 所需的一些基础知识: 1. Python 编程 Snakemake 是用 Python 编写的,并…

聊聊国内「类Sora模型」发展现状,和 Sora 的差距到底有多大?

2024 年 2 月 16 日。 就在谷歌发布他新一代的多模态大模型 Gemini 1.5 Pro 的同一天,OpenAI 带着新一代的文生视频模型 Sora 再次抓住了全世界人们的眼球。 “颠覆”、“炸裂”、“变天”、“疯狂”,类似的形容词一夜之间簇拥在 Sora 周围,…

网络传输基本流程(封装,解包)+图解(同层直接通信的证明),报头分离问题,协议定位问题,协议多路复用

目录 网络传输基本流程 引入 封装 过程梳理 图解 报文 解包 过程梳理 图解 -- 同层直接通信的证明 总结 解包时的报头分离问题 举例 -- 倒水 介绍 自底向上传输时的协议定位问题 介绍 解决方法 协议多路复用 介绍 优势 网络传输基本流程 引入 首先,我们明确…

VS查看C++头文件(.h文件)的函数列表

这里使用的是VS2019举例 如下图查看Actor.h文件中的函数列表 设置步骤如下图

【d35】【Java】【力扣】28. 找出字符串中第一个匹配项的下标

题目 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystac…

【大数据】通过 docker-compose 快速部署 MinIO 保姆级教程

文章目录 一、概述二、MinIO 与 Ceph 对比1)架构设计对比2)数据一致性对比3)部署和管理对比4)生态系统和兼容性对比 三、前期准备1)部署 docker2)部署 docker-compose 四、创建网络五、MinIO 编排部署1&…

【SQL】608. 树节点(流控制语句 CASE + IF语句)

前述 知识点推荐学习: sql中的 IF 条件语句的用法 MySQL:if语句、if…else语句、case语句,使用方法解析 题目描述 leetcode 题目:608. 树节点 思路 关键点:如何确定有没有子节点 根节点:父节点为空内节…

基于Redo log Undo log的MySQL的崩溃恢复

基于Redo log & Undo log的MySQL的崩溃恢复 Redo log Undo log Redo log 重做日志,记录,修改过的数据 Undo log 回滚日志,记录修改之前的数据 两个我不做详细的介绍了,redo log就是记录哪些地方被修改了 undo log是记录修改之前我们的数据长什么样 更新流程 我们来捋一…

python封装,继承,复写详解

目录 1.封装 2.继承 复写和使用父类成员 1.封装 class phone:__voltage 0.5def __keepsinglecore(self):print("单核运行")def callby5g(self):if self.__voltage > 1:print("5g通话开启")else:self.__keepsinglecore()print("不能开启5g通…

Redis集群(主从)

1.主从集群 集群结构: 一.单机安装redis 1.上传压缩包并解压,编译 tar -xzf redis-6.2.4.tar.gz cd redis-6.2.4 make && make install 2.修改redis.config的配置并启动redis # 绑定地址,默认是127.0.0.1,会导致只能在本地访问。…

Tomcat布署及优化-----JDK和Tomcat

1.Tomcat简介 Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说&…

C++ //练习 10.2 重做上一题,但读取string序列存入list中。

C Primer(第5版) 练习 10.2 练习 10.2 重做上一题,但读取string序列存入list中。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /******************************************************…

Vue前端加密后的数据发送到服务器端

首先,定义了一个名为 PUBLIC_KEY 的公钥和一个名为 PRIVATE_KEY 的私钥。然后,通过 JSEncrypt 创建了两个实例 encrypt 和 decrypt,分别用于加密和解密操作。 对于加密操作,调用了 encrypt.setPublicKey() 方法设置公钥&#xff…

升级Centos7的openssh到openssh-9.6p1版本 shell脚本 漏扫整改

升级Centos7的openssh到openssh-9.6p1版本 shell脚本 漏扫整改 #!/bin/bash# 声明: 该脚本适用于升级Centos7的openssh到openssh-9.6p1版本# 定义源码包版本号 OPENSSH_VERSIONopenssh-9.6p1 OPENSSL_VERSIONopenssl-3.2.1 ZILB_VERSIONzlib-1.3.1# 安装编译环境 yum -y insta…

【前端面试题5】利用 border 属性画一个三角形

举例1:利用 border 属性画一个三角形(小技巧) 完整代码如下: div{width: 0;height: 0;border: 50px solid transparent;border-top-color: red;border-bottom: none; }步骤如下: (1)当我们设…

【QT+QGIS跨平台编译】之五十六:【QGIS_CORE跨平台编译】—【qgsmeshcalclexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

Android 拍照本地图片选择框架适配

前言 通常技术方案的选择、会带来后续一些不可控的东西,这也是没法避免的,程序开发者中同时面对、测试、领导、产品各种要求。同时在网络上查找的资料也只是很旧的,不一定适合新设备,需要推倒重新弄 1、解决方案通过意图选择器做…

day6 数组 嵌套循环

1&#xff1a;打印杨辉三角 91 int arr[6][6];92 int i,j0;93 for(i0;i<6;i)94 {95 for(j0;j<i;j) 96 {97 if(j0||ij)98 {99 arr[i][j]1; …