你需要知道的Docker基础概念及使用

前言

后端在部署服务中,不像前端直接把打包好的文件放到服务器就行了。因为在后端的部署中会部署很多的服务,除了业务逻辑的微服务之外,还需要 mysql、redis 等。都需要一个一个的安装部署设置等,所以任何一个环节出了问题,那么服务就是不能用的。所以这样的部署是很繁琐的。但是 docker 的出现完美的解决了这些问题,不用再去关注每个服务器的环境以及附带的其他部署相关的东西,把需要的东西全部打包起来变成一个镜像,部署的时候让这个镜像跑起来就行了。

docker 中的概念

在 docker 中每一个部署是基于 image 也就是镜像,每个镜像可以独立出很多容器,容器就是实际使用的部署的服务。在部署成容器的过程中会有一些设置来对新建的容器进行一些配置,比如:对外开发的端口、容器的名称、数据对本机映射挂载等。

docker 的简单使用

当安装好 docker 之后,就可以快速上手来体验下 docker 了。首先需要使用 docker pull 来拉取一个镜像,这里我们拉取一个 nginx 的镜像。

bash 复制代码
docker pull nginx

拉取完成之后,我们可以使用 docker images 来查看我们本地的镜像。

bash 复制代码
docker images

可以看到我们刚刚拉取的 nginx 镜像已经在本地了。接下来我们就可以使用 docker run 来运行这个镜像了。启动之后会返回一个容器的 id。

bash 复制代码
docker run --name nginx-test2 -p 80:80 -v /tmp/aaa:/usr/share/nginx/html -e KEY1=VALUE1 -d nginx:latest
  • --name:容器的名称
  • -p:端口映射,格式为:主机端口:容器端口
  • -v:数据卷挂载,格式为:主机目录:容器目录
  • -e:环境变量,格式为:KEY=VALUE
  • -d:后台运行

运行完成之后,我们可以使用 docker ps 来查看当前正在运行的容器。如果想看下全部的容器,可以使用 docker ps -a 来查看。

bash 复制代码
docker ps

如果想看下有哪些镜像,可以使用 docker images 来查看。

bash 复制代码
docker images

如果想要进入到容器中,可以使用 docker exec 来进入容器。可以指定容器的名称或者容器的 id。

bash 复制代码
docker exec -it nginx bash
  • -i:交互式操作
  • -t:终端

进入到容器之后,可以使用 exit 来退出容器。

bash 复制代码
exit

如果想看下容器的日志,可以使用 docker logs 来查看。可以指定容器的名称或者容器的 id。

bash 复制代码
docker logs nginx

如果想看下容器的详细信息,可以使用 docker inspect 来查看。可以指定容器的名称或者容器的 id。

bash 复制代码
docker inspect nginx

如果想管理数据卷,可以使用 docker volume 来管理。可以使用 docker volume ls 来查看当前的数据卷。

bash 复制代码
docker volume ls

如果想启动一个已经停止的容器,可以使用 docker start 来启动。可以指定容器的名称或者容器的 id。

bash 复制代码
docker start nginx

如果想删除一个容器,可以使用 docker rm 来删除。可以指定容器的名称或者容器的 id。

bash 复制代码
docker rm nginx

如果想停止一个容器,可以使用 docker stop 来停止。可以指定容器的名称或者容器的 id。

bash 复制代码
docker stop nginx

使用 docker ps 来查看当前正在运行的容器,可以看到 nginx 容器已经停止了。

以上对 docker 的简单使用,熟悉了镜像和容器如何进行使用。但是这里的镜像是从 docker hub 上拉取的,如果想要自己创建一个镜像,那么就需要使用到 Dockerfile 了。接下来看下如何新建一个镜像。

Dockerfile 的使用

如果想要新建一个镜像,那么就需要提供一个 Dockerfile 文件。在这个文件中会定义一些指令来告诉 docker 如何来构建这个镜像。下面我们来看下一个简单的 Dockerfile 文件。

dockerfile 复制代码
FROM node:latest

WORKDIR /app

COPY . .

RUN npm config set registry https://registry.npmmirror.com/

RUN npm install -g http-server

VOLUME /app

EXPOSE 8080

CMD ["http-server", "-p", "8080"]
  • FROM:指定基础镜像,这里使用的是 node 的最新版本
  • WORKDIR:指定工作目录,这里指定为/app
  • COPY:复制文件,这里是把当前目录下的所有文件复制到/app 目录下
  • RUN:执行命令,这里是设置 npm 的镜像源和安装 http-server
  • VOLUME:挂载数据卷,这里是挂载/app 目录
  • EXPOSE:暴露端口,这里是暴露 8080 端口
  • CMD:容器启动命令,这里是启动 http-server

有了 Dockerfile 之后,就可以使用 docker build 来构建镜像了。

bash 复制代码
docker build -t test:tag .
  • -t:指定镜像名称
  • .:指定 Dockerfile 文件所在的目录
  • test:镜像名称
  • tag:镜像标签

当构建完成之后,就可以使用 docker images 来查看本地的镜像了。

bash 复制代码
docker images

会看到刚构建的镜像已经在本地了。接下来就可以使用 docker run 来运行这个镜像了。

bash 复制代码
docker run -p 8080:8080 -d test

有一个需要注意的点,如果 Dockfile 中没有指定 volume,那么在运行容器的时候就需要使用-v 来指定数据卷挂载。如果忘记使用-v 指定数据卷挂载,那么在容器中修改的文件就会丢失。但是如果在 Dockfile 中指定了 volume,那么在运行容器的时候就没有指定数据卷挂载,也不会丢失容器中修改的文件。会生成一个匿名卷,可以使用 docker volume ls 来查看。

小结

通过以上的学习,学会了 docker 的简单使用和 Dockerfile 的使用。docker 的使用还有很多,这里只是简单的介绍了一下。后续会继续学习 docker 的使用。希望对你有所帮助。

相关推荐
码农派大星。21 分钟前
Spring Boot 配置文件
java·spring boot·后端
GIS程序媛—椰子43 分钟前
【Vue 全家桶】7、Vue UI组件库(更新中)
前端·vue.js
DogEgg_0011 小时前
前端八股文(一)HTML 持续更新中。。。
前端·html
ZL不懂前端1 小时前
Content Security Policy (CSP)
前端·javascript·面试
木舟10091 小时前
ffmpeg重复回听音频流,时长叠加问题
前端
杜杜的man1 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
llllinuuu1 小时前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s1 小时前
Golang--协程和管道
开发语言·后端·golang
王大锤43911 小时前
golang通用后台管理系统07(后台与若依前端对接)
开发语言·前端·golang