Docker安装使用

目录

一、安装Docker

1、win系统

2、wsl下

3、docker安装地址

二、Docker

1、概念

2、容器与虚拟机比较

2、docker能干嘛

3、docker三要素

1、镜像:类比于Java中的类模板

2、容器:类比于以镜像为模板创建的实例对象

3、仓库:

4、docker架构

5、镜像加速器

6、第一次运行docker—hello wrold

7、为什么docker比Java虚拟机快

8、docker常用命令

1、帮助启动类命令(Ubuntu下)

2、镜像命令

1、列出本地主机上的镜像(二选一)

2、显示本地所有镜像

3、只显示所有镜像的id

2、去仓库查找某一个镜像

3、下载镜像

4、查看镜像/容器/数据卷所占的空间

5、删除镜像

1、普通删除

2、强制删除

3、删除全部镜像(docker从入门到入狱)

9、docker的虚玄镜像是什么

10、容器命令

1、先把ubuntu拉下来

2、新建+启动一个容器

3、查看docker容器

4、退出容器

5、启动已经停止的容器

6、删除已经停下的容器

7、启动守护式容器(后台服务器)

8、查看容器日志

9、重新进入容器

10、将容器中的文件拷贝到本机目录下

12、导入和导出容器

Guide docker

1、docker镜像

镜像分层

2、容器commit成新的镜像


一、安装Docker


1、win系统

装好docker desktop

2、wsl下

①先确保电脑上的wls2装好了

②我们把将root用户设置为默认的用户,要不然很多权限受限

③wsl2装好之后,在ubutu中安装docker,步骤如下:

1、一键安装:

sudo curl -sSL https://get.daocloud.io/docker | sh

不要管它说的啥,等就行了,等装好了就行

2、启动docker服务

sudo service docker start

3、查看是否安装成功

sudo docker ps -a

④准备工作,在ubutu中安装gcc

命令:(注意是在root用户权限下,如果之前已经将root设置为默认的用户就没事)

sudo apt update
sudo apt install build-essential

然后打印一下gcc的版本:

gcc --version

⑤ubuntu报错解决

systemd类型的命令执行不了,我们换一种语法即可,对应下面的关系:

Docker安装使用_第1张图片

3、docker安装地址

地址: https://docs.docker.com/engine/install/centos/

(我装在ubuntu里了)


二、Docker


1、概念

解决的是开发能跑起来结果运维跑不起来的情况。实现系统平滑移植,容器虚拟化技术

软件带环境安装,我们将源码+环境+配置 打包成一个镜像文件。实现了从搬家到搬楼

docker理念:一次镜像,处处运行

类比CentOs7和VmWare–>docker就相当于VmWare,我们打包成的镜像文件就相当于CentOs7

Docker是基于Go语言实现的云开源项目,它的主要目标是build–Ship–Run anywhere,any app。也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的app能做到一次镜像,处处运行


2、容器与虚拟机比较

docker是一种容器虚拟化技术

1、传统虚拟机技术

传统虚拟机技术就是带环境安装的一种解决方案。它可以在一种操作系统中运行另一种操作系统。这种技术基于安装在著操作系统上的虚拟机管理系统(比如说VmWare),然后创建虚拟机(虚拟出各种硬件)

缺点是:占用资源多、步骤多、启动慢

Docker安装使用_第2张图片

2、容器虚拟化技术

linux容器不是模拟一个完整的操作系统(传统虚拟机技术)而是对进程进行隔离。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置,所以很轻量

Docker安装使用_第3张图片

3、比较

1.虚拟机虚拟出一套硬件,在其上运行了一个完整的操作系统

2.容器中大哥应用进程直接运行于宿主的内核,容器内没有自己的内核也没有硬件虚拟

3.每个容器之间相互隔离,容器之间进行不会相互影响。一台机器上可以跑多个容器


2、docker能干嘛

DevOps 开发运维——新一代工程师


3、docker三要素

1、镜像:类比于Java中的类模板

docker镜像(Image)就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。它相当于是一个root文件系统,比如官方镜像centos7就包含了完整的一套centos7最小系统的root文件系统。

docker镜像文件类似于Java的类模板,docker容器实例类似于Java中new出来的实例对象

Docker安装使用_第4张图片

2、容器:类比于以镜像为模板创建的实例对象

redis r1 = docker run镜像 
redis r2 = docker run镜像

就像鲸鱼背上的集装箱,就是一个容器实例

镜像像Java中的类,容器像Java中的对象。真正干活的,执行操作的,实际上是以镜像为模板new出来的容器。就像Java中真正执行功能的是对象而不是类。镜像是静态的,而容器是镜像运行时的实体,容器为镜像提供了一个标准的和隔离的运行环境。

可以把容器看作是一个简易版的linux环境运行在其中的个应用程序。也就是说每一个容器有两部分组成:

应用程序(eg:redis)
最小最核心赖以生存的linux内核文件(不需要的不加载)

3、仓库:

集中存放镜像文件的地方

类似于maven是存jar包的,github存git项目,dockerhub存放镜像文件

docker就是用来跑容器实例的地方,也就是容器运行载体或者称为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过镜像文件才能生成docker容器实例


4、docker架构

Docker安装使用_第5张图片

docker是一个Client - Server结构的系统,docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器

这个docker daemon是JUC并发中的一个知识点,表示的是后台守护进程

Docker安装使用_第6张图片


5、镜像加速器

配置镜像加速器的作用是减少之后超时的概率,要不然一直超时会很烦

在阿里云官网,控制台,弹性计算,容器镜像服务,镜像工具,镜像计算器,打开之后有一个加速器地址(每个人自己去创建一个个人实例,然后会获得自己唯一的加速器地址)

然后按照官网的教程去ubuntu下操作一下:

Docker安装使用_第7张图片


6、第一次运行docker—hello wrold

我们打开docker之后输入命令

docker run hello-wrold

最终的结果是:打印出一句hello from docker

当打印这一句话之后,我们的容器就卸载掉了,相当于在集装箱(Container)在鲸鱼背上过了一下

run语句的执行过程:

现在本地找,本地找不到去hub仓库中去找,找到就创建容器实例,找不到报错

Docker安装使用_第8张图片


7、为什么docker比Java虚拟机快

1、docker有更少的抽象层。docker不需要像虚拟机一样实现硬件资源虚拟化,运行在docker容器上的资源都是直接使用物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上更有优势

2、docker利用的是宿主机的内核,不需要重新加载一个操作系统内核


8、docker常用命令

1、帮助启动类命令(Ubuntu下)

启动docker服务

service docker start

  

2、镜像命令

1、列出本地主机上的镜像(二选一)

docker images

docker image ls
root@DESKTOP-3O3VVFP:~# docker images 
REPOSITORY    TAG     IMAGE ID     CREATED     SIZE 
hello-world latest feb5d9fea6a5 18 months ago 13.3kB 

root@DESKTOP-3O3VVFP:~# docker image ls 
REPOSITORY     TAG     IMAGE ID     CREATED     SIZE 
hello-world latest feb5d9fea6a5 18 months ago 13.3kB 

REPOSITORY 表示镜像的仓库源(tomcat、mysql) 
TAG 镜像的标签版本号(mysql想要5.7或者8.0,如果什么都不写就是lastest,表示最新的) 

2、显示本地所有镜像

docker image -a

3、只显示所有镜像的id

docker image -q

2、去仓库查找某一个镜像

docker search 某个xxx镜像的名字

Docker安装使用_第9张图片

NAME                                名字
DESCRIPTION                         描述            
STARS     							点赞数
OFFICIAL   							是否官方认证的
AUTOMATED							是否自动编译构建的

如果觉得罗列的太多,可以对结果进行限制,这条命令表示只展示结果的前五条(我们一般就是用第一条官方认证过的)

docker search --limit 5 redis

Docker安装使用_第10张图片

3、下载镜像

docker pull 某个镜像的名字[:Tag]

下载过程中:

Docker安装使用_第11张图片

下载之后看一下(docker images):

现在已经有了新的镜像装好了

4、查看镜像/容器/数据卷所占的空间

(看看鲸鱼有多累)

docker system df

Docker安装使用_第12张图片

5、删除镜像

1、普通删除

docker rmi 某个镜像的名字

我们先看一下现在有哪些image

然后docker rmi hello-world,发现报错了,原因是之前某个容器container跑过这个镜像,所以不能删

然后加一个 -f 表示强制删除,OK删掉了

2、强制删除

docker rmi -f hello-world

Docker安装使用_第13张图片

3、删除全部镜像(docker从入门到入狱)

docker rmi -f $(docker images -qa)

Docker安装使用_第14张图片

可以看到删之前剩个mysql,删之后啥也没了


9、docker的虚玄镜像是什么

仓库名和标签都是的镜像称为dangling image,也叫虚玄镜像

虚玄镜像的亚子:

Docker安装使用_第15张图片


10、容器命令

示例:在ubuntu上装了docker,在docker拉取ubuntu镜像(套娃)

1、先把ubuntu拉下来

pull

2、新建+启动一个容器

docker run [option] image 
docker run -it ubuntu /bin/bash

如图所示,我们可以看到,当把ubuntu跑起来之后,前面的标识符变了,原因是我们在docker上重新跑起来一套ubuntu操作系统,并且在命令最后一个位置我们加上了一个bash表示我们以bash的形式与这个ubuntu进行交互

然后我就可以像操作ubuntu一样操作了:

Docker安装使用_第16张图片

对于最后面的

这里要说一下run命令的option:

有三套常用的参数option:

-i:交互式操作,以交互模式运行容器

-t:终端,为容器重新分配一个伪输入终端

我们经常把t和i放在一起使用

–name= ZhiHuiGou

给现在要跑的系统起一个别名

-P:随机端口映射

-p:指定端口映射

-d:后台运行容器并返回容器ID

如果不会用命令怎么办:

docker run --help (效果如下)

Docker安装使用_第17张图片

3、查看docker容器

1、查看当前正在运行的docker容器:

docker ps

另开一个ubuntu终端,因为另一个在跑docker上的ubuntu

Docker安装使用_第18张图片

CONTAINER ID 容器ID 
IMAGE 镜像 
COMMAND 命令行 
CREATED 啥时候创建的 
STATUS 状态,正在跑吗 
PORTS 对外暴露的端口,ubuntu没有,但是如果现在跑的是redis,就有端口了6379 NAMES 
NAMES 刚刚说了run命令的一种option是--name,表示为container起一个新的名字,但是如果run的时候没写,那么系统就帮你写一个 

2、列出当前正在运行和历史上运行过的容器

docker ps -a

3、显示最近创建的n个容器

docker ps -n

4、显示最近创建的容器

docker ps -l

5、显示正在运行的容器的id

docker ps -q

4、退出容器

1、退出当前正在运行的容器

exit
ctrl+p+q

exit的方式退出容器会停止

ctrl+p+q的方式容器不停止

如图所示,从docker上的ubuntu的bash形式回到了我们自己的ubuntu上

Docker安装使用_第19张图片

5、启动已经停止的容器

找到容器的id:docker ps就可以看到container的id了

执行命令:

docker start 容器ID

Docker安装使用_第20张图片

6、删除已经停下的容器

docker rm 容器ID

不要用$引用全删掉,很刑

Docker安装使用_第21张图片

7、启动守护式容器(后台服务器)

前面启动的ubuntu是交互式的,会生成一个小黑框,守护式就是在后台悄悄跑

之前用-it开启了交互式的容器,现在将-it换成-d就可以启动守护式容器

我们用redis做示范

docker run -d ubuntu

启是启动过了,但是ps看一下发现容器已经退出了

这个是docker的机制问题,使用后台进程模式运行,导致docker前台没有运行的应用,这样容器觉得没有它的事情可做,就会自杀

redis一直跑不起来,-d和-it都跑不起来,差了一个博客,

8、查看容器日志

docker logs 容器ID

9、重新进入容器

1、exec命令

docker exec -it 容器ID bashShell

eg:

Docker安装使用_第22张图片

Docker安装使用_第23张图片

exec是进入某个运行的container,但是如果你要exec的容器没有处于运行的状态,那么会先把这个容器run起来然后再进入

2、attach命令

docker attach 容器ID

这两条命令的区别:

(不吃这碗饭,砸了这口锅)对于attach 直接进入容器启动命令的终端,不会启动新的进程。使用exit会终止容器

(不吃这碗饭,不砸这口锅)对于exec则是相当于在这个容器上打开了新的终端,使用exit命令不会终止容器

比如上跑了ubuntu的容器,使用exec相当于开了新的小黑框。而attach相当于打开原来的小黑框。

推荐使用exec命令,而不是attach,ctrl+p+q的时候不会退出container

一般情况下是使用-d将服务用后台的方式启动,然后再使用exec进入进行操作。比如说redis

10、将容器中的文件拷贝到本机目录下

命令:

docker cp 容器ID:容器内路径 目的主机路径

Docker安装使用_第24张图片

这个一般用来做备份,防止别人把我的容器删掉,导致数据没了

11、导入和导出容器

相当于将整个容器做了个备份

1、将容器导出:

docker export 容器ID>文件名称.tar

export导出容器的内容

2、将文件导入成为一个新的镜像

cat 文件名称.tar | 镜像用户/镜像名:镜像版本号

Guide docker

1、docker镜像

镜像分层

底层是联合文件系统,联合文件系统就是分层的文件系统,外边看是一个整体,其实可以分成不同的文件

docker的镜像需要分层,分层的目的是达到复用,比如ubuntu和centos,他们俩个有相同的linux内核,这部分可以置于底层,想用centos时,在上层添加centos的上层即可

docker的镜像层都是只读层,容器层时可写的。当容器启动时,一个新的可写层被加载到镜像的顶部,这一层被叫做容器层,容器层之下都叫做镜像层

Docker安装使用_第25张图片

2、容器commit成新的镜像

我们从仓库拉下来的都是最精简版的东西,比如说ubuntu系统,对于重要的功能,镜像里是有的。但是像vi编辑这种不重要的功能,拉下来的镜像里面是没有的。我们想让它有的话,可以。自己把拉下来的跑成一个Container,然后把Container给commit成一个新的镜像

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

看一下:

Docker安装使用_第26张图片

这里显示原始的ubuntu没有vi功能,我们在docker的ubuntu容器上执行两条命令,安装一下vim编辑

apt-get update
apt-get -y install vim

安装好了之后,再试一下vi能不能跑通,如图所示可以跑通,说明装上了

Docker安装使用_第27张图片

然后套公式执行命令

docker commit -m="add vim cmd" -a="cr" 容器ID 新镜像名称

Docker安装使用_第28张图片

 

你可能感兴趣的:(docker,容器,运维)