Docker 基础知识 以及 常用命令

Docker

为什么会出现Docker

开发工程师将代码交给运维,运维开始部署,经常出现这个代码跑不对,
开发说没问题呀,在我本地没问题呀,所以环境和配置出现问题啦
所以 docker 可以从开发直接把OK的环境(代码/配置/系统/数据) 整体打包给 运维

特点

Docker 容器启动在秒级
Docker 对系统资源利用率高,一台主机上可以同时运行上千个Docker容器
Docker 基本不消耗系统资源,使得运行在Docker里面的应用的性能很高
Docker 迁移方便
Docker 是基于Go语言实现云开源项目
Docker 主要目标是 一次封装,到处运行

Docker 基本概念

镜像(Image)
        
    是一个只读的模板,例如一个完整的Centos操作系统
    镜像可以用来创建Docker容器,Docker中提供啦一个很简单的方式来创建镜像和更新镜像,甚至可以从其他地方直接拷贝已经做好的镜像直接使用,
    镜像有点类似于编程中的Class类,在运行的时候生成对象


容器(Container)
        
    是从镜像创建并运行的实例,就像一个启动好了的播放器程序,它可以被开始,停止,启动和删除。
    每个容器都是互相隔离的,绝对保证安全
    你可以把容易堪称一个启动了的Linux简化版系统,里面包括root用户权限,进程空间,用户空间和网络空间,还包括运行在里面的应用程序
        

仓库(Repository)
	    
    是集中存放镜像文件的地方,还有一种服务叫做仓库注册服务器,里面放着多个仓库,每个仓库中又包含多个镜像,每个镜像又有不同的标签。
    仓库的概念有点类似于Git,也分为公有仓库和私有仓库,全世界最大的Docker仓库是Docker Hub,国内最大的Docker仓库是Docker Pool。

Docker 安装

Linux
		
    Centos 安装
        Centos 7 (64-bit)  系统内核版本为3.10 以上
	Centos 6.5(64-bit) 或更好的版本 系统内核版本为 2.6.32-431 以上
	查看自己的内核
	    uname -r

	    cat /etc/redhat-release

	安装
	   
	    CentOS 6.8 

	     yum install -y epel-release   安装EPEL库  docker的依赖库
	     yum install -y docker-io
	     安装后的配置文件: /etc/sysconfig/docker
	     启动Docker后台服务: service docker start
	     docker version 验证:

            CentOS 7

	     卸载老的版本
		yum remove docker docker-client docker-client-latest \
			          docker-common docker-latest \
				  docker-latest-logrotate \
				  docker-selinux docker-selinux \
				  docker-engine-selinux docker-engine

	    安装
		1. 安装最新的
		yum install docker-ce
		2. 选择版本安装
		yum list docker-ce --showduplicates | sort -R  
		yum install docker-ce-<VERSION STRING>
		3. 启动
		systemctl start docker
            
            注:
                No package docker-ce available.
                
                先执行: yum install epel-release
                在执行: yum install docker-io
		
	    另一种安装	
                #得到文件直接输出给 sh 执行
                sudo wget -qO- https://get.docker.com | sh   
                #由于安装完Docker 只能root操作,所以增加用户拥有执行权限        
                sudo  usermod -aG docker 用户名                 

Windows 
        
    直接在Docker 官网进行下载

加速器

阿里云加速器
    地址:https://cr.console.aliyun.com/
    获得加速器地址:
    配置本机的加速: /etc/sysconfig/docker
    other_args:’加速器地址‘
    例: other_args:"--registry_mirror=https...."
        
    ubuntu 配置加速器
        https://www.cnblogs.com/weschen/p/7134462.html    

网易云加速器

镜像命令

# 列出所有镜像
    
    docker images -a 列出所有镜像  -q 只显示镜像ID
                  -digests 显示镜像摘要信息
                  -no-trunc 显示完整的镜像信息

# 查询镜像
    
    docker search [options] 镜像名称
        
           options: -no-trunc 显示完整的镜像描述
                     -s  列出收藏数不小于指定的镜像
                     --limit int  只显示几个
                     -automated   只列出automated build类型的镜像   automated build 自动构建

# 下载镜像

    docker pull 镜像名   不写版本号代表latest   例: docker pull tomact:2.4

# 删除镜像

    docker rmi 镜像名
        
        docker rmi -f 镜像名  #强制删除
        docker rmi -f 镜像名1:tag  镜像名2:tag  #删除多个
        docker rmi -f $(docker images -a -q)  # 删除全部


# 提交镜像

    docker commit -m="提交描述信息"  -a="作者" 容器ID  要创建目标镜像名称:tag
    例: docker commit -m="描述" -a="YuYan" 容器ID mydocker/mycentos:1.2


# 上传镜像

    docker push 镜像名称:tag

容器


# 运行容器

    docker run -i  以交互模式运行容器,通常与 -t 同时使用
               -d  后台运行容器,并返回容器ID
               -t  为容器重新分配一个伪输入终端,通常与 -i 同时使用
               -P  随机端口映射,容器内部端口随机映射到主机的高端口
               -p  指定端口映射,格式为:主机(宿主)端口:容器端口 
               --name="centos_YuYan": 为容器指定一个名称
    例: docker run -it -p 8080:8080 --name mytomact  tomact 

# 查看容器

    docker ps         # 查看正在运行的容器
    docker ps  -l     # 查看上次运行的容器
    docker ps  -a     # 当前运行的和过往的容器
    docker ps  -n  3  # 上 n 次 运行的容器

# 启动容器

    docker start 容器ID

# 重启容器

    docker restart 容器ID

# 停止容器

    docker stop 容器ID  # 停止退出容器
    
    exit                # 停止退出容器

    ctrl + p + q        # 容器不停止退出

    docker kill 容器ID  # 强制停止容器

# 不停止退出 或 后台运行的容器  在次进入

    docker attach 容器ID  # 直接进入容器启动命令的终端,不会启动新的进程

    docker exec   容器ID  # 是在容器中打开新的终端,并且可以启动新的进程(并不进去容器,直接返回) 
                          # 例如 docker exec -t 容器ID ls -l /var


# 删除容器    

    docker rm 容器ID      # 删除容器
    docker rm -f  容器ID  # 强制删除容器
    
    # 删除多个容器
    docker rm -f $(docker ps -aq)
    docker ps -a -q|xargs docker rm 

# 从容器内拷贝文件到主机上

    docker cp 容器ID:容器内路径

# 查看容器运行日志
    
    docker logs 容器ID
                        -t  显示时间
			-f  实时查看
			--tail  查看几行


# 查看容器内运行的进程

    docker top 容器ID

# 查看容器运行的细节

    docker inspect 容器ID



Docker 容器数据卷

目的

数据持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

特点

1、数据卷可在容器之间共享和重用数据
2、卷中的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用它为止
5、也可以容器到主机  主机到容器的数据共享

数据卷

容器内添加
    直接命令添加

	docker run -it -v /宿主机绝对路径目录:/容器内目录  镜像名
	权限:  docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名   
               #  ro 只读  read only

		
    DockerFile 添加

        根目录下新建mydocker文件夹并进入
	可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
	    VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
	    出于可移植和分享的考虑,用 -v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现
	    由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录
	file构建

	    vim Dockerfile
					
		FROM centos
		VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
		CMD echo "finished,------------success1]"
		CMD /bin/bash
	
			
	bulid后生成镜像
	    获得一个新镜像zzyy/centos
	    docker build -f /mydocker/Dockerfile -t zzyy/centos .


	run 容器

	    docker run -it 容器ID

			
	备注
	    Docker挂载主机目录Docker访问出现cannot open directory .:Permission denied
	    解决办法:在挂载目录后多加一个--privileged=true 参数即可



Docker 数据卷容器

    命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

    数据共享

        1、先启动一个父容器dc01   docker run -it --name dc01 zzyy/centos
		
        2、dc02/dc03 继承自dc01    docker run -it --name dc02 --volumes-from dc01 zzyy/centos

	3、回到dc01可以看到02/03各自添加的都能共享了

	4、删除dc01,dc02修改后dc03可否访问

	5、删除dc02后dc03可否访问

	6、新建dc04继承dc03后在删除dc03

	结论: 容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止


Dcokerfile 解析 

    解析过程
	
        基础知识
            1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数
	    2、指令按照从上到下,顺序执行
	    3、# 表示注释
	    4、每条指令都会创建一个新的镜像层,并对镜像进行提交

        大致流程
	    1、docker从基础镜像运行一个容器
	    2、执行一条指令并对容器作出修改
	    3、执行类似docker commit 的操作提交一个新的镜像层
	    4、docker在基于刚提交的镜像运行一个新容器
	    5、执行dockerfile中的下一条指令直到所有指令都执行完成

	总结

	    Dockerfile 是软件的原材料
	    Docker镜像是软件的交付品
	    Docker容器则可以认为是软件的运行态

	    Dcokerfile面向开发  Docker镜像成为交付标准 Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石

Dockerfile 体系结构(保留字指令)

    FROM   基础镜像,当前新镜像是基于哪个镜像的

	
    MAINTAINER  镜像维护者的姓名和邮箱地址


    RUN   容器构建时需要运行的命令


    EXPOSE   当前容器对外暴露出的端口


    WORKDIR  指定在创建容器后,终端默认登录的进来工作目录,一个落脚点


    ENV  用来在构建镜像过程中设置环境变量

	
    ADD  将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包


    COPY 类似ADD,拷贝文件和目录到镜像中,
	 将从构建上下文目录中<源路经>的文件/目录复制到新的一层的镜像内的<目标路径>位置 

	    COPY src dest
	    COPY ['src','dest']

	
    VOLUME  容器数据卷,用于数据保存和持久化工作

 
    CMD  指定一个容器启动时要运行的命令
        CMD
	    shell格式:  CMD 命令
	    exec格式:   CMD ["可执行文件","参数1","参数2"...]
	Dockerfile 中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换


    ENTRYPOINT  指定一个容器启动时要运行的命令
	ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数  (多个追加)		    


    ONBUILD   当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发


    小总结  

	BUILD		Both		RUN
	FROM		WORKDIR		CMD
	MAINTAINER	USER		ENV
	COPY				EXPOSE
	ADD				VOLUME
	RUN				ENTRYPOINT
	ONBUILD
	.dockerignore

	


    案例:

        Base镜像(scratch) Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的, 也就是元祖镜像

        自定义镜像mycentos:
			
	    1、编写:

		vim dockerfile
			
	    2、构建

		docker build -f 镜像名字:标签  .

	    3、运行

		docker run -it mycentos:1.3

	    4、列出镜像的变更历史
			
		docker history 镜像名

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我了解了您的问题。以下是关于Docker基础知识的介绍和总结: 1. Docker是什么? Docker是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。 2. Docker的优点是什么? Docker具有以下优点: - 轻量级:Docker容器非常轻量,因为它们与主机共享内核。 - 可移植性:Docker容器可以在任何地方运行,只要有Docker引擎。 - 可扩展性:Docker容器可以很容易地复制和扩展,可以快速地创建和销毁。 - 一致性:Docker容器可以确保应用程序在任何环境中的一致性。 3. Docker的基本概念是什么? Docker有以下基本概念: - 镜像(Image):用于创建Docker容器的模板,包含了应用程序和依赖包等。 - 容器(Container):Docker镜像的一个实例,可以运行、停止、删除等。 - 仓库(Repository):用于存储Docker镜像的地方,可以公共或私有。 4. Docker的安装步骤是什么? Docker的安装步骤包括以下几步: - 安装Docker引擎。 - 配置Docker引擎。 - 验证Docker安装是否成功。 5. Docker常用命令有哪些? Docker常用命令包括以下几个方面: - 镜像管理:docker images、docker pull、docker rmi等。 - 容器管理:docker run、docker start、docker stop等。 - 仓库管理:docker login、docker push、docker search等。 - 其他命令docker ps、docker logs等。 以上就是关于Docker基础知识的介绍和总结,希望能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值