Docker 基础

Docker

第1节 前戏

1、如果企业中,有1000台服务器,你能够保证所有的机器全部使用CentOS吗?
2、如果企业中要求部署一个Django,但是有很多台服务器不支持Python怎么办?
3、如果企业中要求将所有的服务,在无感知的情况下从阿里云切换至腾讯云,请问你怎么做?

上世纪八十年代,虚拟化 sgroupd
2010左右  ,  容器化
	名称随机
	IP随机
2013年左右 , docker
2014年左右 , docker三剑客
2015年左右 , Google
	Google内部Brog系统 ---> kubernetes

第2节 docker简介

docker是一款容器软件。由2013年发布,后来加入linux基金会。
"""
镜像(Image)
容器(Container)
镜像仓库(Repository)wi
下面再详细解释
"""

Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。
Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。
因此,Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。

第3节 安装部署docker

下载链接:https://www.docker.com/products/docker-desktop
    windows:得先安装在虚拟Linux 环境上,不建议用windows安装docker
    	# 可以看看这篇文章win安装:https://www.runoob.com/docker/windows-docker-install.html
    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
"""
参考自:https://www.runoob.com/docker/docker-mirror-acceleration.html

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
    科大镜像:https://docker.mirrors.ustc.edu.cn/
    网易:https://hub-mirror.c.163.com/
    阿里云:https://<你的ID>.mirror.aliyuncs.com
    七牛云加速器:https://reg-mirror.qiniu.com
    
我这里直接使用阿里自己账户的镜像加速
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
登录即可看到加速器地址,粘贴修改底下的列表即可
"""
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
	"registry-mirrors": ["https://8mh75mhz.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

第4节 docker的基础使用

1、docker三大概念
	1、镜像			:镜像是启动容器的模板
	2、容器			:是对外提供服务的实例
	3、仓库(Harbor)    :存放镜像的地方
"""
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
"""

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

3、镜像
	# 镜像是启动容器的模板,同一个镜像启动的所有的容器完全相同。
    docker pull
    docker push
    docker images
    docker inspect
    docker rmi
    docker history
    docker tag
    docker login
    
    

	3.1、下载镜像
		docker pull [仓库的URL]/[命名空间]/[镜像名称]:[TAG号]
            默认的仓库URL(docker info能看到):
            	 Registry: https://index.docker.io/v1/
            默认的命名空间:library
            默认的TAG:latest

        [root@localhost ~]# docker pull index.docker.io/library/nginx:latest
        # 或者直接
        [root@localhost ~]# docker pull nginx
	
	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]

	3.4、镜像tag
		docker tag [镜像ID] [新的名称]

	3.5、登录仓库
		docker login [仓库的URL地址]
		默认的仓库地址:hub.docker.com
         阿里的也可以登,用户名不要用中文,容易报错

        登录保存的认证文件在cat ~/.docker/config.json
        {
            "auths": {
                "https://index.docker.io/v1/": {
                    "auth": "bGlvbnlpZTphNTg0MDQ2NzY5MTEw"
                }
            }

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

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

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

第5节 容器

对外提供服务的实例。

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

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

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

		--link
		--network
# eg:
docker run -d --rm nginx
docker run -it --rm centos
docker run --rm -d --name nginx_v1 -P -v /tmp/:/usr/share/nginx/html nginx
docker run --name django -it --rm -p 8000:8000 -v /root/linux/:/opt/ python:3.




3、查看本机运行的容器列表
	docker ps
        -a : 显示本机上的所有的容器
        -q :  只显示ID
	
4、在容器内部执行命令
	docker exec [容器名称] [命令]
	[root@localhost ~]# docker exec nginxv1 printenv
	[root@localhost ~]# docker exec nginxv6 cat /usr/share/nginx/html/index.html

	进入容器:
		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容器挂载的目录
	docker inspect [container_name] | grep Mounts -A 20

第6节 保存容器和镜像

1、直接将容器保存成本地镜像
	
	docker commit [OPTIONS] 容器名 [REPOSITORY[:TAG]]

	#参数:
		-a : 作者  # 用的比较少
		-m : 提交是解释信息  # 用的比较少
		-p : 保存容器时,是否暂停运行容器

    [root@localhost ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
    7390f1d18977   nginx     "/docker-entrypoint.…"   9 minutes ago   Up 9 minutes   80/tcp    hungry_wright
    [root@localhost ~]# docker commit -a "Linux" -m 'init' -p hungry_wright test:v1

2、将本地的容器保存成镜像压缩包

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

	2、解压容器压缩包成镜像
	docker import 
	[root@localhost ~]# docker import nginx.tar test:v2

3、将本地的镜像保存成镜像压缩包

	docker save -o [file_name] IMAGE
	[root@localhost ~]# docker save -o nginxv1.tar python:3.6 nginx:latest

	docker load 
	[root@localhost ~]# docker load -i nginxv1.tar 

4、save 和 export之间的区别
	1、针对的对象不一样
	2、save保存的镜像更加完善
posted @ 2021-11-19 21:50  LionYie  阅读(92)  评论(0)    收藏  举报