栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

docker 学习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker 学习

1 docker

阿里云 加速申请地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
申请的docker加速资源:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker


- 官方文档地址:https://www.docker.com/get-started
- 中文参考手册:https://docker_practice.gitee.io/zh-cn/
docker优势:
- `在开发的时候,在本机测试环境可以跑,生产环境跑不起来`

  这里我们拿java Web应用程序举例,我们一个java Web应用程序涉及很多东西,比如jdk、tomcat、mysql等软件环境。当这些其中某一项版本不一致的时候,可能就会导致应用程序跑不起来这种情况。Docker则将程序以及使用软件环境直接打包在一起,无论在那个机器上保证了环境一致。
  **优势1:  一致的运行环境,更轻松的迁移**
- `服务器自己的程序挂了,结果发现是别人程序出了问题把内存吃完了,自己程序因为内存不够就挂了`
  这种也是一种比较常见的情况,如果你的程序重要性不是特别高的话,公司基本上不可能让你的程序独享一台服务器的,这时候你的服务器就会跟公司其他人的程序共享一台服务器,所以不可避免地就会受到其他程序的干扰,导致自己的程序出现问题。Docker就很好解决了环境隔离的问题,别人程序不会影响到自己的程序。
  **优势2:对进程进行封装隔离,容器与容器之间互不影响,更高效的利用系统资源**
- `公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器`
  在没有Docker的情况下,要在几天内部署几十台服务器,这对运维来说是一件非常折磨人的事,而且每台服务器的环境还不一定一样,就会出现各种问题,最后部署地头皮发麻。用Docker的话,我只需要将程序打包到镜像,你要多少台服务,我就给力跑多少容器,极大地提高了部署效率。
  **优势3: 通过镜像复制N多个环境一致容器**

Docker是不携带操作系统的,所以Docker的应用就非常的轻巧。另外在调用宿主机的CPU、磁盘等等这些资源的时候,拿内存举例,虚拟机是利用Hypervisor去虚拟化内存,整个调用过程是虚拟内存->虚拟物理内存->真正物理内存,但是Docker是利用Docker Engine去调用宿主的的资源,这时候过程是虚拟内存->真正物理内存。
传统虚拟机Docker容器
磁盘占用几个GB到几十个GB左右几十MB到几百MB左右
CPU内存占用虚拟操作系统非常占用CPU和内存Docker引擎占用极低
启动速度(从开机到运行项目)几分钟(从开启容器到运行项目)几秒
安装管理需要专门的运维技术安装、管理方便
应用部署每次部署都费时费力从第二次部署开始轻松简捷
耦合性多个应用服务安装到一起,容易互相影响每个应用服务一个容器,达成隔离
系统依赖需求相同或相似的内核,目前推荐是Linux
2 docker安装:
#在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装,另外可以通过 `--mirror` 选项使用国内源进行安装:执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定(stable)版本安装在系统中。
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
#启动docker
$ sudo systemctl enable docker
$ sudo systemctl start docker
#创建docker用户组
$ sudo groupadd docker
#将当前用户加入docker组
$ sudo usermod -aG docker $USER
测试docker安装是否正确
$ docker run hello-world


centos7.x安装docker:
卸载原始docker
$ sudo yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine
安装docker依赖
$ sudo yum install -y yum-utils 
  device-mapper-persistent-data 
  lvm2
设置docker的yum源
$ sudo yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo
安装最新版的docker
$ sudo yum install docker-ce docker-ce-cli containerd.io
指定版本安装docker
$ yum list docker-ce --showduplicates | sort -r
$ sudo yum install docker-ce- docker-ce-cli- containerd.io
$ sudo yum install docker-ce-18.09.5-3.el7 docker-ce-cli-18.09.5-3.el7 containerd.io
启动docker
$ sudo systemctl enable docker
$ sudo systemctl start docker
关闭docker
$ sudo systemctl stop docker
测试docker安装
$ sudo docker run hello-world



3 docker结构:

- `镜像:` 一个镜像代表一个应用环境,他是一个只读的文件,如 mysql镜像,tomcat镜像,nginx镜像等
- `容器:` 镜像每次运行之后就是产生一个容器,就是正在运行的镜像,特点就是可读可写
- `仓库:`用来存放镜像的位置,类似于maven仓库,也是镜像下载和上传的位置
- `dockerFile:`docker生成镜像配置文件,用来书写自定义镜像的一些配置
- `tar:`一个对镜像打包的文件,日后可以还原成镜像


docker运行流程:

docker配置阿里云镜像加速u8c1iywv:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker验证镜像加速是否生效:
docker info
安装完成辅助命令
		docker version	--------------------------	查看docker的信息
		docker info		--------------------------	查看更详细的信息
		docker --help	--------------------------	帮助命令
镜像命令:
# 1.查看本机中所有镜像
	docker images	--------------------------	列出本地所有镜像
		-a			列出所有镜像(包含中间映像层)
  	-q			只显示镜像id
eg: docker images -a
# 2.搜索镜像
	docker search [options] 镜像名	-------------------	去dockerhub上查询当前镜像
		-s 指定值		列出收藏数不少于指定值的镜像
  	--no-trunc	  显示完整的镜像信息
# 3.从仓库下载镜像
	docker pull 镜像名[:TAG|@DIGEST]	----------------- 下载镜像
	docker pull tomcat:8.0
# 4.删除镜像
	docker rmi 镜像名	--------------------------  删除镜像
		-f		强制删除

容器命令:
# 1.运行容器
	docker run 镜像名	--------------------------	镜像名新建并启动容器
    --name 					别名为容器起一个名字
    -d							启动守护式容器(在后台启动容器)
    -p 							映射端口号:原始端口号		 指定端口号启动
	例:docker run -it --name myTomcat -p 8888:8080 -d tomcat
   	 docker run -d --name myTomcat -P tomcat
# 2.查看运行的容器
	docker ps					--------------------------	列出所有正在运行的容器
	-a			正在运行的和历史运行过的容器
	-q			静默模式,只显示容器编号
# 3.停止|关闭|重启容器
	docker start   容器名字或者容器id  --------------- 开启容器
	docker restart 容器名或者容器id    --------------- 重启容器
	docker stop  容器名或者容器id 	    ------------------ 正常停止容器运行
	docker kill  容器名或者容器id      ------------------ 立即停止容器运行
# 4.删除容器
	docker rm -f 容器id和容器名     
	docker rm -f $(docker ps -aq)		--------------------------	删除所有容器
# 5.查看容器内进程
	docker top 容器id或者容器名 ------------------ 查看容器内的进程
# 6.查看查看容器内部细节
	docker inspect 容器id 		------------------ 查看容器内部细节
# 7.查看容器的运行日志
	docker logs [OPTIONS] 容器id或容器名	------------------ 查看容器日志
    -t			 加入时间戳
    -f			 跟随最新的日志打印
    --tail 	 数字	显示最后多少条
    eg: docker logs -f  容器id
# 8.进入容器内部
	docker exec [options] 容器id 容器内命令 ------------------ 进入容器执行命令
		-i		以交互模式运行容器,通常与-t一起使用
    -t		分配一个伪终端    shell窗口   bash 
    eg: docker exec -it 容器id bash
# 9.容器和宿主机之间复制文件
	docker cp 文件|目录 容器id:容器路径           -----------------   将宿主机复制到容器内部
	docker cp 容器id:容器内资源路径 宿主机目录路径  -----------------   将容器内资源拷贝到主机上
# 10.数据卷(volum)实现与宿主机共享目录
	docker run -v 宿主机的路径|任意别名:/容器内的路径 镜像名
		注意: 
				1.如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
				2.如果是别名则会在docker运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中
# 11.打包镜像
		docker save 镜像名 -o  名称.tar
# 12.载入镜像
		docker load -i   名称.tar
# 13.容器打包成新的镜像
	  docker commit -m "描述信息" -a "作者信息"   (容器id或者名称)打包的镜像名称:标签

dockerhub搜索镜像:

docker镜像版本信息:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/712785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号