1、docker帮助命令:

docker version      --显示版本的信息
	docker info           --显示系统及容器的信息
	docker --help       --帮助命令

2、镜像命令:

docker images    	 --查看本机所有的镜像命令
	可选项:
		--filter=STARS=3000  --过滤STARS大于3000的镜像
		docker images --filter=stars=3000

	docker search 镜像名            --从仓库中搜索镜像名
	docker pull 镜像名:版本      --从仓库中下载指定的镜像版本
	docker rmi -f 镜像名:版本或镜像ID    --删除镜像
	docker rmi -f $(docker images -aq)    --删除所有的镜像

	docker images -qa  --将所有的镜像ID显示出来
	docker ps -qa          --将所有的容器ID显示出来

3、容器命令:【先有镜像,才有创建容器】

docker run [option]IMAGE[COMMAND][ARG...]
	说明:option,设置项;COMMAND 以什么命令形式启动,镜像一般都有,所以不用特殊指定。
	--option
	--name="name"   	拟定一个容器名字
	-d              	后台运行,如果不加这个参数,docker容器启动后不能退出[这里的退出指定的是:docker run 镜像名的界面不能退出],否则就会终止;
	-it		        	使用交互方式运行,进入容器查看内容
	-p		        	指定容器端口  主机端口:容器端口(常用)
	-P 	            	随机端口
	--restart=always 	开机自启,如果不加这个参数,系统重启后,运行的容器都会停止。
	
	例子:启动并执行一个镜像
		 docker run --name="容器名" -it 镜像名或镜像ID /bin/bash
		 [docker run -it 容器名 /bin/bash:该命令的-it是交互方式进行的,也就是能够在宿主机跟容器中来回切换。如果不加,容器一运行就停止;
				/bin/bash:该命令是执行进入容器中。如果不可加这个,进入容器需要执行:docker exec/attach 容器名或容器ID才能进入容器
				/bin/bash  ----是运行命令   如果不加这个,不能进入容器中]
		  docker update 容器名/ID --restart=always	更新容器开机自启
		  [update不能更新端口映射,容器启动的时候是在Linux的内网中,如果外网/公网需要访问容器的服务,需要将公网的端口映射内网的容器端口中]
		 	
	注意:
		进入当前正在运行的容器【通常容器都是使用后台方式运行的,有时需要进入容器,修改一些配置】
		docker exec -it 容器名或容器ID /bin/bash
		docker attach 容器名或容器ID
		
	查看运行的容器命令:
		docker ps   	查看所有正在运行的容器
		docker ps -a	查看所有历史运行的容器
		docker ps -n=?  	显示最近运行过的几个命令
		docker ps -qa 	显示容器所有的ID

	退出容器命令:
		exit:直接退出并停止
		ctrl+P+Q:退出容器不停止

	删除容器:
		docker rm 容器ID或容器名 【不能删除正在启动的容器,如果要强制一个删除一个容器,如果加-f】
		docker rm -f $(docker ps -aq)  递归删除容器
		docker ps -aq | xargs docker rm  递归删除容器

	停止容器:
		docker stop 容器名或容器ID                           停止正在运行的容器
		docker kill  容器名或容器ID		      杀死正在镜像的容器进行
		docker start 容器名或容器ID                          启动一个容器

	查看容器内部的元素信息命令:
		docker inspect 
		例子:
		docker inspect 9252bd718b306d

4、查看docker日志命令:

docker logs 容器名
	docker logs --help
	docker logs -t -f --tail  n 容器名或容器ID		显示容器多少条日志,注意加了tail参数,必须要指定条数

5、查看容器内部的进程命令:

docker top 容器名或容器ID

6、commit[将正在运行的容器提交成一个新的镜像]

语法:
		docker commit [options] CONTAINER [REPOSITY[:TAG]]
	
	docker commit 容器ID 提交一个容器作为新的镜像
	例子:
	docker commit -a="FengYu" -m="add webapps app"  容器ID 镜像名:版本
	参数说明:
	-a 是作者;-m是描述

7、卷挂载【本机目录与容器内的目录同步】

docker run -it -p 8081:8081 -p 8082:8082 -v /usr/local/tomcat/bin1:/usr/local/tomcat11/bin 
		-v /usr/local/tomcat/webapps1:/usr/local/tomcat11/webapps/sguap-server 
		-v /usr/local/tomcat/bin2:/usr/local/tomcat22/bin 
		-v /usr/local/tomcat/webapps2:/usr/local/tomcat22/webapps:ro  
		mytomcat-cx:1.0 /bin/bash
		
		ro:表示容器内的目录只能读;rw:表示容器内的目录可以读写。
		注意:卷挂载强调的是目录与目录的同步。不需要指定到目录下的某一个文件,当然可以指定到某一个文件。卷挂载的容器不能作为镜像提交。

	容器数据卷:容器跟容器同步
		--volumes-from
		子容器 --volumes-from 父容器

	docker run -it --name cs01 镜像名:版本/镜像ID
	docker run -it --name cs02 --volumes-from cs01 镜像名:版本/镜像ID
	cs01跟cs02是容器

8、CMD跟ENTRYPOINT的区别:

CMD指定容器启动时要运行的命令,只有最后一个有效,可被代替,指的是在追加命令的情况下
		ENTRYPOINT指定这个容器启动的时候要进行运行的命令,可以追加。
		CMD ["ls","-a"]

指令篇:

1、删除镜像:

docker rmi 镜像名 :版本号
	docker search 镜像名
	下载镜像
	docker pull 镜像名
	发布镜像
	docker push 镜像名
	---下载及发布镜像是针对镜像仓库而言的

2、删除容器

docker rm 容器ID
	docker rm -f 容器ID [强制删除正在运行的容器]

3、运行容器

docker run [option] 镜像名:版本号(容器ID)/bin/bash
	option:
	--name:给容器取个名字
	-a:作者
	-d:后台运行
	-p:暴露外网端口
	-P:随机端口
	-v:挂载卷

4、给镜像打标记

docker tag 作者/镜像名:版本

5、进入容器

docker exec	 	--会启动一个新的容器
	docker attach   --不会启动一个新的容器

	CP拷贝命令:
	-----------	
	docker cp 容器内的文件 宿主机指定目录下;
	docker cp 宿主机指定目录下 容器内的文件;
	如:docker /home/nginx.conf 58355eab288e:/etc/nginx/nginx.conf
	
		docker cp 容器ID:容器文件 宿主机目录下
		cp是从容器内将文件拷贝到宿主机指定的目录下;从宿主机将容器拷贝到容器内用卷命令。
	例子:
		将容器(ID58355eab288e)中一个test文件拷贝到宿主机上home目录下
		docker cp 58355eab288e:/home/test /home

6、指定端口访问地址

docker run -d -it --name tomcat -p 9000:8080 tomcat-jdk-images
	docker stats 查看内存使用情况
	docker run -e 系统简称名_JAVA_OPTS=“-Xms64m -Xms512m”镜像名
	【-e 参数是设置环境变量的】

7、用完就删的镜像指令

docker run -it --rm tomcat  【该命令一般用于测试】

8、将自己制作的镜像打包

docker  save -o 镜像名.tar 镜像名:标签

9、将自己的镜像导入系统中

docker load -i 镜像名.tar

10、swarm

1、集群的管理和编号。docker可以初始化一个swarm,其他节点加入(工作者、管理者);
    2、Node就是一个docker节点,多个节点就组成可一个网络集群。(管理、工作者)
    3、service任务,可以在管理节点或者工作节点来运行。核心!用户访问!
    4、task 容器内的命令,细节。
     ------------
     docker swarm --help
     docker swarm init --初始化一个集群节点(主节点,后面的worker跟manager节点都是在其之下)
     docker swarm init --help  查看初始命令
     -----------------------------------------
     docker swarm init --advertise-add ip  --初始化一个集群并添加IP(IP有公网跟私网,私网是对内的,不需要前,公网是对外的,需要钱)。通过改命令,可以获取令牌,选择需要添加的是worker还是manager节点。
     docker swarm join-token worker  --向集群中添加一个工作节点(敲入该指令可以生成需要添加到集群的工作节点命令)
     docker swarm join-token  manager --向集群中添加一个管理节点(敲入该指令可以生成需要添加到集群的管理节点命令)
     -------------------------------------------
     docker swarm leave  --将管理节点或工作节点脱离集群
     docker swarm update --更新一个集群
     -------------------------------------------
     docker node ls  --查看节点信息

11、Raft协议

双主双从节点:manager and worker
 Raft协议:保证大多数节点存活才可以用。普通的manager至少>1台,集群至少3台。

12、systemctl stop docker 停止docker容器

13、docker service --help

create       --创建一个新的服务
        docker service create --help   --查看帮助
        docker service create -p 8080:80 --name my-nginx nginx   --这里的nginx是镜像
       
   inspect     --展示服务的详细信息 
        docker service inspect my-nginx

   logs       --查看服务或副本的日志
		docker logs 容器名/容器ID [查看容器运行错误日志]
		
   ls	      --展示服务列表
       docker service ls --查看服务列表

   ps            --展示一个或多个服务的副本状态
       docker service ps my-nginx --查看副本列表

   rm   	      --移除一个或多个服务
   rollback   --取消服务配置,还原初始设置

   scale        --扩缩一个或多个副本服务
     docker service scale --help  --查看帮助
     docker service scale my-nginx=5  动态扩展5个副本

   update     --更新一个服务
      docker service update  --help --查看帮助
      docker service update  --replicas 3 my-nginx

    调整service以什么方式运行:
     --mode replicated  
      	docker service create --mode replicated --name mytom tomcat:7   -- 默认的,在副本节点运行

     --mode global
     	 docker service create --mode global--name mytom tomcat:7   --全局的,在任何节点都可以运行

14、灰度发布:平滑升级项目,不用中断项目,停止服务。

docker run  容器启动!不具有扩缩容器
      docker service 服务!具有扩缩容器,滚动更新!

      命令->管理->api->调度->工作节点 (创建task容器、维护创建!)
      kubectl service api
   
      --wordpress 博客

15、docker stack --集群启动

docker compose --单机启动
       ----
       docker secret   --安全
       docker config  --配置

16、Linux 、docker、k8s(适合10台以上的服务器)

Go语言(由B语言、C语言、unix跟谷歌V8引擎组合而成)
       ---------
       Docker、K8S、Etcd(存储)是Go开发的。