时间:2023-07-15 23:42:02 | 来源:网站运营
时间:2023-07-15 23:42:02 来源:网站运营
如何理解Docker,半小时教你入门实战,看完这篇就够了!:一个物理机上安装操作系统,然后直接运行我们的软件。也就是说你电脑上直接跑了一个软件,并没有开虚拟机什么的,资源极其浪费。
虚拟机都不开,直接上物理机部署应用,那成本能不高嘛
硬件资源没有合理利用
每次迁移都要重新安装一模一样的运行环境等
一个物理机上虚拟化出来多个虚拟机,每个虚拟机上进行安装操作系统,然后在虚拟机上直接运行我们的软件。比如阿里云、腾讯云等云服务器都是虚拟机。
一个物理机上创建多个虚拟机,每个虚拟机的ip都不同,一个软件可以在不同虚拟机上进行部署。
每个虚拟机都由独立分配的内存磁盘等硬件资源,通过Hypervisor分配。
随时随地都能在一个物理机上开出新的虚拟机。成本也低。
假设我们的应用程序只有几KB,或者几十MB,但是却要在虚拟机上安装一个几百兆的操作系统来跑。
如果没看懂就粗浅的理解为:你用shell命令写了个脚本,下载jdk,配置环境变量、下载tomcat、部署你的程序等等这一套流程,然后交给运维,运维直接sh xxx.sh就完事了,环境什么的都是你给的,不会出现环境不一致的情况。你肯定有疑问:我虚拟机上有jdk了,你给我的脚本里再安装jdk肯定不行啊,容器化技术可以让资源隔离,互不影响。
那肯定啊,开发者将环境和程序打包给运维,运维直接执行就完事了。
废话,包都是开发者给的,开发者难道把一个应用程序打两个不同的包给运维?
加粗了,自行体会。
加粗的一句话已经解释的明明白白了,不明白就等于没看懂上面的。
基于Centos7的安装。
官方由于是国外的,所以不推荐,推荐下面的安装方式。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
device-mapper-persistent-data lvm2是干嘛的?
docker要想数据存储就必须要安装这两个,这两个是为了docker做数据存储用的。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fastsudo yum -y install docker-ce
sudo service docker startdocker version
好不容易安装完了,先爽一把helloworld。
docker pull hello-worlddocker run hello-world
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
(6)大功告成docker pull xxx
来测试下了,速度贼拉快。docker pull
下来的镜像。docker pull
命令就是先去本地仓库检查是否有这个镜像,没有的话就去远程仓库拉取镜像放到本地仓库。镜像都是别人打包好的应用程序。直接搜索就行,不用注册登录。
docker run
的请求会交给docker daemon处理,docker daemon会给这个镜像开辟一个新的容器。再比如客户端发起docker pull
命令也是交给docker daemon,docker daemon去检查本地仓库有没有,本地仓库没有的话docker daemon去远程仓库拉取镜像放到本地仓库。docker build
给docker daemon,docker daemon收到请求后会构建镜像放到本地仓库。docker pull
命令给docker daemon,docker daemon收到命令后会优先检查本地仓库是否存在此镜像,若不存在则去远程仓库拉取镜像并放到本地仓库,若存在则不走远程仓库。docker run
命令给docker daemon,docker daemon收到命令后会启动一个新的容器,所以一个镜像可以有多个容器,只要我run一次就会产生一个新的容器出来。docker pull tomcat
完整命令是:docker pull 镜像名<:tags> 从远程仓库拉取镜像。如果没写:tags则代表是latest版本。如下图
docker pull tomcat:8.5.55-jdk8-openjdk
这个tag是从如下地方获取的docker images
镜像有了该启动容器玩玩了。
docker run tomcat
完整命令是:docker run 镜像名<:tags> 这里没指定tag就代表是latest, docker images
可以查看镜像tags等信息。
docker pull
、docker images
、docker run
,将tomcat正常启动了,默认端口8080,问题来了,我怎么访问呢?它是在docker里的,不是我宿主机的8080端口,这就需要做一个端口映射。宿主机和docker启动的tomcat的端口映射。docker run -p 8000:8080 tomcat
也就是启动参数里多加个-p参数,-p参数用于端口映射,前面是宿主机端口,后面是容器端口。
# 先用docker ps命令查看启动的容器docker ps
# 进入容器的tomcatdocker exec -it ac1c3d62b75d /bin/bash
格式:docker exec [-it] 容器id 命令执行
exec:在对应容器中执行命令
-it:采用交互方式执行命令
ls -l
查看目录webapps.dist
文件夹,这个文件夹是原有tomcat的主页面,我们可以删除webapps,然后mv命令将webapps.dist
改为webapps,等自动部署完在访问网页就正常了。mv后tomcat部署稍微慢点,等1-2min,在访问就行。
现在问题:ctrl+c就结束进程了。
# -d 参数即可docker run -p 8000:8080 -d tomcat
-p 端口映射
-d 后台启动
docker exec -it ac1c3d62b75d /bin/bash
执行cat /proc/version
,可以发现带了个红帽系统
java -version
这个还用验证?
docker create tomcat# 查看容器状态,会发现是createddocker ps -a
docker start 8c4a21f47b8f# 查看容器状态,会发现是up, up就对应running,代表运行中docker ps
# docker stop命令会让容器进入exit状态,这个不等于paused,paused没有演示的必要。docker stop 8c4a21f47b8f# rm删除容器。也就对应deleted状态docker rm 8c4a21f47bf
关键词:实战,入门,理解,小时