容器-docker

314 阅读4分钟

Docker 容器

前言:

Docker 是一个开源的容器化平台,旨在简化应用程序的部署、管理和扩展。它通过将应用程序及其依赖项打包成一个独立的容器来实现这一点,这些容器可以在不同的环境中无缝运行。Docker 的核心概念和优势如下:

  1. 容器化:Docker 使用容器(Container)技术,将应用程序及其所需的所有依赖(如库、配置文件等)打包在一起。与虚拟机相比,容器更轻量,启动更快,并且多个容器可以共享同一个操作系统内核,从而提高资源利用率。

  2. 镜像(Image):Docker 镜像是一个只读模板,包含了应用程序和运行时环境。镜像可以从头开始创建,也可以基于现有的镜像进行修改。镜像是容器的基础,容器则是镜像的实例。

  3. 容器(Container):容器是镜像的运行实例。它包括运行应用程序所需的所有内容,但在隔离的环境中运行,这样可以确保一致的运行环境。

  4. Docker Hub:这是一个云端的公共注册表,用于存储和分发 Docker 镜像。开发者可以将自己的镜像推送到 Docker Hub,也可以从中拉取他人已经构建好的镜像。

  5. 跨平台性:Docker 容器可以在任何支持 Docker 的平台上运行,确保了开发、测试和生产环境的一致性,从而减少了 "在我的机器上可以运行" 这一类问题。

  6. 轻量化:与传统的虚拟化技术相比,Docker 不需要额外的操作系统开销,因此占用的资源更少,可以在同一台物理机上运行更多的容器。

通过这些功能,Docker 已经成为 DevOps 流程中不可或缺的工具,极大地提高了软件开发的效率和灵活性。

举个切身的例子:

假如我们需要部署一个 node 服务,选用的是16版本,只要服务器安装了该版本的 nodejs,我们业务代码就能顺利跑起来;但是哪天其他项目组也要在 这台服务器 上部署 node 服务,但是使用的版本是18版本,问题就出现了,一个服务器总不能安装 两个版本 的node吧,所以容器化的作用就体现出来了。

配置环境

  1. 安装可视化工具

docker,需要根据自己的macos版本,选择对应的 docker版本;笔者是 macos 11.2.2, 用的docker 4.24.0;

  1. 通过homebrew安装命令行工具
brew install docker

实践

下面我们在 docker 内 通过 nginx 做文件代理,作为静态文件服务。

  1. 第1步,我们需要在安装 nginx 镜像

image.png

image.png

image.png

或者通过命令安装

# 搜索nginx镜像
docker search nginx

# 拉取镜像
docker pull nginx
  1. 第2步,启动镜像

image.png

image.png

Volumn 是将宿主某个目录挂到容器,Port 是将宿主的端口映射到容器内对应的端口

image.png

镜像跑起来就生成了一个 Container(容器) image.png

部署代理服务

  1. 安装nginx镜像
docker pull nginx
  1. 在本地创建文件夹
docker run --name some-nginx -v -d nginx

docker images
docker logs <container_id>

docker run 来跑镜像,-v 指定挂载的数据卷,后面的 :ro 代表 readonly,也就是容器内这个目录只读,:rw 标识容器可以读写这个目录

docker 常用命令

镜像

# 搜索镜像
docker search nginx

# 安装镜像
docker pull nginx

数据卷

容器

# 列出运行中的容器
docker ps

# 列出所有容器
docker ps -a

# 暂停容器
docker stop <container_id>

# 移除容器
docker rm <container_id>

实践

  1. 构建镜像

    docker build [OPTIONS] PATH | URL | -

选项

  • -t, --tag: 为构建的镜像指定名称和标签
  • -f, --file: 指定 Dockerfile 的路径(模式是 PATH 下的 Dockerfile)
docker build -t myimage:latest .

启动容器

docker run --name <container_name>  -p <host_port>:<container_port> -v /Users/caiyong/Desktop/tmp/aaa:/usr/share/nginx/html:ro -d nginx:latest

docker run 会返回一个容器的 hash

--name 指定容器名称 -d -p 指定端口 宿主端口:容器端口 -v 指定挂载的数据卷 <宿主机目录>:/<容器>,目录 /usr/share/nginx/html 通常用作 Nginx 的默认文档根目录。当请求服务器的 IP 地址或域名时,Nginx 会从这个目录中提供静态文件。 :ro 只读 :rw 读写

dockerfile

docker 容器是一个独立的系统环境

  • WORKDIR 指定当前工作目录
  • COPY 将本地文件夹的内容复制到镜像中的指定路径
  • EXPOSE:声明当前容器要访问的网络端口,比如这里起服务会用到 8080
  • CMD:容器启动的时候执行的命令