前言
后端在部署服务中,不像前端直接把打包好的文件放到服务器就行了。因为在后端的部署中会部署很多的服务,除了业务逻辑的微服务之外,还需要 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 的使用。希望对你有所帮助。