docker入门

1、docker简介

docker是一款容器软件。由2013年发布,后来加入linux基金会。

1、什么是容器
    容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会退出。隔离的环境拥有自己的系统文件,ip地址,主机名等
    
2、什么是docker?
	 Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。项目后来加入了Linux基金会,遵从了Apache2.0协议,项目代码在GitHub上进行维护。
    
3、为什么要用docker?
    在云时代,开发者创建的应用必须要能很方便地在网络上传播,也就是说应用必须脱离底层物理硬件的限制;同时必须满足“任何时间任何地点”可获取可使用的特点。因此,开发者们需要一种新型的创建分布式应用程序的方式,快速分发部署,而这正是Docker所能够提供的最大优势。Docker提供了一种更为聪明的方式,通过容器来打包应用、解耦应用和运行平台。这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类别的平台。这无疑帮助我们节约了大量的宝贵时间,并降低部署过程出现问题的风险。

2、docker的核心概念

1、镜像(Image)
    Docker镜像(Image),就相当于是一个root文件系统。比如官方镜像ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统。
        
2、容器(Container)
    镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
    
3、仓库(Repository)
	用来保存镜像的仓库。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时,可以在仓库中下载下来。

3、docker在开发和运维中的优势

    对于开发和运维人员来说,最梦寐以求的效果可能就是一次创建和配置,之后可以在任意地方、任意时间让应用正常运行,而Docker恰恰可以实现这一中级目标。具体来说,在开发和运维过程中,Docker具有以下几个方面的优势:
 
1、更快的交付和部署:
    使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。Docker可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。
 
2、更高效的利用资源:
    运行Docker容器不需要额外的虚拟化管理程序的支持,Docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,与传统的虚拟机方式相比,Docker的性能要提高1~2个数量级。
 
3、更轻松的迁移和扩展:
    Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑等等,同时支持主流的操作系统发行版本。这种兼容性能让用户可以在不同的平台之间轻松的迁移应用。
 
4、更轻松的管理和更新:
    使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。
 
5、解决异构环境

4、安装部署docker

下载链接:https://www.docker.com/products/docker-desktop

windows	:  
mac
linux 

docker分为两个版本:
	docker-ce	: 社区版
	docker-ee   :企业版

linux 3.10的内核 有BUG

1、升级系统内核
    [root@localhost ~]# wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-5.4.167-1.el7.elrepo.x86_64.rpm
    [root@localhost ~]# wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.167-1.el7.elrepo.x86_64.rpm
    # 安装
    [root@localhost ~]# yum localinstall -y kernel-lt*
    # 启动时自动选择最新的系统版本
    [root@localhost ~]# grub2-set-default  0 && grub2-mkconfig -o /etc/grub2.cfg
    # 查看最新的系统内核启动版本
    [root@localhost ~]# grubby --default-kernel
    # 重启生效
    [root@localhost ~]# reboot
    # 检测
    [root@localhost ~]# uname -a

2、安装依赖包
	[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

3、添加软件源信息
    [root@localhost ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、更新并安装Docker-CE
    [root@localhost ~]# sudo yum makecache fast
    [root@localhost ~]# sudo yum -y install docker-ce-19.03.9

    k8s支持的最新的版本,也是最稳定的版本是19

5、启动Docker
	[root@localhost ~]# systemctl start docker

6、检测docker
	[root@localhost ~]# docker info

7、加速docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://exc00kim.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

5、docker的基础使用

1、docker三大概念
	1、镜像			:镜像是启动容器的模板
	2、容器			:是对外提供服务的实例
	3、仓库(Harbor)    :存放镜像的地方

2、docker和虚拟机之间的区别

3、镜像
镜像是启动容器的模板,同一个镜像启动的所有的容器完全相同。

	3.1、下载镜像
		docker pull [仓库的URL]/[命名空间]/[镜像名称]:[版本号]
		默认的仓库URL:https://index.docker.io/v1/
		默认的命名空间:library
		默认的版本号:latest
		# 命令 :docker pull nginx
		
		index.docker.io/library/nginx:latest
	
	3.2、查看本机镜像列表
		[root@localhost ~]# docker images
		[root@localhost ~]# docker image ls
		REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
		nginx        latest    f6987c8d6ed5   6 days ago   141MB
		仓库名       版本       镜像ID         创建距离现在的时间 大小
	
	3.3、查看镜像的详情
		docker inspect [镜像名称|ID]
		[root@localhost ~]# docker inspect nginx

	3.4、镜像tag  # 起别名
		docker tag [镜像ID] [新的名称]
		[root@localhost ~]# docker tag f6987c8d6ed5 dockers

	3.5、登录仓库
		docker login [仓库的URL地址]
		默认的仓库地址:hub.docker.com

	3.6、上传镜像
		第一步:打tag
			[root@localhost ~]# docker tag f6987c8d6ed5 alvinos/nginx:v2
		第二步:上传
			[root@localhost ~]# docker push alvinos/nginx:v2

	3.7、删除镜像
		docker rmi [镜像的名称|ID]
		[root@localhost ~]# docker rmi alvinos/nginx:v2

注:docker镜像只能创建和删除,不能修改。
	docker的ID全宇宙唯一

6、容器

对外提供服务的实例。

1、容器生命周期
	容器内的进程至少有一个进程运行在前台。

2、启动一个容器
	docker run [参数] [镜像名称|ID] [启动命令]

	参数:
		-d     : 以守护进程方式运行
		--rm   : 当容器生命周期结束时,立即删除该镜像
		--name : 指定容器名称,和将容器的名称加入docker DNS
		-e     : 指定容器内部的环境变量
		-h     : 指定容器的主机名
		-p     : 端口映射(固定)
		-P     : 端口映射(随机)
		-i     : 打开标准输出(将容器内部的标准输出接入到命令行中)     
		-t     : 创建一个命令行(伪终端)
         -v     : 添加一个目录映射

		--link
		--network
		[root@localhost ~]# docker run -it --rm centos

3、查看本机运行的容器列表
	docker ps
	-a : 显示本机上的所有的容器
	-q :  只显示ID
	# docker ps -a -q
	
	
4、在容器内部执行命令
	docker exec [容器名称] [命令]
	[root@localhost ~]# docker exec nginxv1 printenv
	
	进入容器:
		docker exec -it [容器名称] bash
		[root@localhost ~]# docker exec -it hungry_wright bash

5、删除容器
	docker rm [容器ID或名称]
	
	-f : 强制删除
	
	[root@localhost ~]# docker rm -f $(docker ps -a -q)  # 全部删除
	
6、常用命令
	docker start 	: 启动一个容器
	docker stop 	:停止一个容器
	docker create   :创建一个容器
	
    docker run  和 docker create 之间有两个区别
    1、docker run创建容器并立即启动,而docker create 只是创建
    2、docker run创建的容器时up状态,而docker create创建的容器是create

7、保存容器和镜像

1、直接将容器保存成本地镜像

	docker commit 
	
	参数:
		-a : 作者
		-m : 提交是解释信息
		-p : 保存容器时,是否暂停运行容器

    [root@localhost ~]# docker ps
    [root@localhost ~]# docker commit -a "meng" -m "shuaige" -p happy_heisenberg test:v1
	[root@localhost ~]# docker images
    
2、将本地的容器保存成镜像压缩包

	1、保存容器为镜像压缩包
	docker export 
	[root@localhost ~]# docker export -o nginx.tar hungry_wright

	2、解压容器压缩包成镜像
	docker import 
	[root@localhost ~]# docker import nginx.tar test:v2
	
3、将本地的镜像保存成镜像压缩包
	# 1、保存
	docker save 
	[root@localhost ~]# docker save -o nginxv1.tar python:3.6 nginx:latest  # 可以保存多个

    # 2、解压镜像压缩包成镜像
	docker load 
	[root@localhost ~]# docker load -i nginxv1.tar 

4、save 和 export之间的区别
	1、针对的对象不一样
	2、save保存的镜像更加完善
posted @ 2021-12-31 11:10  迷恋~以成伤  阅读(55)  评论(0)    收藏  举报