Docker从入门到部署项目

Docker概念

Docker是一个开源的应用容器引擎,它是基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。通过容器可以实现方便快速并且与平台解耦的自动化部署方式,无论你部署时的环境如何,容器中的应用程序都会运行在同一种环境下。并且它是完全使用沙箱机制,相互之间是隔离的,更重要的是容器性能开销极低。

Docker 作为轻量级虚拟化技术,拥有持续集成、版本控制、可移植性、隔离性和安全性等优势。

Docker17.03版本之后分为CE(Community Edition:社区版)EE(Enterprise Edition:企业版)

docker是一种容器技术,它主要是用来解决软件跨环境迁移的问题

安装Docker

Docker可以运行在Mac, Windows, linux等操作系统上

Mac为例

使用Homebrew安装

shell 复制代码
brew install --cask docker

桌面版安装

除了使用终端外,它还可以使用桌面版,操作更方便

如果需要手动下载,请点击以下 链接 下载 Docker Desktop for Mac。

检测是否安装成功

shell 复制代码
docker -v

尝试运行一个Nginx服务器

shell 复制代码
docker run -d -p 80:80 --name webserver nginx

当本地没找到nginx镜像时,它会去远程仓库中拉取,服务运行后,就可以通过localhost来访问了

镜像加速

如果在使用过程中发现拉取镜像十分缓慢,那是因为docker服务器是在国外的,但我们可以通过配置docker国内镜像来进行加速

镜像加速器 镜像加速器地址
Docker 中国官方镜像 registry.docker-cn.com
DaoCloud 镜像站 f1361db2.m.daocloud.io
Azure 中国镜像 dockerhub.azk8s.cn
科大镜像站 docker.mirrors.ustc.edu.cn
阿里云 ud6340vz.mirror.aliyuncs.com
七牛云 reg-mirror.qiniu.com
网易云 hub-mirror.c.163.com
腾讯云 mirror.ccs.tencentyun.com

在任务栏点击 Docker Desktop 应用图标 -> Settings...,在左侧导航菜单选择 Docker Engine,在右侧像下边一样编辑 json 文件。

json 复制代码
{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://hub-mirror.c.163.com"
  ]
}

修改完成之后,点击 Apply & restart 按钮,Docker 就会重启并应用配置的镜像地址了。

配置完可以执行docker info检查加速器是否生效

shell 复制代码
docker info

Docker三要素

镜像(image)

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

容器(container)

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

简单理解就是容器是镜像的一个运行实例。当我们运行一个镜像,就创建了一个容器。

仓库(repository)

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

使用镜像

拉取镜像

Docker Hub 上有大量的高质量的镜像可以用,我们可以使用docker pull从镜像仓库中拉取对应的镜像。

格式为:

shell 复制代码
docker pull [选项] [docker Registry 地址[:端口号]/]仓库名[:标签]

具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。

  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub(docker.io)。
  • 仓库名:这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

比如拉取一个node镜像:

shell 复制代码
docker pull node:18-alpine

这里我们拉取镜像的时候只是给出了镜像名称(仓库名+标签)也就是node:18-alpine,并没有给出Docker镜像的仓库地址,所以它会从默认地址docker.io拉取镜像

从上图我们可以看到docker pull 命令的输出结果给出了镜像的完整名称,即: docker.io/library/node:18-alpine

查看镜像

如果想要查看本地已经下载的镜像,可以使用docker image ls命令

列表包含了 仓库名标签镜像 ID创建时间 以及 所占用的空间

当然也可以在docker桌面端中直接查看:

删除镜像

如果想要删除本地镜像,可以使用docker image rm命令

格式为:

shell 复制代码
docker image rm [选项] <镜像1> [<镜像2>...]

其中,<镜像> 可以是 镜像短 ID镜像长 ID镜像名 或者 镜像摘要

比如删除我们刚拉取的node镜像

shell 复制代码
docker image rm node:18-alpine   

如果想批量删除镜像可以使用docker image ls -q来配合使用docker image rm

比如,我们需要删除所有仓库名为 redis 的镜像:

shell 复制代码
docker image rm $(docker image ls -q redis)

或者删除所有在 mongo:3.2 之前的镜像:

shell 复制代码
docker image rm $(docker image ls -q -f before=mongo:3.2)

更多指令可通过docker image --help查看

操作容器

查看容器

查看正在运行的容器:

shell 复制代码
docker ps

查看所有容器

shell 复制代码
docker ps -a

启动容器

启动容器一般有两种情况:

  • 基于镜像新建一个容器并启动
  • 将已有的终止状态(exited)的容器重新启动

新建并启动

使用的命令是docker run

shell 复制代码
docker run -it node

参数说明:

  • -i:交互式操作
  • -t:终端
  • node:node镜像

启动终止状态的容器

首先查看所有的容器

shell 复制代码
docker ps -a

然后可以使用docker start启动一个停止的容器

shell 复制代码
docker start 7e7ff4af478f

重启容器

shell 复制代码
docker restart a03b0445b82d

后台运行

大部分情况下,我们都希望docker是在后台运行的,这里可以通过-d指定容器的运行模式

shell 复制代码
docker run -d node:latest

停止容器

停止容器命令如下

shell 复制代码
docker stop <容器 id>

先查看所有容器

再停止容器

shell 复制代码
docker stop 3c275da2f36d

进入容器

当我们使用-d参数时,容器启动会进入后台,此时想要进入容器可以通过以下指令:

exec(推荐使用)

shell 复制代码
docker exec -it a03b0445b82d /bin/bash

注意: 如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用 docker exec 的原因。

attach(不推荐使用)

shell 复制代码
docker attach a03b0445b82d

注意: 如果从这个容器退出,会导致容器的停止。

删除容器

删除容器可以使用docker rm命令

shell 复制代码
docker rm a03b0445b82d

如果想要删除所有终止状态的容器可以使用以下指令:

shell 复制代码
docker container prune

小试牛刀(部署一个前端项目)

首先准备一个vue项目,在项目根路径下添加Dockerfile文件

编写Dockerfile

dockerfile 复制代码
# 指定node镜像
FROM node:16-alpine as builder

# 指定工作目录
WORKDIR /code

# 代码复制到容器中
ADD . /code

# 安装依赖
RUN npm install --registry=https://registry.npm.taobao.org

# 打包
RUN npm run build

# RUN ls

# 指定nginx镜像
FROM nginx:latest

# 复制打包后的代码到nginx容器中
COPY --from=builder /code/dist /usr/share/nginx/html

# 暴露端口
EXPOSE 80

打包镜像

shell 复制代码
 docker build -t web-nanjiu .

启动容器

在镜像打包完成之后,我们可以使用该镜像来启动一个容器

shell 复制代码
docker run -itd -p 0.0.0.0:9090:80 web-nanjiu

这里的-p表示将容器的端口映射到宿主机的端口,这里的宿主机也就是我们本地了

前面的0.0.0.0:9090表示宿主机端口

后面的80表示容器的端口

启动完我们直接使用http://localhost:9090/进行访问

当看到这个页面时就代表docker部署成功了

当然你也可以使用docker ps查看此时正在运行的容器

如果这篇文章有帮助到你,❤️关注+点赞❤️鼓励一下作者,关注 前端南玖 第一时间获取最新文章~

相关推荐
IT成长日记9 分钟前
【Docker基础】Docker核心概念:容器(Container)与镜像(Image)的区别与联系
运维·docker·区别与联系·container·imgae
容器魔方20 分钟前
科大讯飞基于Volcano实现AI基础设施突破,赢得CNCF最终用户案例研究竞赛
云原生·容器·云计算
德育处主任29 分钟前
亚马逊云 Lambda 容器化部署教程
后端·容器
xixingzhe21 小时前
docker compose安装Prometheus、Grafana
docker·grafana·prometheus
Kevin不想说话926192 小时前
WSL2 Ubuntu Docker 完整部署指南
docker
啃火龙果的兔子2 小时前
在服务器上使用 Docker 部署 Node.js 后端服务和前端项目
服务器·docker·node.js
风清再凯3 小时前
docker-compose容器单机编排
docker·容器·dubbo
ℳ₯㎕ddzོꦿ࿐3 小时前
Ubuntu 24.04 上安装与 Docker 部署 Sentinel
ubuntu·docker·sentinel
masx2006 小时前
minio web console已死,Web管理功能全砍!使用 OpenMaxIO 恢复 MinIO 社区版的 Web 控制台功能!
docker·容器
爱学语言的人6 小时前
Docker快速构建并启动Springboot程序,快速发布和上线/
spring boot·docker·容器