docker 入门

为什么会出现docker

​ 我们把一个项目看作是一桌饭菜,我们的一个个服务可以看成是主菜,其他的环境配置像是配菜。主菜再好吃,配上了不合适的配菜,这个一桌子的饭菜也不会很优秀。两次相同的主菜在不同的配菜面前也会不一样。 那我们如果要还原这个一桌饭呢? ------这个就是类似于docker的东西,即将环境进行“打包”。

​ docker的解决的痛点就是解决运维和开发在运行环境差异,

在这里插入图片描述

上图,上部分是传统的开发,即开发人员只需要给运维人员一个jar包项目,运维人员就需要通过文档等将环境进行搭建。从运行项目。

下部分是docker下的开发,我们通过打包的方式将环境进行包装,运维只需要使用docker镜像就可以实现项目部署。

docker有什么特点

我们从docker的logo开始看:

在这里插入图片描述

docker的logo是一个鲸鱼上面有很多的箱子。通过之前提到的项目发布的过程,将项目的核心功能和环境打包,变成一个开箱即用的东西。我们可以把这个东西看做是一个小集装箱,所有的集装箱都一拖一这个鲸鱼。这个鲸鱼就相当于我们真实的运行环境。

简答的说:docker可以将不同的项目已独立的形式进行封装,从而实现每个运行的项目之间的相互独立。

相互独立的项目有什么用?

  1. 每个项目都有自己虚拟化出来的空间,这就意味着如果项目A崩了,仅仅影响A项目的空间,并不会对其他的项目造成冲击。-----------------隔离性

  2. 我们引入微服务的思想,一个项目不同的功能访问压力不同,不同时间访问的同一功能访问的压力也不同。我们假设一个场景,某某网站进行活动,活动开始时,由于人流量太多超乎意料,这时候我们怎么扩容?已经运行的项目由于端口的冲突不能同时启动。这是会报漏一个问题:微服务虽然可以实现调节系统在要求下的功能扩容,但是对于突发的情况我们的扩容是有上限的。如果我们可以通过一个虚拟化技术,运行一个功能从而实现快速扩容岂不是很理想。--------------------独立性,即每个docker容器运行起来都是一个完整的服务,我们只需要改变整个完成服务对外的接口即可快速扩容。如下图

在这里插入图片描述

我们通过docker的镜像可以生成很多的子项目,子项目的访问接口都是80,但我们只要将子项目的80接口映射到服务器的其他接口,这样即便是相同的容器也可以任意扩容。

  1. 提到虚拟化我们就避不开docker和虚拟机,两个相同点都是独立运行的,上面可以跑不同的东西;不同的是一VMware为例,一个虚拟机启动起来时间太长,同时太消耗资源,而且需要很多的资源去虚拟底层硬件。这样就会造成很多的资源被浪费了。我们需要一种轻量级的容器化技术。

在这里插入图片描述

小结:docker可以提供一种相互独立的、快速部署的、轻量级容器化的服务。同时消除项目运行环境差异导致的项目“水土不服”的情况。

docker的安装

docker的官网

linux 下安装(以下指令不用记,只需要复制粘贴就好)

我们刚买的阿里云:

# 初始化阿里云的基本操作
# 更新内核
yum update

#更新yum
yum install -y yum-utils device-mapper-persistent-data 1vm2

开始安装docker

# 删除旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                
# 安装环境
#安装gcc 的环境
yum install -y gcc
yum install -y gcc-c++

yum install -y yum-utils
#配置镜像源 配置阿里的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker 引擎

# 更新镜像地址
yum makecache fast
# docker-ce 社区版本, docker-ee 企业版本
yum install docker-ce docker-ce-cli containerd.io

查看docker -v

在这里插入图片描述

到此我们的docker就安装完毕了,注意以上的指令都不用记,用的时候复制粘贴就好。

通过systemctl start docker,启动docker镜像。

使用阿里的镜像加速:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fqnxqcst.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker

使用docker

运行我们的传统代码 helloworld

# 我们执行了helloworld的程序
[root@ubw ~]# docker run hello-world

# 没有在本地找到helloworld
Unable to find image 'hello-world:latest' locally

# pull 从lib 获得了id为0e03bdcc26d7 的镜像 附带了相关信息
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete 
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest
# hello docker 看到这个消息就表示我们docker安装成功了了
Hello from Docker!
This message shows that your installation appears to be working correctly.

#一个helloworld docker做了下面的动作: ----来自百度翻译 略略略
#一。Docker客户端联系了Docker守护进程。
#二。Docker守护进程从Docker Hub中提取了“hello world”图像。
#三。Docker守护进程从运行生成当前正在读取的输出的可执行文件。
#四。Docker守护进程将输出流传送到Docker客户端,后者将其发送、、

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
    
# 通过docker run -it XXXX bash进入docker 
# 这里 我们提一下-it就是用交互模式运行,运行ubuntu 里面的bash
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
 
# dockerhub 就和GitHub一样是一个社区
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
 
#docker文档
For more examples and ideas, visit:
 https://docs.docker.com/get-started/

总的来说:docker首先在本地寻找helloworld,没找到就去docker仓库里找,这时候是开启了守护线程,将docker仓库的helloworld下载下来给我们返回了。

总结一下docker的运行流程:

在这里插入图片描述

Docker默认的目录地址

[root@kuangshen ~]# cd /var/lib/docker
[root@kuangshen docker]# ls
builder   containers  network   plugins   swarm  trust
buildkit  image       overlay2  runtimes  tmp    volumes

docker的基本使用

docker 的通用使用方式 docker --help

查看docker的镜像

docker images

查看docker的容器、

docker ps -a

在这里插入图片描述

入门我们要先弄懂这几个事儿:怎么得到-----怎么用-----怎么管理

docker镜像操作
怎么得到镜像:

docker的镜像可以当做是一个项目

在这里插入图片描述

类比GitHub的操作。

以下的指令的扩展都可以通过–help来查看

查找docker的镜像有哪些:

docker search XXX 

#条件搜索 星星数不小于5000
docker search mysql --filter=stars=5000

#这里去dockerhub去找 还有文档会很详细的

在这里插入图片描述
在这里插入图片描述

镜像下载

docker pull XXX
#这个默认的是lastest
#通过:添加版本号
docker pull mysql:5.7

在这里插入图片描述

删除镜像:

docker rmi XXXX(镜像号)

#一把删完
docker rmi $(docker images -aq)

在这里插入图片描述

我们发现helloworld删除失败,因为这个镜像产生的容器还在运行,我们通过-f 进行强制删除

docker rmi -f XXXX

在这里插入图片描述

docker 容器操作

通过docker run --help 进行查看

# 常用的指令一览
-d #后台运行
--name # 命名
-p #端口映射
-P# 大P 随机暴露端口
-v #卷挂载
-i #交互模式运行,进入容器
-t #交互模式运行,分配终端。进入容器

进入我们自己下载的linux

docker run -it --name mycentos centos

在这里插入图片描述

这个就是简单的linux系统,不过有很多的指令没有。

退出来以后看看容器 -a是所有容器

docker ps -a

在这里插入图片描述

发现我们的centos已经关闭了。

这个就是在我们没有人使用容器的时候就会推出,类似我们的关闭一样,我们可以用快捷键将容器挂起,Ctrl + p + q。

# 如果我们想要进入已经在运行的容器 这个是另开了一个客户端
docker exec -it imageId/name /bin/bash
# 这个是进入现在正在运行的窗口
docker attach imageId

在这里插入图片描述

#将docker里面的文件复制出来
#          将容器的  home下的test-in-docker文件 copy到 宿主机的home下
docker cp mycentos:/home/test-in-docker /home

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值