Docker - docker的使用
一、docker的预备
1)、docker的概念
docker是指容器化技术,用于支持创建和使用linux容器。借助 Docker,可将容器当做轻巧、模块化的虚拟机使用。同时,还将获得高度的灵活性,从而实现对容器的高效创建、部署及复制,并能将其从一个环境顺利迁移至另一个环境,从而有助于针对云来优化应用。
docker本身并不是容器,它是创建容器的工具,是开源的应用容器引擎。让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
2)、docker的优势
1)、更高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker
对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
2)、更快速的交付和部署
传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker
容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
3)、一致的运行环境
开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker
的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。
4)、持续交付和部署
对开发和运维(DevOps (opens new window))人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
使用 Docker
可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) (opens new window)系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) (opens new window)系统进行自动部署。
而且使用 Dockerfile
使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
5)、更轻松的迁移和扩展
由于 Docker
确保了执行环境的一致性,使得应用的迁移更加容易。Docker
可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
6)、更轻松的维护和管理(可以回滚)
Docker
使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
3)、 docker的缺点
Docker 本身非常适合用于管理单个容器。但随着您开始使用越来越多的容器和容器化应用,并把它们划分成数百个部分,很可能会导致管理和编排变得非常困难。最终,您需要后退一步,对容器实施分组,以便跨所有容器提供网络、安全、遥测等服务。于是,Kubernetes应运而生。
4)、docker的组成
docker主要由镜像和容器组成,包括了3个基本概念
镜像(Image):docker镜像好比一个模板,相当于一个文件系统
容器(Container):容器需要通过镜像来创建。镜像和容器就像是面向对象中的类和实例一样。容器可以被创建/启动/停止/删除等。
仓库(Repository):仓库就是存放镜像的地方,分为私有仓库和公有仓库,类似git。
5)、docker的运行原理
docker是一个Client-Server结构的系统,docker的守护进程运行在主机上,通过socket从客户端访问。dockerServer接收到docker-Client的指令,就会执行这个命令。
二、docker的安装
1)、 homebrew的cask支持Docker for Mac,可直接安装brew install --cask docker,可参考《Mac 通过brew安装docker》。
2)、直接到官网下载,https://download.docker.com/mac/stable/Docker.dmg
3)、docker的参考文档:https://docs.docker.com
4)、dockerhub查找镜像源地址:https://hub.docker.com
三、 docker的使用
1)、查看版本
docker --version
docker-compose --version
docker-machine --version
2)、查看docker系统信息(包括镜像和容器的数量等)
docker info
3)、帮助命令
docker help
4)、查看 cpu的状况
docker stats
四、docker的基本命令
A:镜像相关命令:
1)、查看镜像可用版本(nginx为例)
docker search nginx
2)、下载(拉取)一个镜像
docker pull nginx:latest(:后面是镜像版本)
3)、运行一个nginx服务器
docker run -d -p 81:80 --name webserver nginx
可选项:
--name webserver :容器名称,用来区分容器
-p 81:80 :端口进行映射,将本地的81端口映射到容器内部的80端口
-v ~/nginx/html:/usr/share/nginx/html 数据卷挂载ro/rw,将主机项目中的目录挂载到容器的目录下,默认rw只能在宿主机外改变,容器内部不能改变
-d:设置容器中在后台一直运行
-it:使用交互方式运行,进入容器查看内容
-P:随机端口
-e:环境配置设置
注意:后台启动运行,必须要有一个前台进程,docker发现没有应用,就会自动停止
重点:数据卷挂载分为具名/匿名/指定路径挂载,容器数据卷挂载可以实现数据共享,容器的持久化和同步操作,可以使用docker volume 查看卷的情况,可以使用volumes-from实现多个容器之间的数据共享。
4)、停止容器命令 docker stop container_name/container_id
停止nginx服务 :docker stop webserver(或者nginx容器ID)
5)、删除容器命令 docker rm container_name/container_id
删除nginx服务 docker rm webserver(或者nginx容器ID)
6)、启动/重启容器服务 docker start/restart container_name/container_id
启动/重启nginx服务:docker start/restart webserver(或者nginx容器ID)
7)、列出所有镜像 (列表包含仓库名、标签、镜像 ID、创建时间以及所占用的空间)
docker images ls
说明:
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
可选项:
-a:列出所有的镜像
-q:只显示镜像的id
注意:镜像ID是唯一标识,一个镜像可以对应多个标签
8)、查看镜像、容器、数据卷所占用的空间
docker system df
9)、删除镜像
指定镜像:docker rmi [镜像名称/镜像短ID/镜像长ID/镜像摘要]
多个镜像:docker rmi 镜像ID 镜像ID 镜像ID
全部镜像:docker rmi $(docker images -aq)
10)、删除docker images ls 命令配合 删除所有仓库名为redis的镜像
docker rmi $(docker images ls -q redis)
11)、查看镜像运行记录
docker history 镜像id
B:容器相关命令
1)、列出容器
docker ps
可选项:
-a:显示所有的容器,包括未运行的
-l:显示最近创建的容器
-n:列出最近创建的n个容器
-q:只显示容器的编号
2)、进入容器
docker exec -it [容器名称] /bin/bash
docker atthch 容器id
区别:docker exec 进入容器后开启一个新的终端,可以在里面操作;docker attach 进入容器正在执行的终端,不会启动新的进程
3)、退出容器
容器停止退回主机 exit
容器不停止推出 ctrl+p+q
4)、删除容器
指定容器:docker rm [容器id]
多个容器:docker rm 容器id 容器id 容器id
所有容器:docker rm $(docker ps -aq) docker ps -a -q|xargs docker rm
注意:不能删除正在运行的容器,要删除正在运行的容器需要加 -f 参数,docker rm -f 容器id
5)、启动/重启容器
docker start/restart 容器id
6)、停止/强制停止容器
docker stop/kill 容器id
7)、查看容器日志
docker logs -f -t --tail 100 容器id
--tail后面必须加参数条数
8)、查看容器中的进程信息
docker top 容器id
9)、查看容器的元数据(重要命令)
docker inspect 容器id
10)、从容器上拷贝数据到主机上
docker cp 容器id:容器内路径 主机路径
四、Dockerfile的指令
FROM 基础镜像,一切从这里开始
MAINTAINER 镜像的作者 姓名<邮箱>
RUN 镜像构建需要运行的命令
ADD 步骤,添加内容
WORKDIR 镜像的工作目录
VOLUME 挂载的目录
EXPOST 端口配置
CMD 指定容器启动要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT 指定这个容器启动要运行的命令,可以追加命令
ONBUILD 当构建一个被继承的Dockerfile时会运行
COPY 类似ADD将我们文件拷贝到镜像中
ENV 构建的时候设置环境变量
以上部分内容参考b站up主讲解,地址放在这里大家可以自己去学习:Docker最新超详细版教程通俗易懂