Build,Ship and Run Any App,Anywhere
什么是docker?
想学好Docker首先需要理解它。
Docker 到底是个什么东西呢?很多同学都用过虚拟机,但是对容器这个概念比较的陌生。我们可以借助虚拟机的概念帮助我们更好的理解Docker。
我们用的传统虚拟机有:VMware , VirtualBox 之类的需要模拟整台机器包括硬件。每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。
而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。
举例:
场景1:.net开发的网站和php开发的网站依赖的软件不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,不仅很麻烦,还会造成一些冲突。 比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小。
场景2:你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
Docker 三大重要概念:
镜像(Image),镜像是只读的,镜像中包含需要运行的文件(提供容器运行时所需的程序、库、资源、配置等文件,还包含了一些为运行时准备的一些配置参数)。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。
容器(Container),是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。
仓库(Repository),从认识上来说,就好像软件包上传下载站,有各种软件的不同版本被上传供用户下载,共享和管理Docker镜像,官方地址为:https://registry.hub.docker.com/
我们可以用Docker干嘛呢?
举简单的几个例子:
- 辛辛苦苦,兢兢业业几个月的产品中午开发好了,要去给客户演示的时,搭建演示环境就很麻烦,这个时候我可以直接将 Docker 镜像提供给他们。
- 写前端的同学和写后端的同学开发,或者不同负责不同模块的同学开发时配置的环境不同,一测试就冲突,无法正常运行。Docker就能很好的解决这个问题。
- 目前大多数的云主机提供商已经全面支持 Docker,如果你的开发测试是在本地的,正式业务是再云上,那么你需要在云主机上还配置一次运行环境。这个时候就可以使用Docker。
- 多个应用系统公用一台服务器的时候,修改某个系统参数之后需要重启服务器,其他业务可能也会受到影响,如果你使用的是Docker,你只需要重启参数修改的container即可。
开启我们的Docker之旅
安装
- Windows安装
Windows主机,可以下载docker-toolbox(www.docker.com/products/docker-desktop)一键安装,安装过程中如果提示什么错,可以把360等类似软件关闭。Windows安装好Docker后,使用Docker Quickstart Terminal运行。
- Linux安装(以Ubuntu16.04+为例)
sudo apt-get update apt-get install docker
其他系统安装可以参考官网地址:https://docs.docker.com/install/
Docker常用命令
docker
# 查看 docker 版本 docker version # 显示 docker 系统的信息 docker info
images
# 检索 image docker search image_name # 下载 image docker pull image_name # 列出镜像列表 docker images # 删除一个或者多个镜像 docker rmi image_name # 显示一个镜像的历史 docker history image_name
查看容器
# 列出当前所有正在运行的container docker ps # 列出所有的container docker ps -a # 列出最近一次启动的container docker ps -l
操作容器
# 删除所有容器 docker rm `docker ps -a -q` # 删除单个容器; docker rm Name/ID # 停止、启动、杀死一个容器 docker stop Name/ID docker start Name/ID docker kill Name/ID # 从一个容器中取日志; docker logs Name/ID # 列出一个容器里面被改变的文件或者目录 list列表会显示出三种事件 A 增加的 D 删除的 C 被改变的 docker diff Name/ID # 显示一个运行的容器里面的进程信息 docker top Name/ID # 从容器里面拷贝文件/目录到本地一个路径 docker cp Name:/container_path to_path docker cp ID:/container_path to_path # 重启一个正在运行的容器 docker restart Name/ID # 附加到一个运行的容器上面 docker attach ID
保存和加载镜像
# 保存镜像到一个tar包; -o, --output="" Write to an file docker save image_name -o file_path # 加载一个tar包格式的镜像; -i, --input="" Read from a tar archive file docker load -i file_path # 机器a docker save image_name > /home/save.tar # 使用scp将save.tar拷到机器b上,然后: docker load < /home/save.tar
登录、发布
# 登陆registry server docker login # 发布 docker push new_image_name
悄悄告诉你:记得点关注哦~
本文暂时没有评论,来添加一个吧(●'◡'●)