Docker简介
Docker:docker是基于go语言实现的云开源项目,诞生于2013年初。目前docker是仅次于openstack的最受欢迎的云计算开源项目。现在主流的操作系统都已经支持docker。
Docker的主要目标是通过对应的组件的封装(packaging)、分发(distribution)、部署(deployment)、运行(runtime)等生命周期管理,达到应用组件级别的“一次封装,到处运行”。这里的应用组件,既可以是一个web应用,也可以是一套数据库服务,甚至是一个操作系统或者编译器。Docker提供了高效、敏捷、轻量级的容器方案,为应用的开发和部署提供了一站式的解决方案。
Docker的优点:
1,更快捷的交付和部署。使用docker开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用相同环境来部署代码。Docker可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、运维部署的时间。
2,更高效的资源利用。Docker运行不需要额外的虚拟化管理程序支持,它是内核级的虚拟化,可以实现更高性能,同时对资源的额外需求很低。一台主机上可以同时运行上千个docker容器。
3,更轻松的迁移和扩展。Docker几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、服务器等。
4,更简单的更新管理。使用dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作,并且所有修改都以增量的方式进行分发和更新,从而实现自动化并且高效的容器管理。
虚拟机:
通过虚拟化技术我们可以在服务上运行多个不同环境的虚拟机,大大提高我们对服务器的利用率!
虚拟机的硬件的弹性扩展也方便了我们后期虚拟机配置的提升。统一的管理平台也会大大降低我们的维护成本。
容器:
容器本身的意思是指可以存放东西的器皿,我们这里可以把容器想想成是一个盒子、箱子!里面存放的就是我们要运行的应用:如一个nginx、tomcat。
容器技术相对于虚拟机具有哪些特点?
1.体积小
2.启动速度快
3.性能接近原生
4.单节点支持的容器的数量多
5.环境一致性
Docker镜像:
Docker镜像(image)类似于虚拟机镜像,可以将它理解为一个面向docker引擎的只读模板,包含了文件系统。(可以包含某一个系统,也可以是包含了一个应用程序)。镜像是创建docker容器的基础。通过版本管理和增量的文件系统,docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上值机下载一个已经做好的镜像之后通过简单的命令直接使用。
Docker容器:
Container:容器是一种基础工具;反之任何可以用于容纳其它物品的工具,可以部分或完全封闭,被用于容纳、存储、运输物品;物体可以被放置在容器中,而容器可以保护内容物。
Docker容器类似于一个轻量级的沙箱,docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是互相隔离、互不可见的。
Docker仓库:
Docker仓库(repository)类似于代码仓库,是docker集中存放镜像文件的场所。有时候会有将docker仓库和注册服务器(registry)混为一谈的,其实注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,之后通过不同的标签(tag)来进行区分。之后又根据所存储的镜像公开分享与否,docker仓库可以分为公开仓库(public)和私有仓库(private)两种形式。
目前最大的公开仓库是docker hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括docker pool等,可以提供稳定的国内访问。当然用户也可以创建自己的私有仓库。当用户创建了自己的镜像之后,随后用户就可以使用push命令将他们上传到指定的公有或者私有仓库。这样用户下次在另外的服务器上使用该镜像时只需要将其pull下来就可以了。
Docker支持在主流的操作系统平台上使用,Ubuntu、centos、Windows、macOS等。当然在Linux系列平台上是原生支持,使用体验最好。
1,环境准备
系统版本:centos7
#关闭防火墙和selinux
[root@ c7-42 ~] systemctl stop firewalld
[root@ c7-42 ~] systemctl disable firewalld
[root@ c7-42 ~] setenforce 0
[root@ c7-42 ~] sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#docker所需组件和源
[root@ c7-42 ~] yum install -y yum-utils device-mapper-persistent-data lvm2
[root@ c7-42 ~] yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#阿里云:https://developer.aliyun.com/mirror
[root@ c7-42 yum.repos.d] ll docker*
-rw-r--r-- 1 root root 2640 Mar 16 18:38 docker-ce.repo
[root@ c7-42 yum.repos.d] pwd
/etc/yum.repos.d
2,安装docker
[root@ c7-42 ~] yum -y install docker-ce
#定义镜像加速器,docker没有配置文件,需要自己创建
[root@ c7-42 ~] mkdir -p /etc/docker
[root@ c7-42 ~] cd /etc/docker/
[root@ c7-42 docker] vim daemon.json
[root@ c7-42 docker] cat daemon.json
{
"registry-mirrors": ["https://q3u0qv3z.mirror.aliyuncs.com"]
}
[root@ c7-42 ~] systemctl enable docker.service #开机自启
[root@ c7-42 ~] systemctl start docker.service #启动docker
#查看版本
[root@ c7-42 ~] docker version
#查看详细信息
[root@ c7-42 ~] docker info
3,搜索镜像,拉取镜像
[root@ c7-42 ~] docker search nginx #搜索镜像
[root@ c7-42 ~] docker image pull nginx #拉取nginx镜像
[root@ c7-42 ~] docker pull busybox #拉取busybox镜像
[root@ c7-42 ~] docker images #查看已有镜像
查看本地网络
[root@ c7-42 ~] docker network ls #查看本地网络
NETWORK ID NAME DRIVER SCOPE
c6b4aa815896 bridge bridge local
7135835db753 host host local
b94b4ff35181 none null local
[root@ c7-42 ~] docker run --name busybox -it busybox:latest
/ # ls
bin dev etc home proc root sys tmp usr var
/ #
5,在容器里创建httpd项目
/ # mkdir -p /data/html
/ # vi /data/html/index.html
/ # cat /data/html/index.html
busybox httpd server.
/ # httpd -f -h /data/html/ #启动httpd,为前台启动
打开新终端查看容器
[root@ c7-42 ~] docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b125f4779e90 busybox:latest "sh" 9 minutes ago Up 9 minutes busybox
6,查看busybox容器,并访问
[root@ c7-42 ~] docker inspect busybox #查看详细信息
[root@ c7-42 ~] curl 172.17.0.2 #访问busybox容器
busybox httpd server.
7,退出busybox前台启动的容器
/ # httpd -f -h /data/html/ #Ctrl+c结束
^C
/ # exit #退出
[root@ c7-42 ~]#
8,查看容器状态
[root@ c7-42 ~] docker ps #没有运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@ c7-42 ~] docker ps -a #查看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b125f4779e90 busybox:latest "sh" 16 minutes ago Exited (0) About a minute ago busybox
#删除busybox容器,busybox已停止,可直接删除
[root@ c7-42 ~] docker rm busybox
busybox
9,创建nginx容器
[root@ c7-42 ~] docker run --name web1 -d nginx:latest
b8dec8dcd3e7193d4d0e45bdadcb61ca4cc86379da18f910a4b10b910fbdc4ae
[root@ c7-42 ~] docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8dec8dcd3e7 nginx:latest "nginx -g 'daemon of…" 13 seconds ago Up 11 seconds 80/tcp web1
10,查看web1容器详情,并访问web1
#查看详情
[root@ c7-42 ~] docker inspect web1
#访问nginx容器
[root@ c7-42 ~] curl 172.17.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
11,获取web1的日志
[root@ c7-42 ~] docker logs web1
172.17.0.1 - - [15/May/2020:07:27:57 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
12,删除web1
[root@ c7-42 ~] docker stop web1 #运行状态,先停止容器
web1
[root@ c7-42 ~] docker rm web1 #删除
web1
Docker三个基本概念
1.镜像仓库(hub.docker.com 镜像仓库)
2.镜像
3.容器
Docker常用命令:
对镜像的操作:
1.获取镜像
增:
docker pull 镜像名:TAG
删:
删除镜像,我们不能直接删除有容器依赖的镜像
docker rmi 镜像名/ID
docker rmi -f 镜像名/ID
改:
docker tag
查:
查看本地镜像
docker images
对容器的操作:
增:
1.创建并运行容器
docker run --name 容器名字 -d -p 宿主机端口:容器端口 基础镜像
例子: docker run --name web1 -d -p 80:80 nginx:latest
docker run --name learn1 -it busybox /bin/sh 以可交互的方式运行一个容器
删:
删除容器,我们不能直接删除一个正在运行的容器,需要先停止再删除,或者-f,强制删除
docker rm web1
docker rm -f web1
改:
容器重命名
docker rename 修改容器名字
容器启动和停止
docker start/stop/restart 容器名
docker pause 容器名 \\暂停容器
docker unpause 容器名 \\取消暂停容器
docker update \\更新容器的配置
docker cp \\容器和宿主机之间复制文件,默认覆盖已有的文件
docker exec \\在运行的容器中执行一条命令
docker exec -it web1 /bin/bash \\以交互的方式进入web1容器操作
查:
查看正在运行的容器
docker ps
查看所有的容器
docker ps -a
docker stats 容器名 \\查看容器运行状态(CPU\内存\网络IO\磁盘IO使用情况)
docker top 容器名 \\查看容器正在运行的进程
docker inspect 容器/镜像 \\查看容器或者镜像的底层信息,元数据,比如查看ip、主机名、数据卷、CMD等信息
docker logs [-f] \\查看容器内部进程的日志
构建镜像:
基于一个容器构建一个新镜像
1.运行一个基于(Centos/Ubuntu/alpine)启动一个容器,在容器内部执行更改操作,比如安装一个工具或者服务!
2.使用docker commit 将容器提交更改并生成一个新的镜像,比如有个叫ztt的容器,基于它创建一个镜像nginx:1.0
例子:docker commit ztt nginx:1.0