Docker的入门级理解,通过一个简单实例体验

Docker架构

(官方文档:https://docs.docker.com/get-started/overview/

上图现在看不懂不要紧,往下看↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 

概念理解

Docker做为一种开放的快速、持续部署平台已经火了很长一段时间了,无论是使用哪种语言,使用docker必会大大提高开发者效率。

从运维说起

       虽然从运维说起,但是与开发有着紧密联系。从前程序直接运行在实体机或虚拟机上,代码需要打包成jar包、war包,然后java -jar xxx.jar运行。这样所有项目可能运行在同一台机器上,相互影响(端口冲突,磁盘占满)。后来出现了Vmware虚拟机,给每个项目组或者部门建一个虚拟机,在一定程度上做了隔离,不同的虚拟机之间互不影响,但是还是会存在多个应用共享同一台虚拟机的情况,毕竟资源有限,而且管理太多虚拟机对运维同学不太友好。

       Docker出现了

        Docker 也是一种虚拟化技术,比vmware更轻量快速,使用方便。

       官方安装文档: Get Docker | Docker Documentation 安装很方便

        支持Mac、Windows、Linux

 如果把docker类比vmware,那运行在vmware上的一个个虚拟机就可以类比为docker的容器,在vmware添加一个虚拟机通常需要一个windows或者linux的镜像,同样运行一个docker的容器也需要一个镜像。

镜像:

镜像是一个只读的程序模版,可以传入命令让其运行起来。比如我们装系统时用windows的镜像,vmware上新建虚拟机时也需要系统镜像。docker镜像也可以这么理解。通常镜像是基于另外的镜像创建的,加上额外的自定义配置。例如基于ubuntu 镜像,加上apche web server和你自己的应用(例如java程序)以及应用需要的配置(例如applicaiton.yml)。

你可以自己制作镜像,推送到注册中心,这样其他人可以拉取你的镜像,也可以上注册中心找找有没有现成的镜像可以用。

官方镜像注册中心 dockerhub: Docker Hub

  试试搜索mysql,redis啥的,有官方的镜像

容器:

容易是一个镜像的运行实例,比如上面的mysql镜像,run起来就是一个mysql容器的实例,可以提供数据库服务。容器有创建、启动、停止、删除等命令,默认情况下,容器与其他容器,容器与宿主机都是隔离的,也可以把宿主机的网络、存储挂载至容器,就像vmware一样,容器销毁时,没有持久化的状态数据会一起销毁。

主要的几个命令:

docker pull xxxxxxx  拉取镜像

docker run xxxxxx   使用镜像运行一个容器

docker build xxxxx   自定义生成一个镜像

docker push  xxxx  将自定义的镜像推送至镜像注册中心

举个实例体验一下

我是windows环境:

docker安装好之后,执行下面的命令可以看到docker 的版本

PS C:\Users\a> docker --version
Docker version 20.10.8, build 3967b7d

1. 拉取镜像

在dockerhub搜索mysql,点击官方镜像

 点击tag标签,下拉可以看到镜像的各个版本,最新的tag是latest,点击一下右边那个框框那里,命令会自动复制

 在命令行执行命令,镜像会拉取到本地

PS C:\Users\a> docker pull mysql:latest
latest: Pulling from library/mysql
a10c77af2613: Pull complete                                                                                             b76a7eb51ffd: Pull complete                                                                                             258223f927e4: Pull complete                                                                                             2d2c75386df9: Pull complete                                                                                             63e92e4046c9: Pull complete                                                                                             f5845c731544: Pull complete                                                                                           bd0401123a9b: Pull complete                                                                                             3ef07ec35f1a: Pull complete                                                                                             c93a31315089: Pull complete                                                                                             3349ed800d44: Pull complete                                                                                             6d01857ca4c1: Pull complete                                                                                             4cc13890eda8: Pull complete                                                                                             Digest: sha256:aeecae58035f3868bf4f00e5fc623630d8b438db9d05f4d8c6538deb14d4c31b
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

 稍微等一下,镜像拉取完成后,执行下面命令可以看到本地的镜像

PS C:\Users\a> docker  images
REPOSITORY                                                    TAG                           IMAGE ID       CREATED         SIZE
mysql                                                         latest                        b05128b000dd   46 hours ago    516MB

2. 运行容器

 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -itd mysql:latest

 --name 指定容器的名称,可以不填

-e 容器的环境变量,这里是配置Mysql的root密码

-i (interactive)交互式 

-t (terminal) 终端

-d (daemon) 后端模式

-p 端口映射,第一个3306是宿主机端口,第二个3306是容器内部端口,这样访问宿主机3306端口会映射给容器内部的3306端口

docker ps 查看当前运行的容器,可以看到容器ID,容器使用的镜像,启动命令,创建时间,运行状态,端口映射,名称

3.使用容器提供的服务

执行"docker exec -it  容器ID bash"进入容器内部,容器ID可以只写前三位,会自动识别。

进入容器内部后,执行mysql创建数据库test。

 使用mysql客户端连接数据库

 创建表test_table

 回到命令行,可以看到表已经有了

 一个docker 运行的mysql服务就创建好了。

下一步:

给自己的代码打镜像并推送到注册中心;

建立私有的镜像注册中心;

dockerfile的定义;

使用docker-compse;

docker 和 k8s的关系;

CI/CD

有空再补.....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值