2, Docker study, theoretical knowledge, the next day

Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
This link: https://blog.csdn.net/LeeDemoOne/article/details/102745995

Docker learning

A mirror disposed Accelerator

Ali cloud and Netease cloud cloned image repository of information on DockerHub, for everyone to download something inside

1, Ali cloud mirrored accelerator configuration

1》、https://dev.aliyun.com/search.html
2》、注册一个属于自己的阿里云账户
3》、阿里云控制台->容器镜像服务->镜像加速器->centos
4》、①、centos6: vim /etc/sysconfig/docker
		other_args="--registry-mirror=https://你自己的账号加速信息.mirror.aliyuncs.com"
		
     ②、centos7 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
	sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
5》、重启docker服务:service docker restart || systemctl daemon-reload、systemctl 			restart docker  
6》、检查是否生效:ps -ef|grep docker || docker info 检查 Registry Mirrors值

2, the accelerator cloud images arranged netease

基本上等同于阿里云的配置,这里就不在重述

3, Docker_helloworld mirror test

Start docker background container (test run hello-world)

docker run hello-world 

run做了什么:
	Docker在本机中勋在该镜像
	   ---》有--》以该镜像未模板生产容器运行实例
	   ---》无--》去dockerhub上查找该镜像
					-》hub上能否找到-》否-》返回失败信息
								  -》能-》下载镜像--》以该镜像未模板生产容器实例运行

Two, Docker commonly used commands

1, help command

1.1、docker version		版本信息
1.2、docker info			容器的说明描述
1.3、docker help			帮助命令【常用命令说明】

2, the mirror command

镜像:相当于我们的class   容器:相当于我们的实例
2.1、docker images : 列出本地主机上的镜像
			【repository:表示镜像的仓库源 tag:镜像标签--类似版本号 image id:镜像ID
			created:镜像创建时间 size:镜像大小】
		参数:-a 列出本地所有镜像[包含镜像里包含的镜像]
			 -q 只显示当前镜像的images id
			 --digests 显示镜像的摘要信息
			 --no--trunc 显示完整的镜像信息[会把images id 完整的显示出来]
         【docker images -a】
2.2、docker search 镜像的名字 : 从仓库查询某个镜像
			 查询网站https://hub.docker.com查找
	     参数:--no--trunc:显示完整的镜像描述
			  -s:列出收藏数不小于指定值的镜像
			  --automated:只列出 automated build类型的镜像
		 【docker search -s 70 tomcat】
2.3、docker pull 镜像的名:ID -->下载镜像
			如果不写tag,默认下载latest
2.4、docker rmi  镜像名字:ID||ID -->删除镜像(rmi-->remove image)
			参数:-f 强制删除
			【删除单个:docker rmi 镜像ID
			  删除多个:docker rmi 镜像ID1  镜像ID2
			  删除全部:docker rmi -f ${docker images -qa}】
			

3, container command

准备,先下载个centos==>docker pull centos
3.1、docker run 镜像 -> 新建并启动容器--->**启动交互式容器**
			命令格式:【docker run [options] images [command][args]】
			[options:]
				--name="容器的新名字" : 为容器制定一个名称
				-d:后台运行容器,并返回容器ID,也即启动守护式容器
				-i:以交互式运行容器,通常与-t同时使用              【重要】
				-t:为容器重新分配一个伪输入终端,通常与-i同时使用    【重要】
				-P:随机端口用社
				-p:指定端口用社,有一下四种格式
						ip:hostPort:containerPort
						ip::containerPort
						hostPort:containerPort
						contanerPort
		
3.2、docker ps -> 默认列出当前正在运行的容器
		【container id容器ID 、 image id镜像ID、status状态(up表示正在运行existed退出了)、                      ports端口、name容器名称】
		[options:]
			-a:列出当前所有正在运行的+历史上运行过的 容器
			-l:显示最近创建的容器
			-n: 最近N个创建的容器
			-q: 静默模式,只显示容器编号
			--no-trunc:不截断输出
3.3、退出容器
		3.3.1、 exit 容器停止退出
		3.3.2、 ctrl+P+Q  容器不停止退出
3.4、docket start 容器ID||容器名  -->启动容器
3.5、docker restart 容器ID||容器名 -->重启容器
3.6、docker stop 容器ID||容器名 -->温柔停止容器
3.7、docker kill 容器ID||容器名 -->强制停止容器
3.8、docker rm 容器ID||容器名 --> 删除已停止的容器
	【rmi删除的是镜像  rm删除的是容器】
	-f 没有停止 也会删除
	一次性删除多个容器  docker rm -f ${docker ps -a -q}
					docker ps -a -q | xargs docker rm
					【|管道符的意义是将上一个命令的结果集传给下一个命令】
重要:
3.1、守护式启动容器	:	docker run -d 镜像
		[docker ps不会显示]
		[这个是docker的机制问题,正常情况下,我们配置启动服务只需要启动相应的service即可。例如service nginx start.但是这样做,NGINX为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀应为他觉得它没事可做了,所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行。]
	【docker run -d centos /bin/sh -c "while true; do echo hello zzyy;sleep 2;done"】

3.2、查看容器日志:		docker log -f -t --tail 容器ID
		-t显示时间  -f跟随最新的日志的日志打印  --tail数字显示最后多少条
3.3、查看容器内运行的进程  docker top 容器ID
3.4、查看容器内部细节	docker inspect 容器ID
3.5、进入正在运行的容器并以命令行交互  
		重新进入docker attach 容器ID
		docker exec -it 容器ID “bashShell”
		
		区别: attach 直接进入容器启动命令的终端,不会启动新的进程
			  exec 实在容器中打开新的终端,并且可以启动新的进程
3.6、从容器内拷贝文件到主机  docker cp 容器ID:容器内路径   目的主机路径

Three, Docker image

Mirroring is a lightweight, standalone package executable. Operating environment for packaged software and software-based operating environment developed, it contains everything you need to run a piece of software, including code, runtime libraries, environment variables and configuration files.

1, UnionFs union file system

union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。union文件系统是docker镜像的基础。镜像可以通过分层来继承,基于基础镜像,可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把隔层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

[可以简单的看做镜像就是由一层一层的文件系统叠加起来的东东,类似个花卷]

2, Docker mirror load

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统unionFs

bootfs[boot file system]主要包含BootLoader和kernel,BootLoader主要是引导加载kernel,linux刚启动是会加载bootfs文件系统,在docker镜像的最底层是bootfs。这一层与我们典型的linux系统是一样的,包含boot加载器和内河。当boot加载完成之后整个内核就都在内存中了,瓷实内存的使用权已由bootfs转交给内核。此时系统也会卸载bootfs

rootfs[root file system],在bootfs智商。包含的就是典型的linux系统中的/dev /proc /bin /etc的标准目录和文件。rootfs就是各种不同的操作西永的发行版,如要Ubuntu centos等等。

Why docker pull tomcat will have more than 400 M, for the following reasons:

3. Why do docker using this hierarchical file **

The biggest advantage is - shared resources

For example: There are built from multiple mirrors from the same base image, name the host simply save a base image on disk, and memory also just load a base image, you can assume that all container services a. And each layer of the mirror can be shared.

4, Features

docker image is read-only

When the container starts, a new writable layer is loaded on top of the mirror. This layer is often referred to the container layer, called mirror layer below the container layer

5, Docker mirror commit operation

docker commit提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名] 

eg:

1>、docker pull tomcat
2>、docker run -it -p 8888:8080 tomcat  
		(-p 主机端口:docker容器端口、  -P 随机分配端口、 -i交互 、 -t终端)
3>、测试 http://localhost:8888
4>、docker exec -it 9fa4dsewew11 /bin/bash 在webapp添加index.html
5>、测试 http://localhost:8888/index.html
6>、docker commit -a "lee" -m "tomcat with index.html" 9fa4dsewew11 lee/myTomcat:1.2
7>、测试docker images
8>、测试docker run -it -p 7777:8080 lee/myTomcat:1.2
9>、测试http://localhost:7777/index.html

Four, Docker data volume

Data persistence, desired data can be shared between multiple containers - in a similar Redis rdb or aof

数据卷可在容器之间共享和重用数据
卷中的更改可以直接生效
数据卷中的更改不会包含在镜像的更新中
数据卷的生命周期一直持续到没有容器使用他为止

1, the container volume data V added command (recommended)

1.1、直接命令添加
	A、docker run -it -v /宿主机绝对路径目录:/容器内目录  镜像名
	B、查看数据是否挂载成功(查看容器内细节):docker inspect 容器ID
	C、【容器停止后,修改宿主机的文件内容,容器重新启动,容器内的关联文件也会变动】
	D、只读权限   docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名   【readonly】
		【容器内的文件夹不支持写操作,只允许主机单向的操作文件】
1.2、DockerFile添加

2, the container volume data added DockerFile

Docker images ------> DockerFile 类似于 Java Hello.java ---->Hello.class

1》、在根目录下新建mydocker文件并进入
2》、在dockerfile中使用volume指令来给镜像添加一个或多个数据卷(1个宿主目录:N个容器目录)
 VOLUME["/dataVolumeContainer","/dataVolumeContainer2"]
 出于可以只和分享的考录,用-v主机目录:容器目录这种方法不能够直接在DockerFile中实现。
 由于宿主机目录是依赖于特定宿主机的,并不能保证在所有的宿主机上都存在这样的特定目录。
	vim Dockerfile
    内容:
        #volume test
        FROM centos
        VOLUME["/dataVolumeContainer1","/dataVolumeContainer2"]
        CMD echo "finished,-----success1"
        CMD /bin/bash
3》、build生成新的镜像  docker build -f /mydocker/Dockerfile -t lee/centos .
		[-f 文件 .当前目录 ]
4》、run新镜像   docker run -it lee/centos 
5》、docker inspect查看宿主机的对应目录在哪(默认的)

注意:

Docker挂载主机目录Docker访问出现cannot opendirectory.:Permission denied
解决办法:在挂在目录后多家一个--privileged=true参数即可
  docker run -it -v /宿主机绝对路径目录:/容器内目录  --privileged=true 镜像名

五、Docker数据卷容器

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

多个容器数据共享,类似master-slaver,第一个主的就是数据卷容器

1.先启动一个父容器dc01
	docker run -it --name dc01 lee/centos    【刚才自己做的那个挂载了数据卷的镜像】
2.--volumes-from数据传递
	docker run -it --name dc02 --volumes-from dc01 lee/centos
    docker run -it --name dc03 --volumes-from dc01 lee/centos

注意:删除dc01后,dc02和dc03还会数据共享.
	容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

Guess you like

Origin blog.csdn.net/LeeDemoOne/article/details/102745995