1.认识Docker、如何使用docker部署应用(从docker到k8s容器化云原生技术从零基础到实战)

发布于:2023-01-09 ⋅ 阅读:(288) ⋅ 点赞:(0)

认识Docker

1.认识Docker

1.1 Docker是干什么的?

Docker 提供了开发、打包、运行应用的平台,是基于Go语言实现的一个开源项目,通过对应组建的封装,分发,部署,运行等生命周期的管理,使用户的应用及其运行环境“一次镜像,处处运行”,其实是一个应用容器,类似于一个虚拟机。

其实用Docker部署一个应用程序轻松加愉快:首先使用Docker将应用程序及其所有依赖项打包成一个可运行的文件,也就是image镜像文件,可以将镜像文件发布到 Linux 机器或者Docker Hub,然后在服务器上使用该image镜像创建Docker容器实例就可运行啦~

这样的方式便于应用程序的交付部署,省去了以往在一个新环境中部署程序需要准备各种环境的安装及版本不一致导致的应用运行异常的问题,这样使用Docker真的很省心省力。

image.png

1.2 历史的演化

物理机时代 --> 虚拟机时代 --> 容器化时代

image.png

物理时代:

部署非常慢 • 成本很高 • 资源浪费 • 难于扩展与迁移 • 受制于硬件

image.png

虚拟化时代:

多部署 • 资源池 • 资源隔离 • 很容易扩展 • VM需要安装操作系统
image.png

容器化时代:

容器化技术比虚拟机更灵活,更小巧,更加便捷,更易于搭建环境和管理应用

image.png

容器化解决的问题:

image.png

标准化的应用打包:

image.png

容器化技术的应用场景:

标准化的迁移方式 • 统一的参数配置 • 自动化部署 • 应用集群监控 • 开发与运维之间的沟通桥梁
image.png

阿里/腾讯云的容器化应用:
image.png

Docker的发展
image.png

1.3 Docker的体系结构

docker是一个平台,是一个服务器CS架构。
image.png

image.png

容器与镜像

  1. 镜像: 镜像是文件,是只读的,提供了运行程序完整的数据,是应用程序的"集装箱"。
  2. 容器: 是镜像的运行环境,也可以看成是一个迷你的"linux操作系统" ,由 Docker负责创建,容器之间彼此隔离。

2.安装docker环境

2.1 安装Docker-Windows环境

标准化的应用打包
image.png

Win10下有专门的的Docker安装包,需要开启Hyper-V虚拟机,可以参考以下链接,这里不做过多阐述,我们更多的是讲解用Linux环境如何使用docker。

参考:https://copyfuture.com/blogs-details/2020021417322451750zg76qqbxzvzzq

2.2 安装Docker-Linux环境

以Linux CentiOS7服务器为列 使用yum下载其他插件,如果是其他Linux系统, 例如ubuntu等安装插件的命令不同,使用apt-get等命令

#安装yum插件
sudo yum install -y yum-utils 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 fast

#从阿里云镜像上下载docker ce是社区版
sudo yum -y install docker-ce

#启动服务
sudo service docker start

#查看版本
docker version

#设置开机自动启动docker,不然后面的程序即使你现在启动了,但是后面还是因为docker服务没启用而启动失败。
systemctl start docker && systemctl enable docker

3.实战:使用docker部署一个Hello-world应用

#1、docker pull hello-world ,从远程镜像仓库中拉取名为 hello-world 的镜像。
#2、docker images,查看镜像是否拉取成功
#3、docker run -p 9000:8080 hello-world,使用hello-world镜像创建容器并运行,其中-p 为指定格式=宿主机映射端口:容器应用启动端口,hello-world的应用启动端口是8080,然后我们现在linux上用9000端口进行映射到外网。
#4、docker ps -a命令查询已经部署的hello-world应用
#5、docker logs  容器ID 查看应用输出的日志
#6、docker run -p 9000:8080  -d  hello-world命令再次运行hello-word镜像

1、使用docker pull hello-world 命令 从远程镜像仓库中拉取名为 hello-world 的镜像。
image.png

2、使用docker images命令查看本地Linux服务器上拥有的所有镜像列表,包括拉取的和本地构建的镜像。
image.png

3、使用docker run -p 9000:8080 hello-world命令运行hello-word镜像创建一个hello-world容器应用,可以看到输出以下内容(Tips:如果端口已经被其他本地应用占用 ,请换另外一个宿主机端口)

image.png

4、使用 docker ps命令查询已经部署的hello-world应用(容器),可以发现并没有在正常的启动列表

至于为什么没有出现在这个列表是因为当容器内没有可以执行的命令 或者 命令和工作都执行完了会被docker自动停止容器,如果是我们平常的应用有启动命令会一直运行就不会被停止掉,hello-word容器是一个打印命令,输出第3步的信息后就完成了他的使命,所以当屏幕上输出日志后就被docker停止了。
image.png

5、使用docker ps -a命令,可以查看所有容器,包括停止或启动失败的容器

可以发现hello-world已经退出运行了,那么怎么解决呢? 其实很简单,只需将第3步的命令加上一个 -d参数即可,称为后台运行,守护状态运行,不会占用当前命令窗口主线程执行,,但是你会发现他的命令执行完了后还是会被停止掉。
image.png

6、使用docker run -p 9000:8080 -d hello-world 命令再次运行hello-word镜像

这里可以看出来和刚才不一样,没有了输出,因为现在是后台运行,不会占用当前命令窗口线程,当输出完信息后依然会被快速停止掉。但是一般我们自己部署的应用是不会被停止,除非启动报错。
image.png

使用docker ps 命令依然看不到刚才的容器,因为他已经被停止了,我们可以通过logs命令查看容器输出的日志

依然使用docker ps -a命令可以看到hello-world容器的ID,然后通过docker logs ID命令 查看该容器的所有日志。
image.png

可以看出容器ID是 a39033ad7a8e,然后使用docker logs命令查看容器的日志
image.png

可以使用docker start 容器ID 命令启动hello-world容器
image.png
可以看出容器启动后输出日志后就停止了

7、删除容器和镜像

删除容器:需要停止后删除容器

docker stop 容器ID/容器名

docker rm 容器ID/容器名

删除镜像:删除镜像前要先停止容器并 删除容器,否则会提示有容器在使用,但是也可以强制删除镜像,需要加上-f参数。

docker rmi 镜像名/镜像ID
image.png

4.本节常用docker命令

#查看docker版本和信息
docker --version
docker version
docker info

#拉取镜像
docker pull 镜像名
#查看镜像列表
docker images 
#创建容器
docker run hello-world     run = create & start
docker run -p 8000:8080 镜像名
#列出正常启动的容器
docker ps
#查看所有容器,包括停止或启动失败的容器
docker ps -a 
#停止应用容器
docker stop 容器编号ID
#重启停止的应用容器
docker restart 容器编号ID 
#删除容器
docker rm 容器编号ID
#删除镜像前 先删除容器
docker rmi  镜像编号ID
#查看容器运行实时日志
docker logs  –f –t 容器ID
#开机自动启动容器服务!如果不加这个参数,那么重启linux服务器,后者重启docker后,该容器不会自动启动。
#创建的时候添加参数
docker run –p 宿主机映射端口:容器应用启动端口 镜像名词  -d  --restart=always
#使用docker更新
docker update  --restart=always  容器ID