15 Docker.txt

UP 返回
1. 相关概念
	  Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性
	  Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。
	Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
	  Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)

2. 安装与启动
  2.1 使用提供的虚拟机 	D:\EnvironmentDevs\品优购虚拟机服务器\docker-test		(root / itcast)
	此虚拟机网络为nat模式,开始挂载后会发现没有ip地址且无法ping通外网,需要处理一下。
	关于nat模式的虚拟机如何ping通外网,参考:https://www.cnblogs.com/whx7762/p/11002575.html
	开始按照要求的设置一直无法ping通baidu,且无法连接secureCRT,后来虚拟网络编辑器还原了默认配置,并将分配的网段重新改成之前的突然就好了,可以看到还原以后设置都清空了照样可以连接外网,不明原因。以后如果按照上述设置仍然不可用可以试一下
	记住resolv.conf中一定要有和虚拟机网关对应的nameserver
	!!@@202208183.png_466_329_1@@!!	!!@@202208184.png_517_42_1@@!!	!!@@202208181.png_761_678_1@@!!	!!@@202208182.png_520_460_1@@!!

	Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。
	这里将Docker安装到CentOS上。建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新

	使用yum命令在线安装docker		此虚拟机已经安装好了,所以可以直接查看版本
		yum install docker
		!!@@202208212.png_598_375_1@@!!
		docker -v		查看Docker版本
	启动与停止Docker
		systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。
		启动docker:systemctl start docker
		停止docker:systemctl stop docker
		重启docker:systemctl restart docker
		查看docker状态:systemctl status docker
		开机启动:systemctl enable docker
			!!@@202208213.png_799_141_1@@!!
		查看docker概要信息:docker info
		查看docker帮助文档:docker --help

  2.2 镜像操作
	列出docker下的所有镜像:docker images
		!!@@202208214.png_513_508_1@@!!		!!@@202208215.png_865_154_1@@!!
		REPOSITORY:镜像所在的仓库名称
		TAG:镜像标签
		IMAGE ID:镜像ID
		CREATED:镜像的创建日期(不是获取该镜像的日期)
		SIZE:镜像大小
		这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
		为了区分同一个仓库下的不同镜像,Docker提供了一种称为标签(Tag)的功能。每个镜像在列出来时都带有一个标签,例如12.10、12.04等等。每个标签对组成特定镜像的一些镜像层进行标记(比如,标签12.04就是对所有Ubuntu12.04镜像层的标记)。这种机制使得同一个仓库中可以存储多个镜像。--- 版本号
		我们在运行同一个仓库中的不同镜像时,可以通过在仓库名后面加上一个冒号和标签名来指定该仓库中的某一具体的镜像,例如docker run --name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash,表明从镜像Ubuntu:12.04启动一个容器,而这个镜像的操作系统就是Ubuntu:12.04。在构建容器时指定仓库的标签也是一个好习惯
	docker search 镜像名称		从网络中查找需要的镜像,可以通过该命令搜索。centos就是一个没装啥的镜像,可以自己安装一些东西。而其他的镜像都是在此镜像上安装了对应的环境生成的
		!!@@202208216.png_1079_367_1@@!!
	
	拉取镜像:docker pull centos:7		
	国内访问docker hub比较慢,推荐使用ustc的docker镜像加速器。修改步骤如下:		https://lug.ustc.edu.cn/wiki/mirrors/help/docker/
		编辑文件:vi /etc/docker/daemon.json  		如果该文件不存在就手动创建
		输入内容:			此虚拟机已经修改了该文件
			{
				"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
			}
		重启docker服务,如果重启docker后无法加速,可以重新启动OS。通过docker pull命令下载镜像

	删除镜像
		docker rmi $IMAGE_ID:删除指定镜像
		docker rmi `docker images -q`:删除所有镜像	这其实是两个命令,执行docker images -q可以看到列出所有的docker镜像,然后将该信息作为参数传给rmi去删除。`符号是键盘上1左边那个键
			!!@@202208218.png_865_207_1@@!!

  2.3 容器操作
	容器查看:
		查看正在运行容器:docker ps
		查看所有的容器:docker ps –a
		查看最后一次运行的容器:docker ps –l
		查看停止的容器:docker ps -f status=exited
	创建与启动容器:docker run			相关参数解释如下
		-i:表示运行容器
		-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
		--name :为创建的容器命名。
		-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
		-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
		-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
	创建交互式容器并取名为mycentos:docker run -it --name=mycentos centos:7 /bin/bash		交互式容器是指创建后直接进入该容器。/bin/bash是指命令解释器,即创建容器后就执行该语句,这样才能进入容器的命令行界面
		!!@@202208219.png_1041_145_1@@!!
	退出容器:exit		退出以后回到宿主机的命令行,容器自动关闭。同样的镜像可以创建多个容器,但是名称不能重复,即使之前的容器已经退出了
		!!@@2022082110.png_973_132_1@@!!

	创建守护式容器:docker run -di --name=mycentos2 centos:7		对于一个需要长期运行的容器,可以创建一个守护式容器。此处的name仍然不能与之前的重复
	登录守护式容器:docker exec -it container_name (或者 container_id)  /bin/bash			exit退出时,容器不会停止
		!!@@2022082112.png_1079_292_1@@!!

	启动已运行过的容器:docker start $CONTAINER_NAME/ID			▶注意是之前已经创建过了的
	停止正在运行的容器:docker stop $CONTAINER_NAME/ID
		!!@@2022082113.png_1111_184_1@@!!

	将文件拷贝到容器内:docker cp 需要拷贝的文件或目录 容器名称:容器目录
	将文件从容器内拷贝出来:docker cp 容器名称:容器目录 需要拷贝的文件或目录			容器之间是不允许直接进行拷贝文件的
		!!@@2022082114.png_625_409_1@@!!
	目录挂载:docker run -di -v /usr/local/myhtml:/usr/local/mh --name=mycentos2 --privileged=true centos:7
		在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去影响容器
		上面-v参数中,前面是宿主主机被映射的目录,后面是容器对应的目录。如果宿主映射的目录中含有多级目录,容器中去访问对应的目录会出现权限不足,因为CentOS7中的安全模块selinux把权限禁掉了,需要添加参数  --privileged=true  来解决挂载的目录没有权限的问题,这样容器就可以访问了
	查看容器IP:docker inspect mycentos		会显示很多信息,其中有一项IP地址:"IPAddress": "172.17.0.3"。可以通过格式化来只显示ip信息:docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos
	删除容器:docker rm $CONTAINER_ID/NAME		只能删除停止的容器。删除所有容器:docker rm `docker ps -a -q`

3. 部署应用
  3.1 MySQL部署
	docker pull mysql		拉取MySQL镜像	此虚拟机已经有了
	docker images
	docker run -di --name pinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql		创建mysql容器
		将宿主机的33306端口映射到容器的3306,-e可以指定环境变量,这里指定mysql的root密码为123456
	docker exec -it pinyougou_mysql /bin/bash
	mysql -u root -p
		登录以后,可以在本地通过navicat连接到docker的mysql
		!!@@2022082115.png_558_313_1@@!!		通过端口映射,我们可以连接宿主机的33306端口连接到docker的mysql
	在navicat中执行pinyougou的建库语句
	docker inspect pinyougou_mysql		查看到ip地址为172.17.0.4
  3.2 Tomcat部署
	docker pull tomcat:7-jre7		7-jre7是tomcat的镜像标签。可以在docker images中看到,此步省略,虚拟机已存在
	put -r D:\EnvironmentDevs\upload\cas		将cas单点登录的目录上传到宿主机
	mv cas/ /usr/local/myhtml		移动到myhtml目录下,后面这个文件夹用来做容器映射。用editplus修改一下cas配置文件中连接数据库的ip地址为MySQL容器
		!!@@202208222.png_1365_632_1@@!!
	docker run -di --name=pinyougou_tomcat -p 9000:8080 -v /usr/local/myhtml:/usr/local/tomcat/webapps --privileged=true tomcat:7-jre7
		创建容器用于部署单点登录系统(CAS)  -p表示地址映射。运行以后Tomcat自动启动,在浏览器中访问 http://192.168.47.130:9000/cas/login 即可看到登录页,根据库中的用户表,可以通过 lijialong / 123123 登陆成功,说明Tomcat连上了mysql容器
		!!@@202208221.png_1176_99_1@@!!
  3.3 Nginx部署
	docker pull nginx		此步省略,虚拟机已存在
	docker run -di --name=pinyougou_nginx -p 80:80 nginx		创建Nginx容器。浏览器访问 http://192.168.47.130/ 即可进入nginx页面
	docker cp pinyougou_nginx:/etc/nginx/nginx.conf nginx.conf		从容器拷贝配置文件到宿主机,方便后面配置修改。官方的nginx镜像的配置文件nginx.conf 在/etc/nginx/目录下
		修改nginx.conf 的配置,添加反向代理(注意):
			!!@@202208229.png_1348_665_1@@!!
	docker cp nginx.conf pinyougou_nginx:/etc/nginx/nginx.conf		修改后的配置复制回去
		登录容器可以看到配置文件已经改了:
			!!@@202208224.png_898_696_1@@!!
	docker restart pinyougou_nginx		因为修改了配置,重启容器
	设置本地host的域名指向,添加 192.168.247.135 passport.pinyougou.com。浏览器输入访问 passport.pinyougou.com/cas 即可进入登录页面
		!!@@202208228.png_566_211_1@@!!
  3.4 Redis部署
	docker pull redis		此步省略,虚拟机已存在
	docker run -di --name=pinyougou_redis -p 6379:6379 redis			创建Redis容器
	docker ps -l		-l可以查看最后一个创建的容器
	redis-cli -h 192.168.47.130		在本地redis客户端即可连接成功

4. 备份与还原
	docker commit pinyougou_nginx mynginx		将容器保存为镜像。pinyougou_nginx是容器名称,mynginx是新的镜像名称。这样当前容器的一些修改就被存进去,可以给别人用,别人就不用重新用hub上的镜像再弄一遍了
	docker images			可以在里面看到刚才保存的容器
	docker  save -o mynginx.tar mynginx			镜像备份。-o 输出到的文件,执行后ls可以看到生成了一个tar文件
	docker rmi mynginx					先删除该镜像
	docker load -i mynginx.tar				镜像恢复。可以看到又通过tar文件还原了该镜像









DOWN 返回