你需要知道的 docker
前言
后端在部署服务中,不像前端直接把打包好的文件放到服务器就行了。因为在后端的部署中会部署很多的服务,除了业务逻辑的微服务之外,还需要 mysql
、redis
等。都需要一个一个的安装部署设置等,所以任何一个环节出了问题,那么服务就是不能用的。所以这样的部署是很繁琐的。但是 docker
的出现完美的解决了这些问题,不用再去关注每个服务器的环境以及附带的其他部署相关的东西,报需要的东西全部打包起来变成一个镜像,部署的时候让这个镜像跑起来就行了。
docker 中的概念
在 docker
中每一个部署是基于 image
也就是镜像,每个镜像可以独立出很多容器,容器就是实际使用的部署的服务。在部署成容器的过程中会有一些设置来对新建的容器进行一些配置,比如:对外开发的端口、容器的名称、数据对本机映射挂载等。
docker 的简单使用
当安装好 docker
之后,就可以快速上手来体验下 docker
了。首先需要使用 docker pull
来拉取一个镜像,这里我们拉取一个 nginx
的镜像。
docker pull nginx
拉取完成之后,我们可以使用 docker images
来查看我们本地的镜像。
docker images
可以看到我们刚刚拉取的 nginx
镜像已经在本地了。接下来我们就可以使用 docker run
来运行这个镜像了。启动之后会返回一个容器的 id
。
docker run --name nginx-test2 -p 80:80 -v /tmp/aaa:/usr/share/nginx/html -e KEY1=VALUE1 -d nginx:latest
TIP
--name
:容器的名称-p
:端口映射,格式为:主机端口:容器端口-v
:数据卷挂载,格式为:主机目录:容器目录-e
:环境变量,格式为:KEY=VALUE-d
:后台运行
运行完成之后,我们可以使用 docker ps
来查看当前正在运行的容器。如果想看下全部的容器,可以使用 docker ps -a
来查看。
docker ps
如果想看下有哪些镜像,可以使用 docker images
来查看。
docker images
如果想要进入到容器中,可以使用 docker exec
来进入容器。可以指定容器的名称或者容器的 id
。
docker exec -it nginx bash
TIP
-i
:交互式操作-t
:终端
进入到容器之后,可以使用 exit
来退出容器。
exit
如果想看下容器的日志,可以使用 docker logs
来查看。可以指定容器的名称或者容器的 id
。
docker logs nginx
如果想看下容器的详细信息,可以使用 docker inspect
来查看。可以指定容器的名称或者容器的 id
。
docker inspect nginx
如果想管理数据卷,可以使用 docker volume
来管理。可以使用 docker volume ls
来查看当前的数据卷。
docker volume ls
如果想启动一个已经停止的容器,可以使用 docker start
来启动。可以指定容器的名称或者容器的 id
。
docker start nginx
如果想删除一个容器,可以使用 docker rm
来删除。可以指定容器的名称或者容器的 id
。
docker rm nginx
如果想停止一个容器,可以使用 docker stop
来停止。可以指定容器的名称或者容器的 id
。
docker stop nginx
使用 docker ps
来查看当前正在运行的容器,可以看到 nginx
容器已经停止了。
以上对 docker
的简单使用,熟悉了镜像和容器如何进行使用。但是这里的镜像是从 docker hub
上拉取的,如果想要自己创建一个镜像,那么就需要使用到 Dockerfile
了。接下来看下如何新建一个镜像。
Dockerfile 的使用
如果想要新建一个镜像,那么就需要提供一个 Dockerfile
文件。在这个文件中会定义一些指令来告诉 docker
如何来构建这个镜像。下面我们来看下一个简单的 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"]
TIP
FROM
:指定基础镜像,这里使用的是 node 的最新版本WORKDIR
:指定工作目录,这里指定为/appCOPY
:复制文件,这里是把当前目录下的所有文件复制到/app 目录下RUN
:执行命令,这里是设置 npm 的镜像源和安装 http-serverVOLUME
:挂载数据卷,这里是挂载/app 目录EXPOSE
:暴露端口,这里是暴露 8080 端口CMD
:容器启动命令,这里是启动 http-server
有了 Dockerfile 之后,就可以使用 docker build 来构建镜像了。
docker build -t test:tag .
TIP
-t
:指定镜像名称.
:指定 Dockerfile 文件所在的目录test
:镜像名称tag
:镜像标签
当构建完成之后,就可以使用 docker images
来查看本地的镜像了。
docker images
会看到刚构建的镜像已经在本地了。接下来就可以使用 docker run
来运行这个镜像了。
docker run -p 8080:8080 -d test
有一个需要注意的点,如果 Dockfile
中没有指定 volume
,那么在运行容器的时候就需要使用-v
来指定数据卷挂载。如果忘记使用-v
指定数据卷挂载,那么在容器中修改的文件就会丢失。但是如果在 Dockfile
中指定了 volume
,那么在运行容器的时候就没有指定数据卷挂载,也不会丢失容器中修改的文件。会生成一个匿名卷,可以使用 docker volume ls
来查看。
小结
通过以上的学习,学会了 docker
的简单使用和 Dockerfile
的使用。docker
的使用还有很多,这里只是简单的介绍了一下。后续会继续学习 docker
的使用。希望对你有所帮助。