docker容器化
Docker
1.什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。
那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发者,我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。
2.为什么要使用Docker
2.1更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2.2更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
2.3更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
2.4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的
https://docs.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package 旧版wsl
https://www.runoob.com/docker/windows-docker-install.html 安装过程
下载Docker Desktop 重启后管理员身份运行 PowerShell,
docker run hello-world
打开虚拟
顺序:
1、以管理员身份运行 PowerShell,执行以下命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
2、安装Docker
3、安装wsl_update_x64.msi
https://docs.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package 旧版wsl
4,在运行docker run hello-world
运行上面下面就有这个
5、安装之后,可以打开 PowerShell 并运行以下命令检测是否运行成功:
docker run hello-world
注册dockerhub
https://hub.docker.com/
常用命令
使用命令docker images,查看镜像列表
docker images
查看具体的镜像:windows中的命令:
docker image ls | findstr hello-world
mac&linux的命令:
docker image ls | grep hello-world
仅仅展示精心的ID信息(image id)
docker images -q
看镜像的详细的信息:
docker image inspect feb5d9fea6a5(镜像的ID信息)
查看所有镜像的详细信息:
docker image inspect $(docker images -q) #mac和linux的命令
docker stop 容器ID:停止容器
docker rm 容器ID 删除容器记录
docker ps -a 查看容器得记录
docker rmi 镜像ID 删 除镜像
删除镜像:
1、依据镜像的名称删除
2、依据镜像的ID来删除
二、前提条件:正在运行中的镜像,需要删除,需要做的步骤具体为:
1、在容器中停止它的运行:docker stop 容器ID
2、在容器中删除它的记录:docker rm 容器ID
3、根据镜像的名字或者ID来删除该镜像
Docker rmi 镜像ID
Docker rmi 镜像名称
docker images
docker image ls | findstr hello-world
docker images -q
docker image inspect imageID
获取镜像
获取docker的镜像后,就可以运行对应的docker的镜像信息了,运行的命令为run,具体指令总结如下:
• -it:开启交互式的命令
• --rm:容器退出时删除容器的记录信息
• --name:指定容器的名称
• -d:后台方式运行容器
docker stop 容器ID:停止容器
docker rm 容器ID
要删除镜像必须得先停下此时占用,停止运行才能删除
我们可以把镜像看作类,把容器看作类实例化后的对象。
可以理解的是:Docker镜像毕竟是镜像,属于静态的内容;而Docker容器就不一样了,容器属于动态的内容。动态的内容,大家很容易联想到进程,内存,CPU等之类的东西。的确,Docker容器作为动态的内容,都会包含这些。
导入导出就是另存为和打开
异地的办公模式,那么场景就是:异地的开发同学写完代码后,然后把自己的
应用程序打包成镜像,打包成镜像后,发送给测试同学,测试同学运行镜像(前
提是把镜像导入中docker中),镜像运行成功后,等于环境部署成功,可以测试
通许可以开始测试了。
开发同学操作:
1、写代码
2、写的代码打包成镜像
3、把镜像导出
4、发送给测试同学
测试同学操作:
1、接收开发发送的镜像
2、导入镜像到docker中
3、运行镜像
4、开始测试
开发同学操作:
1、写代码
2、写的代码打包成镜像
A、执行代码的依赖环境(比如写的代码需要在Linux上执行,那么就需要Linux的环境)
B、执行代码本身的环境(比如java的环境需要jdk)
3、把镜像导出
docker image save centos:7.8.2003(被导出的镜像) -o >/Users/liwangping/Desktop(导出的镜像被存储的目录)
4、发送给测试同学

运行镜像,不存在则下载
docker run 镜像名 这个过程可以理解为:把镜像文件创建成docker容器的一部分,然后再进行启动。
容器内的进程必须是前台运行状态,否则容器直接退出。docker run 镜像名 如果镜像文件在本地不存在,
就会在线去docker hub下载该镜像的资源信息,如:
docker run -it --rm
centosUnable to find image 'centos:latest' locally
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
[root@5d97dbdba0cd /]# exit
exit
docker的容器启动成功后,使用docker ps -a可以查看容器的ID记录信息。
容器命令
在运行镜像中,后面需要带一些指令的信息,这些指令的信息具体汇总为如下:
• -d:后台运行
• -it:交互式命令
• --rm:容器挂掉后自动被删除
• --name:给容器起一个名字
• -p:端口映射
容器信息的查看:
#linux
docker ps -a | grep 容器ID
#windows
docker ps -a | findstr 容器ID
#查看容器的详细的信息
docker container inspect 容器ID

这个编译器理解为windows记事本
查看日志
docker logs id
docker logs -f 容器ID:查看实时的日志文件内容,如果想退出,就需要按ctrl+c
docker logs 容器ID:一次性查看所有的日志文件内容
docker logs -f 容器ID:查看实时的日志文件内容,如果想退出,就需要按ctrl+c
docker logs 容器ID:一次性查看所有的日志文件内容
Linux的系统
docker logs 容器ID | tail -10:查看最新的10行日志文件(日志文件最后的内容)
docker logs 容器ID | head -10:查看日志文件最前面的10行
docker logs --tail 行数 容器ID 产看几行记录
容器提交commit
容器的提交解决了什么?
解决了容器中安装的环境,但是必须在容器退出前要进行提交,如果没有提交,那么退出后,安装的环境等于再次安装。
退出vim的步骤:
1、按下esc键
2、按下shift+:
3、:后面输入q!,按下回车键,就会退出
容器提交的步骤:
1、运行镜像,到容器后
2、在容器里面进行具体的操作(比如安装软件,比如搭建环境等等),但是容器千万不能退出
3、打开一个新的控制台,查看到容器的ID
docker ps -a
4、对容器进行提交
docker commit 容器ID 镜像新的名称 如下:
docker commit 1ec76b093759 centos_vim_mysql
sha256:845081b52332f6e6ba6809d06703691b57cdddff4c0c286825097187a6b86e9e
5、待容器提交成功后,之前的容器进行退出
6、查看所有的镜像,就会发现存在centos_vim_mysql的镜像
7、运行新的镜像文件,如:
docker run -it --rm centos_vim_mysql
在新的控制台提交
#修改镜像的名称
docker image tag 003d0acb5726(镜像的ID) centos_vim(镜像的名称) #修改镜像的名称
1、如果经常名称是none ,那么就不会复制,直接把none的镜像名称修改为新的镜像名称
2、如果镜像名称不是none,那么在此修改,等价于复制
查看端口
1、获取nginx的镜像:docker pull nginx
2、端口映射:-p 80(宿主机的端口):80(容器里面的端口)
3、后台方式运行容器:
docker run -d -p 80:80 nginx
eede621c9dd01419b85c999dcacb6386790db9a2dbcc3287d020d3cd148738d6
4、查询容器的端口:docker port 容器的ID
docker port eede621c9dd0
80/tcp -> 0.0.0.0:80
5、下面演示容器的停止和启动
docker port eede621c9dd0
80/tcp -> 0.0.0.0:80
docker stop eede621c9dd0
eede621c9dd0
docker port eede621c9dd0
docker start eede621c9dd0
eede621c9dd0
docker port eede621c9dd0
80/tcp -> 0.0.0.0:80
容器运⾏后,可以启动容器,也是可以停⽌容器,以及查看容器的端⼝信息,下⾯还是以nginx的镜像信息为案 例,来演示下这部分。