docker
docker的概念在这里就不在累述,大家google一下都能得到很详细的描述。
借着这次项目需要自己利用docker部署各环境,记录一下docker学习和部署的相关过程。
概念
linux容器与虚拟机的对比
方案 | 资源占用 | 冗余步骤 | 启动 | 体积 |
---|---|---|---|---|
虚拟机 | 多(独占一部分内存和硬盘空间) | 多(完整操作系统,系统级别操作无法跳过) | 慢(mins) | - |
linux容器 | 少(只占用少量资源,多个容器可共享资源) | - | 快(容器中的应用=进程) | 小 |
docker属于linux容器的一种封装(虽然我并没有深入了解linux容器)。
docker的主要用途有(源阮一峰大大博客)
- 提供一次性的环境
- 提供弹性的云服务
- 组建微服务架构
虽然我在用到的过程中并没有体会到上述好处,但不得不说docker真的是个很方便,也很值得学习的东西
重点
docker有几个非常重要的概念 images
、container
、Dockerfile
-
images
docker把应用程序和依赖打包到images文件里面,通过这个文件就可以生成一个docker 容器。 简单来说,就是把项目的源文件进行打包制作成一个镜像文件
-
container
利用
docker run
的命令来生成该对应镜像的容器,容器很像一个小型的服务器 -
Dockerfile
用来配置image的文本文件,Docker根据该文件来生成二进制的image文件
下载安装
docker version // 验证docker安装成功并查看docker版本
制作docker容器
-
在项目的根目录新建文本文件
Dockerfile
# 本次项目基本dockerfile配置项 # 基础镜像 FROM nginx # 将打包好的项目文件拷贝到容器对应位置 COPY build /usr/share/nginx/html # 将本地的nginx配置文件拷贝到容器对应位置,使其生效 COPY ./nginx.conf /etc/nginx/conf.d/default.conf # 用来启动容器的命令 COPY ./docker-compose.yml /home/hope/docker-compose.yml
-
生成项目的镜像文件
# 生成镜像文件,并打上tag为feedback-sys docker build -t feedback-sys
-
将镜像文件上传至dockerhub
docker push ${dockerhub 域名}/归属/仓库名称:tag名
-
服务器端拉取镜像文件
docker pull 地址
-
启动容器
# 运行一个镜像并 启动 bash 交互 docker run -it mydocker /bin/bash # 也可以写docker-compose.yml文件,通过`docker-compose up -d`命令来启动 # docker-compose.yml文件配置参见官网
docker-compose 起镜像时,可以指定docker-compose文件,指令如下:docker-compose -f docker-compose-feedback.yml up -d
使用指定的docker-compose文件启动镜像。
----
常用docker命令
-
docker ps
查看所有当前运行的容器 (docker ps -a
查看所有容器,包括停止的) -
docker images
查看所有的镜像文件 -
docker rm ${containerId}
移除容器 -
docker rmi ${imageId}
移除镜像文件 -
docker rm ${docker ps -aq}
删除所有容器 -
docker attach ${containerId}
进入docker容器,以bash交互 -
docker kill ${containerId}
杀掉运行的容器,stop也可以
-
docker build -t ${mydocker} .
将当前目录下文件构建成指定名称镜像 -
docker tag ${imageName} ${imageName}
改镜像tag -
docker run -it ${imageName} /bin/bash
启动镜像,并进入容器,以bash进行交互 -
docker run --name ${imageName} -d -p 80:80 nginx
用 nginx 镜像启动一个容器,命名为 webserver,并映射 80 端口
tips: 进入一个运行中的镜像容器,并以bash进行交互,可以使用docker exec -it ${containerName} /bin/bash
命令
docker exec -it ${containerName} /bin/bash
以bash交互进入运行中的容器,当退出时不会停止容器运行docker attach ${containerName}
进入运行中的容器,但是退出时会导致容器停止运行docker logs -f -t --tail 10 ${containerName}
查看某个运行容器的前十条log信息
如何清理Docker占用的磁盘空间
在使用docker时,经常会产生一个问题,docker占用太多磁盘空间,当磁盘被docker占满,服务也就挂了,所以我们要对此保持警惕,定时查看docker的磁盘占用情况。
- 查看docker占用的磁盘情况
docker system df // 查看磁盘占用情况
看,可怕吧, docker 镜像占用了7.7GB的磁盘,而容器则占用了40MB的磁盘,如果我继续不管它,不清理,这个数据会依次叠加,一直到撑爆磁盘。
-
清理docker 占用的磁盘
docker system prune -a // 清理删除关闭的容器,无容器使用的镜像,无引用的数据卷等,以及dangling镜像(无tag的镜像)
执行清理命令后的效果,docker占用的磁盘瞬间清空了(因本地没有起docker容器,所以会将所有的docker镜像和容器都清除) -
查看正在运行的docker容器,以及docker镜像
-
对于旧版本的docker,如果没有docker system命令,则需手动清理
docker ps -a | grep Exit | cut -d '' -f 1 | xargs docker rm // 删除所有关闭的容器
docker rmi $(docker images | grep "^<none>" | awk "{print $3}") // 删除所有dangling镜像(无tag的镜像)
docker volume rm $(docker volume ls -qf dangling=true) // 删除所有dangling数据卷(无用volume)
来源:CSDN
作者:xiaobing_hope
链接:https://blog.csdn.net/xiaobing_hope/article/details/83589367