Docker入门(一)

一.Docker简介

1.环境配置的难题

软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?

用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。

如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:”它在我的机器可以跑了”,言下之意就是,其他机器很可能跑不了。

环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。

2.什么是虚拟化

虚拟化,是指通过虚拟化技术将一台计算机虚拟化为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统。

传统虚拟机:VMware,VisualBox

每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。

虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。

Docker的优势:

1.更快速的交付和部署

例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。

Docker启动时间可以做到秒级甚至毫秒级的启动时间,大大节约了开发.测试.部署的时间

2.高效的部署和扩容

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。

Docker 容器可以随开随关,很适合动态扩容和缩容。

3.更高的资源利用率

Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。

总结:

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于原生
系统支持量 单机支持上千个容器 一般几十个

3.核心概念

1.镜像

Docker 镜像(Image)就是一个只读的模板。

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

2.容器

镜像和容器的关系,就像是java中的类和实例一样。

Docker 利用容器(Container)来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

3.仓库

仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Docker Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 时速云 、网易云 等

Docker官网:

https://hub.docker.com/

二.Docker安装

1.MacOS安装

方式一:

如果系统中已安装Homebrew Cask,可以在终端中运行如下命令直接安装.

Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。

1.安装Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2.卸载HomeBrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

3.安装Docker

$ brew cask install docker 

方式二:

https://download.docker.com/

在链接中下载对应版本的Docker。

2.运行

在应用图标中找到Docker图标并点击运行

Docker入门(一)

运行之后,会在右上角菜单栏看到多了一个小鲸鱼的图标。

启动终端,可以通过命令检查安装后的Docker版本

docker --version

尝试运行一个nginx服务器:

docker run -d -p 80:80 --name webserver nginx

服务运行后,可以访问http://localhost

停止服务并删除:

docker stop webserver
docker rm webserver

三.Docker镜像操作

1.Docker镜像是由文件系统叠加而成。最低端是一个文件引入系统,即bootfs,这很像典型的linux/Unix的引导文件系统。

1.列出镜像

docker images
tag:镜像标签
Imageid:镜像id
created:镜像的创建日期
size:镜像大小

2.拉取镜像

docker pull centos:7

3.搜索镜像

docker search 镜像名称
name:仓库名称
description:镜像描述
stars:用户评价
official:是否官方
automated:自动构建

4.删除镜像

docker rmi $IMAGE_ID:删除指定镜像

docker rmi 'docker images -q':删除所有镜像

 

Docker入门(一)

三.Docker容器操作

创建容器命令

docker run

-i:表示运行容器
-t:表示容器启动后进入其命令行。
--name:为创建的容器命名
-v:表示目录映射关系
-d:创建一个守护式容器在后台运行
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

交互式容器

docker run -it --name=mycentos centos:7 /bin/bash

bash:放在镜像后的是命令,这里我们希望有个交互式shell,因此用的是bash

退出当前容器,该容器也随之停止。

守护式容器

docker run -di --name=mycentos2 centos

登录守护式容器方式

docker exec -it container_name

查看容器

docker ps -a:查看所有容器
docker ps -l:查看最后一次运行的容器
docker ps:查看正在运行的容器

停止与启动容器

docker stop $container_name/id

启动已运行过的容器

docker start $container_name/id

删除容器

docker rm $container_id/name:删除指定容器
docker rm 'docker ps -a -q':删除所有容器

删除none的镜像,要先删除镜像中的容器。要删除镜像中的容器,必须先停止容器。

$ docker images

$ docker rmi $(docker images | grep "none" | awk '{print $3}') 

直接删除带none的镜像,直接报错了。提示先停止容器。

$ docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }') //停止容器

$ docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }') //删除容器

$ docker rmi $(docker images | grep "none" | awk '{print $3}') //删除镜像

四.Mysql部署

拉取mysql镜像

docker pull mysql

Docker入门(一)

创建mysql容器

docker run -di --name=my_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
-p:代表端口映射
-e:代表添加环境变量

进入Mysql容器,登录mysql

docker exec -it my_mysql /bin/bash

登录Mysql

mysql -u root -p

远程登录mysql(可以使用navicat类似的图形化工具远程登录)

五.Redis部署

拉取redis镜像

docker pull redis

创建redis容器

docker run -di --name=my_redis -p 6379:6379 redis

客户端测试

docker-cli -h 127.0.0.1