Docker 容器详细介绍和说明
Docker 容器详细介绍和说明
Docker容器是什么?
Docker容器是一种轻量级、可移植的软件打包和运行环境,它允许开发者将应用及其依赖以独立的单元进行分发和部署。每个容器都运行在一个隔离的环境中,具有自己的文件系统、网络空间和资源限制。容器与宿主机共享内核,但通过Linux命名空间(namespaces)和控制组(cgroups)技术实现了进程、网络、文件系统等层面的隔离,使得多个容器可以在同一台物理机或虚拟机上高效并行运行。
Docker容器的特点:
- 标准化: 保证应用在开发、测试、生产环境的一致性。
- 便携性: 可以在任何安装了Docker引擎的机器上运行。
- 资源隔离: 确保容器内的应用程序不会影响到其他容器或宿主机。
- 微服务架构友好: 适合构建基于微服务的应用程序,每个服务可以封装在一个单独的容器中。
- 快速启动: 相对于传统虚拟机,容器启动速度快,资源消耗更少。
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扩展功能,具体步骤如下:
- 在VSCode中安装插件
ms-vscode-remote.vscode-remote-extensionpack
,该扩展包含用于远程开发的支持。 - 运行你的Docker容器时,确保挂载本地目录到容器内作为工作区(如
-v /path/to/local/code:/workspace
),并且开启持久化TTY以便于交互式登录(如-it
)。 - 在VSCode的命令面板(Ctrl+Shift+P)中选择“Remote-Containers: Attach to Running Container”,然后从列表中选择你已运行的Docker容器。
- 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:配置远程解释器
-
打开PyCharm,在菜单栏选择
File
>Settings
(Windows/Linux) 或PyCharm
>Preferences
(macOS)。 -
在设置窗口中找到
Project: Your_Project_Name
>Project Interpreter
。 -
点击齿轮图标然后选择
Add
>Add Remote...
-
选择
SSH Interpreter
并点击下一步。 -
填写远程服务器的 SSH 配置信息:
- 主机名:远程服务器IP地址或域名
- 用户名:远程服务器的用户名
- 端口号:SSH端口,如果是上面映射的非默认端口,则填写2222
- Authentication type:根据实际情况选择密码或密钥验证
-
在下一个界面,选择 “Use Docker Compose” 或 “Use Dockerfile” 来指定容器,或者直接选择 “Existing interpreter” 并填入容器内的Python解释器路径(如
/usr/bin/python3
)。 -
如果是通过现有的解释器连接,可能还需要映射容器内部的项目路径到宿主机(即你的本地开发环境)。
步骤2.2:配置部署(可选)
如果你需要将本地项目的更改同步到容器内,可以配置Deployment。
- 在设置窗口,转到
Build, Execution, Deployment
>Deployment
,点击"+"添加一个新的SFTP或FTPS部署配置。 - 填写远程主机的相同SSH连接信息,并指定本地与远程路径的映射关系。
步骤3:测试连接
完成上述配置后,你可以尝试测试连接是否成功。若能正常连接到远程解释器并在PyCharm中运行、调试容器内的代码,则表示配置成功。
docker 容器常用命令
以下是一些Docker容器常用的命令示例及其详细说明:
-
查看本地镜像:
docker images
该命令用于显示当前主机上所有的Docker镜像列表,包括镜像ID、标签和大小等信息。
-
拉取镜像:
docker pull ubuntu:latest
此命令从Docker Hub或其他配置的镜像仓库下载指定标签(这里是latest)的Ubuntu镜像。
-
创建并运行容器:
docker run -it --name my_container ubuntu:latest /bin/bash
这条命令将创建一个新的容器,并命名为
my_container
,使用的是最新版的Ubuntu镜像。-it
参数表示以交互模式运行(分配一个终端),并在容器内启动/bin/bash
shell。 -
列出正在运行的容器:
docker ps
列出所有正在运行的容器的基本信息。
-
列出所有容器(包括停止状态的) :
docker ps -a
-
进入已运行的容器:
docker exec -it my_container bash
这个命令允许你在一个已经运行的名为
my_container
的容器中打开一个新的shell会话。 -
停止容器:
docker stop my_container
停止指定名称或ID的容器。
-
重启容器:
docker restart my_container
-
删除容器:
docker rm my_container
删除已停止的容器,若要强制删除正在运行的容器,可以加上
-f
参数:docker rm -f my_container
-
查看容器日志:
docker logs my_container
显示指定容器的日志输出。
-
提交容器为新镜像:
docker commit my_container new_image_name
将当前修改后的容器保存为新的镜像。
-
更新容器资源限制:
docker update --cpu-shares 512 my_container
更新容器的CPU份额等资源限制。
以上是Docker容器操作中常见的命令,实际使用时可能需要根据具体需求调整参数和选项。