详细介绍:关于容器Docker
一、Docker 是什么?
简单说,Docker 是一个 “容器化” 工具,能把应用程序和它需要的所有依赖(比如库、配置文件、运行环境)打包成一个 “容器”。这个容器能在任何安装了 Docker 的电脑上 “开箱即用”,不管是 Windows、Mac 还是 Linux,效果都一模一样。
举个生活例子:你想做一道菜(应用程序),需要特定的食材(依赖)和厨具(运行环境)。没有 Docker 时,你可能在自己家(开发环境)能做好,但到朋友家(测试环境)因为厨具不一样(比如没有烤箱)做失败了。而 Docker 相当于把 “菜 + 食材 + 迷你厨房” 全打包成一个密封盒子(容器),不管带到谁家(任何环境),打开盒子就能做出一模一样的菜。
二、Docker 核心概念
镜像(Image)镜像就是 “容器的模板”,是一个只读的文件包,包含了运行应用所需的所有东西(代码、依赖、配置等)。类比:就像操作系统的 ISO 镜像文件(比如 Windows 安装盘),本身不能直接用,但可以用它 “安装” 出一个可运行的系统。或者说软件安装包~
容器(Container)容器是镜像的 “运行实例”,是镜像被 “激活” 后形成的可操作环境。容器是独立的、隔离的,多个容器之间互不干扰。类比:用 ISO 镜像安装好的 Windows 系统,你可以在里面操作(运行程序、改配置),关闭后还能重新启动。
仓库(Repository)仓库是存放镜像的 “云仓库”,类似代码仓库(如 GitHub),你可以从仓库下载别人做好的镜像,也可以把自己的镜像传上去。最常用的公共仓库是 Docker Hub,里面有海量现成的镜像(比如 Nginx、MySQL、Python 等)。
三、Docker 为什么好用?
- 环境一致:解决 “我这能跑,你那跑不了” 的经典问题,开发、测试、生产环境完全统一。
- 轻量级:容器共享宿主机的操作系统内核,不像虚拟机(VM)需要单独装系统,启动快(秒级)、占资源少。
- 隔离性:多个容器各自独立,比如一个容器里的 MySQL 崩溃了,不会影响另一个容器里的 Nginx。
- 可移植:一次打包,到处运行(本地电脑、服务器、云平台都支持)。
四、实战:用 Docker 跑一个 Nginx 网站
下面通过实际操作,体验 Docker 的核心流程:安装 Docker → 拉取镜像 → 运行容器 → 操作容器。
4.1 步骤 1:安装 Docker
- Windows/Mac:直接下载 Docker Desktop,安装后启动(会在状态栏显示图标)。
- Linux(以 Ubuntu 为例):
# 更新包管理器 sudo apt update # 安装 Docker sudo apt install docker.io # 启动 Docker 服务 sudo systemctl start docker # 设置开机自启 sudo systemctl enable docker
安装完成后,打开终端输入 docker --version
,能看到版本号就说明安装成功。
4.2 步骤 2:拉取 Nginx 镜像
Nginx 是一个常用的网页服务器,Docker Hub 上有官方镜像,我们直接 “拉取” 到本地:
docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:8adbdcb969e2676478ee2c7ad333956f0c8e0e4c5a7463f4611d7a2e7a7ff5dc
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
这个命令会从 Docker Hub 下载最新的 Nginx 镜像。下载完成后,用 docker images
可以查看本地所有镜像:
docker images
# 输出类似:
# REPOSITORY TAG IMAGE ID CREATED SIZE
# nginx latest abc123456789 2 days ago 142MB
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest acb90ced0bd7 6 weeks ago 222MB
nginx latest 8adbdcb969e2 7 weeks ago 281MB
<none> <none> d5f28ef21aab 7 weeks ago 281MB
hello-world latest 54e66cc1dd1f 7 weeks ago 16.9kB
rabbitmq 3-management 1d5d6a0f4af0 12 months ago 405MB
步骤 3:用镜像运行容器
镜像本身不能直接用,需要用它创建一个 “运行中的容器”。执行以下命令:
docker run -d -p 80:80 --name my-first-nginx nginx
7749a2b9d7026be9d263332d45b728da565f272b09d3ec3daa7fb802785505d3
命令解释:
-d
:后台运行容器(不会占用终端)。-p 80:80
:端口映射,把容器内的 80 端口(Nginx 默认端口)映射到宿主机的 80 端口,这样才能通过本地电脑访问容器里的 Nginx。--name my-first-nginx
:给容器起个名字(方便后续操作)。- 最后一个
nginx
:指定用哪个镜像创建容器。
步骤 4:访问 Nginx 服务
打开浏览器,输入 http://localhost
(或 http://127.0.0.1
),就能看到 Nginx 的默认欢迎页面,说明容器运行成功!
步骤 5:操作容器(常用命令)
查看运行中的容器:
docker ps # 输出会显示容器 ID、名字(my-first-nginx)、状态等
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7749a2b9d702 nginx "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp my-first-nginx
ea319c86ccf3 nginx "/docker-entrypoint.…" 3 days ago Up 9 minutes 0.0.0.0:8082->80/tcp, [::]:8082->80/tcp my-nginx
停止容器:
docker stop my-first-nginx # 用名字停止 # 或用容器 ID(比如前3位):docker stop abc
启动已停止的容器:
docker start my-first-nginx
删除容器(需先停止):
docker rm my-first-nginx
进入容器内部(比如查看 Nginx 配置):
docker exec -it my-first-nginx /bin/bash # 执行后会进入容器的命令行,类似 SSH 登录 # 退出容器:输入 exit
五、进阶:自定义一个应用镜像
如果官方镜像满足不了需求(比如需要运行自己的 Python 脚本),可以自己 “构建” 镜像。步骤如下:
准备文件:新建一个文件夹,里面放两个文件:
app.py
(你的应用代码):print("Hello, Docker!")
Dockerfile
(构建镜像的 “配方”):# 基于官方 Python 镜像(3.9版本) FROM python:3.9 # 把当前目录的 app.py 复制到容器的 /app 目录 COPY app.py /app/ # 容器启动时执行的命令 CMD ["python", "/app/app.py"]
构建镜像:在文件夹内打开终端,执行:
docker build -t my-python-app:1.0 .
-t my-python-app:1.0
:给镜像起名(my-python-app)和版本(1.0)。.
:表示 Dockerfile 在当前目录。
运行自定义镜像:
docker run my-python-app:1.0
终端会输出
Hello, Docker!
,说明自定义镜像运行成功。
Docker 核心价值是 “标准化打包,跨环境运行”,通过镜像、容器、仓库三个核心概念,解决了开发和部署中的环境一致性问题。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/942001.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!