首页 > 其他分享 >docker 学习

docker 学习

时间:2023-05-12 16:44:53浏览次数:37  
标签:容器 run harbor 学习 -- 镜像 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

标签:容器,run,harbor,学习,--,镜像,docker
From: https://www.cnblogs.com/hu-kang/p/17394476.html

相关文章

  • docker 容器中 ip addr 出现 bash: ip: commandnot found
    一、服务器中输入命令#启动tomcat容器别名tomcat1dockerrun-d-P--nametomcat1tomcat#进行tomcat1容器dockerexec-ittomcat1/bin/bash二、输入ipaddripaddrbash:ip:commandnotfound三、解决办法安装工具iproute2#我的服务器是centos的yumi......
  • 学习日记——初识CSS
    1.初识CSS①定义:级联样式表,用于网页的修饰②应用:主要应用于网页的美化工作③发展:1996CSS1.0→2004CSS2.0→2010CSS3.0④优势:内容和表现分离(HTML和Css分离)网页的表现统一,容易修改丰富的样式,使得页面的布局更加灵活减少网页的代码量,增加网页的浏览速度,节省网络带宽运用独立于页......
  • 把ChatGPT调教成机器学习专家,以逻辑回归模型的学习为例
    大家好我是章北海mlpy看到一个蛮有意思的项目,可以把ChatGPT调教成导师https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor可以根据你选择的学习难度、学习方向帮你制定学习计划我用“如何学习逻辑回归模型”测试了一下,感觉还不错。完整聊天记录如下Zhang:{“ai_tutor”:{......
  • docker 安装mysql
    一、拉取镜像#拉取镜像dockerpullmysql#或者dockerpullmysql:latest#执行版本dockerpullmysql:5.7#以上两个命令是一致的,默认拉取的就是latest版本的#我们还可以用下面的命令来查看可用版本:dockersearchmysql 二、查看镜像使用以下命令来查看是......
  • 对于生下来只通过短视频学习的小孩来说,他还需要识字么?
    春节虽然已经过完,不过儿子的寒假还有最后一周,所以这周基本还是慢慢启动工作的状态,闲聊一个话题。从信息内容的供需看,最近几十年,产能明显越来越大,于是,从供不应求逐渐到供过于求,消费者(需求方)地位提升,供给方更需努力促进供需匹配,这个努力体现在两个方面,一是触达通路,二是内容形式。触达......
  • centos7断电重启后docker无法启动的其中一种情况
    一、发现问题在一个很久没用docker的虚拟机上想跑一个docker容器,然后发现没启动,通过systemctlstartdocker启动直接报错:Jobfordocker.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatusdocker.service"and"journalctl-xe"for......
  • [学习笔记+做题记录] 数位 DP
    一、数位DP你说的对,但是数位DP是用于解决一种数位统计类似的问题,往往数据范围很大,比如\(10^9,10^{12},10^{18}\)甚至更大,这种DP一般需要记录当前考虑到第几位,是否贴上界/下界,以及一些题目里的东西,需要具体题目具体分析。二、HDU3652-B-numberhttps://acm.hdu.ed......
  • window docker nginx容器 创建容器,把本地目录可以映射到nginx容器中
    在Windows环境下,您可以按照以下步骤创建一个映射了本地目录的Nginx容器:1.首先,创建一个本地目录,例如`C:\nginx`。2.使用以下命令启动Nginx容器,并将本地目录映射到容器中:```shdockerrun--namemy-nginx-p8080:80-vC:/nginx:/usr/share/nginx/html:ro-dnginx......
  • python_uiautomator2学习002控制命令
    一、连接设备importuiautomator2asu2#一个设备时可简写,多个设备时添加设置号参数,单引号内的值为设备序列号d=u2.connect('24cc1cc1')二、应用操作#启动指定应用d.app_start("com.example.app")#启动指定应用,启动前停止此应用d.app_start("com.example.app",stop=......
  • 服务器docker上部署python项目
    1.docker准备python环境与项目代码1.1查看docker内所有镜像://查看正在运行的镜像sudodockerimages//查看所有镜像sudodockerimages-a1.2查看docker内所有容器://查看正在运行的容器sudoduckerps//查看所有容器sudodockerps-a1.3docker安装anaconda镜像......