docker 学习

docker 是基于linux系统的

1.docker 安装(需要联网)

1.1 卸载旧版本 (\表示连接符)

	$ sudo yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine

1.2 Docker 仓库进行安装

设置仓库 安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
	sudo yum install -y yum-utils device-mapper-persistent-data lvm2
选择 阿里云
	sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 Docker Engine-Community
	sudo yum install docker-ce docker-ce-cli containerd.io
	回车 选择是
启动docker
	sudo systemctl start docker
	加入开机启动
	systemctl enable docker
校验运行hello-world
	sudo docker run hello-world

other

安装完docker后
1.启动 systemctl start docker
2.查看状态 systemctl status docker
3.服务器重启了,启动docker :  service docker start
4.设置docker开机启动:systemctl enable docker

2.docker 基本命令

docker version 					:查看容器版本信息
docker images 					:查看镜像
docker ps 					:查看正在运行的容器
docker ps -a 					:查看所有的运行的容器,包含停止的容器
docker ps -n 5 					:显示最近创建的几个容器
docker ps -q 					:只显示容器编号ID
docker pull xxx  				:拉取xxx镜像,默认拉取最新的:lastest 可以跟指定版本
docker run -it --name aaa xxx 			:启动xxx镜像,并命名为aaa,并且以交互模式进入容器中  退出:ctrl+p+q
docker run -itd --name aaa xxx /bin/bash 	:运行xxx的镜像,并取名为aaa 以后台模式启动
docker start 容器名  				:启动容器
docker stop -f 容器名 				:强制停止容器
docker kill 容器id 				:停止容器
docker restart 容器id 				:重启容器
docker attach 容器id 				:进入容器,退出容器会导致停止容器
docker exec -it  容器名 				:进入容器,退出容器不会导致停止容器
docker rm -f 容器id  				:强制删除容器
docker rmi 镜像id  				:删除镜像
docker run -P -d nginx:latest 			:使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -p 80:80 -v /data:/data -d nginx:latest 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
	docker run --name kn -p 8081:8080 harbor.io/qas/knife4jdemo:v1	
docker port 容器id 				:查看指定容器的某个确定端口映射到宿主机的端口号
docker logs -f 容器名				:查看容器内的日志信息
docker top 容器id 				:查看容器内运行的进程
docker search 镜像名/镜像id  			:搜索镜像,在http://hub.docker.com 搜索镜像
docker create --name mydocker nginx 		:创建一个新的容器,但不启动它
docker inspect 	容器id				:获取容器的元数据
docker top 容器id 				:显查看容器中运行的进程信息
docker log -f --tail 100 容器名  		: 查询容器里面的日志信息,显示最新100行

docker 挂载容器数据卷

加上:--privileged=true
挂载数据卷 : docker run -it --privileged=true -v /宿主机绝对路径目录:/容器目录 镜像名

other

docker commit 提交容器副本,使其成为新的镜像
	:docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]
导出容器成tar
	docker export 容器id > 文件名.tar
将tar恢复到新的镜像
	cat 文件名.tar | docker import -镜像用户/镜像名:[标签名]

docker Registry 私服版本镜像仓库

1.docker pull registry 拉取镜像
2.docker run -d -p 5000:5000 -v /huk/myregistry/:/tmp/registry --privileged=true registry

3.DockerFile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
例子:
	FROM nginx
	RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html

1.FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
2.RUN:用于执行后面跟着的命令行命令
	2.1:RUN <命令行命令>
	2.2:RUN ["可执行文件", "参数1", "参数2"]
	 RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
3.COPY:拷贝指令,从上下文目录中复制文件或者目录到容器里指定路径,将镜像拷贝到容器里面
3.1 ADD :拷贝命令,与COPY 一致,但区别是ADD可以拷贝后,如果是压缩文件tar,会进行自动解压
4.ENV:设置环境变量 ENV <key1>=<value1> <key2>=<value2> 在后续的指令中可以通过 $定义的名称 引用
5.VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷 VOLUME ["<路径1>", "<路径2>"...]
6.EXPOSE:声明端口
7.MAINTAINER:镜像维护者姓名或邮箱地址
8.CMD:容器中启动默认运行的指令,多个CMD,最后一个生效,前面的会被覆盖,命令行指定的命令会覆盖CMD里面的指令
9.ENTRYPOINT:和CMD一样,容器启动时默认运行指令但不会被覆盖,会被追加
10.ONBUILD : 触发器,生效于由该dockerfile构建出来的新images被用于另外一个dockerfile中的指令作为基础镜像的时候,触发
11.WORKDIR : 启用容器,登录到容器里面时的目录

3.1 Docker Compose是一个用来定义和运行复杂应用的Docker工具,负责实现对 Docker 容器集群的快速编排

Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景

3.1 安装 DockerCompose 并且配置权限
	1.sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
	2.sudo chmod +x /usr/local/bin/docker-compose
	3.docker-compose -v
3.2 Docker-Compose  一般创建yml文件
	参考:https://www.jianshu.com/p/658911a8cff3

3-1 Portainer 是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能

3-1.1 下载&安装
	参考:https://blog.csdn.net/A632189007/article/details/78779920?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-78779920-blog-120851053.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-78779920-blog-120851053.pc_relevant_antiscanv2&utm_relevant_index=1
	利用docker下载
		docker pull docker.io/portainer/portainer
3-1.2 单机版运行
	如果仅有一个docker宿主机,则可使用单机版运行
运行命令 :
	  	docker run -d -p 9000:9000 \        			#端口对应
		    --restart=always \             			#表示在重启docker的时候,自动启动该工具
		    -v /var/run/docker.sock:/var/run/docker.sock \  	#数据卷挂载
		    --name prtainer-test \				#取名为 prtainer-test
		    docker.io/portainer/portainer			#镜像名称
3-1.3 访问方式 : http://IP:9000
3-1.4 单机版选择local即可
3-1.5 docker集群模式管理
使用Portainer+Swarm 来进行集群管理操作
1.Portainer启动 选择Remote这个模块 创建一个名称和增加一个节点

3-2 Swarm 是一套较为简单的工具,用以管理Docker集群,使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go, docker_py, docker等)均可以直接与Swarm通信

	3-2.1 参考:https://blog.csdn.net/a632189007/article/details/78756339

	3-2.2 对所有要加入集群的docker节点都进行修改配置文件的操作
			添加2375端口监听 然后重启docker

	3-2.3 使用docker-proxy代理服务
			默认情况下,Docker引擎只侦听套接字。 我们可以重新配置引擎以使用TLS,或者您可以使用代理容器。 这是一个非常轻量级的容器,它只是将请求从TCP转发到Docker监听的Unix套接字
			1.docker pull docker.io/shipyard/docker-proxy
			2.启动容器
					docker run -ti -d -p 2375:2375 \
						--restart=always \
						--hostname=$HOSTNAME \
						--name shipyard-proxy \
						-v /var/run/docker.sock:/var/run/docker.sock \
						-e PORT=2375 \
						docker.io/shipyard/docker-proxy:latest
			注意:该代理服务容器也需要在每个要加入集群的docker节点上启动,同时要保证该容器的正常运行,如果容器停止则无法发现节点。

	3-2.4 安装 Swarm
			1.拉取镜像			docker pull docker.io/swarm
			2.生成唯一token 		docker run --rm swarm create
			3.启动Swarn Manager (Swarn Manager 只需要启动一个,所以可选取一个docker节点进行启动)
				docker run -ti -d -p 2376:2375 \
	    					--restart=always \
	    					--name shipyard-swarm-manager \
	    					docker.io/swarm:latest \
	    					manage --host tcp://0.0.0.0:2375 \
	    					token://rw4d3ac32aa6a86b341e3asd69e2cd0b 
	    	4.
	    	5.启动Swarm Agent 将当前docker节点加入到集群中,Swarm Agent需要在每一个要加入到集群中的docker节点上启动
	    			docker run -ti -d \
						--restart=always \
						--name shipyard-swarm-agent \
						docker.io/swarm:latest \
						join --addr [docker节点的真实ip]:2375 \
						token://rw4d3ac32aa6a86b341e3asd69e2cd0b	
			6.可以使用命令查看docker节点情况(任意docker节点上都可以执行)
					docker run --rm swarm list token://rw4d3ac32aa6a86b341e3asd69e2cd0b
			7.查看docker集群详情
					docker -H 10.0.11.150:2376 info				

4.Harbor 是docker镜像仓库 linux环境下安装本地的镜像仓库

4.1 安装 参考地址
	https://zhuanlan.zhihu.com/p/388290381
	https://zhuanlan.zhihu.com/p/346499055
4.2 Harbor 设置开机启动
	https://blog.csdn.net/vah101/article/details/118607465
4.3 默认登陆账号:admin 密码:Harbor12345  默认是80端口
4.4 docker 登陆到Harbor
	docker login ip -u admin  回车输入密码
4.5 docker 上传镜像到本地镜像仓库
	1.修改配置文件
		 1. 修改/etc/hosts
		 	自己ip  harbor.io #最好不要写harbor,随便定义
		 2. 停掉docker、docker-compose、harbor,修改/etc/docker/daemon.json,修改/harbor/harbor.cfg(有些是.yml)
			[root@harbor-28 harbor]# docker-compose down -v
			[root@harbor-28 harbor]# vi /etc/docker/daemon.json
			{
				 "insecure-registries":["harbor.io"]
			}
			[root@harbor-28 harbor]# vi harbor.cfg
   				hostname= harbor.io #只修改这一项
		 3.重启
			[root@harbor-28 harbor]# ./prepare
			[root@harbor-28 harbor]# systemctl daemon-reload && systemctl restart docker
			[root@harbor-28 harbor]# docker-compose up -d
	2.在Harbor 网页上admin账号登陆,创建一个项目huk  这个是必须的
	3.打tag包 
		docker tag  harbor.io/huk/新的镜像名:版本  
			harbor.io 表示ip地址,前面配置的,也就是Harbor地址
			huk是项目名称
	4.docker login harbor.io -u admin  登陆输入密码
	5.docker push harbor.io/huk/新的镜像名:版本  
4.6 参考文档
	https://blog.csdn.net/succing/article/details/122772799

5.harbor 设置自动启动 开机重启

https://blog.csdn.net/u012751272/article/details/118859114

6.linux 开放端口

https://blog.csdn.net/qq_33088807/article/details/122088273
systemctl status firewalld.service  (查看防火墙开启还是关闭)
sudo firewall-cmd --list-all		(可以查看端口开放情况)

firewall-cmd --zone=public --query-port=3306/tcp(查看某个端口的开放情况,返回yes或no)

1.stop firewalld.service
2.start firewalld.service
3.firewall-cmd --add-port=8080/tcp --permanent(打开8080端口、如果是mysql就打开3306端口)
4.firewall-cmd --reload 
5.firewall-cmd --list-all
posted @ 2023-05-12 16:39  致力于工作  阅读(2)  评论(0编辑  收藏  举报