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查看此时正在运行的容器

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

相关推荐
jingshaoqi_ccc7 小时前
ubuntu 24下面安装docker
ubuntu·docker·eureka
关关长语8 小时前
Vue本地部署包快速构建为Docker镜像
前端·vue.js·docker
水滴与鱼9 小时前
DOCKER制作ROS运行的镜像文件
运维·docker·容器
洒家肉山大魔王11 小时前
Kubernetes中Pod 处于 CrashLoopBackOff 状态(生产环境)
linux·容器·kubernetes·pod·pod循环重启
杨浦老苏12 小时前
安全的消息传递和协作工具Virola Messenger
docker·即时通讯·群晖·im
Lynnxiaowen12 小时前
今天我们学习kubernetes内容Ingress资源对象
学习·容器·kubernetes
jason成都13 小时前
emqx的docker部署
运维·docker·容器
mixboot14 小时前
docker 国内镜像源
docker·镜像源
谷粒.14 小时前
云原生时代的测试策略:Kubernetes环境下的测试实践
运维·网络·云原生·容器·kubernetes
java_logo15 小时前
Milvus GUI ATTU Docker 容器化部署指南
运维·数据库·docker·容器·eureka·milvus