Docker

1. 概述

1.1. Docker简述

Docker是一个虚拟机,但是他是在虚拟设备上直接运行应用,少了一层虚拟操作系统:
在这里插入图片描述
所以他相对虚拟机,更加轻便,更快,性能损耗更少。
应用都是运行在app上的,所以安装一些应用,可以直接以打包的方式,拖下来就用。
比如jdk,和一套完整的应用方案等,拖来来就可以直接使用,非常方便。
比如一套应用,像java啊tomcat啊等。所以像mysql,nginx等,用这种方式就是可以直接的

Docker本身是一个服务,需要独立的安装。
安装好后,就可以单独的使用容器,容器容器就是制作好的容器包,做好后随时用。

Docker有几大问题,我们需要弄清除:
安装,镜像使用,镜像制作,仓库。

1.2. 关于docker的几个概念

Docker既然是虚拟机,那么就有镜像。
镜像就是把当前运行的系统的某一个点的情况,序列化下来,或者放到磁盘上,或者放到仓库中等等。就是一个镜像。

镜像是静态的,就是代表某个时刻,把系统快照下来。

Docker将会运行启动镜像。一旦运行启动,相当于就是顺着这个系统的这个点继续运行了。概念上,被启动继续运行的就是容器。
所以,容器,是由镜像创建的。
容器,是真正在跑的虚拟机了,是动态的,可以创建,停止,启动等。

当然一个镜像可以创建多个容器。

2. 安装

官网:https://www.docker.com/,但是安装跑这里https://docs.docker.com/
安装不慌docker不需要下载包,用yum安装。
看官网,介绍即可:
在这里插入图片描述

2.1. 首先要卸载老版本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.2. 设置和下载包

直接设置:

sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

或者换另外一种方式,直接来:

cd /etc/yum.repos.d/

然后用官网上的地址直接下载

wget https://download.docker.com/linux/centos/docker-ce.repo

2.3. 安装

官网是这样的:

yum install docker-ce docker-ce-cli containerd.io

但实际上,应该可以直接安装的

yum install docker-ce

但实际上,应该可以直接安装的

顺利的话,直接安装就好了
但不顺利的话就要折腾了。

2.4. 安装错误情况

首先有可能会出现:

Problem: package docker-ce-3:20.10.12-3.el8.x86_64 requires containerd.io >= 1.4.1, but none of the

对,缺少:containerd.io
那就直接安装:

yum install -y containerd.io

安装这个不顺利的话游回出现这个问题:

Problem: problem with installed package podman-1.0.0-2.git921f98f.module_el8.0.0+58+91b614e7.x86_64

这个是因为系统里面本身就有一个podman
要先卸载掉:

yum erase podman buildah

卸载完,再安装container.io

yum install -y containerd.io

这个时候,就可以顺利安装了
安装完再安装docker

yum install docker-ce

搞定了。
另外,安装完后,再运行docker镜像的时候,会报错:

docker: Error response from daemon: cannot start a stopped process: unknown

这个时候,要安装

yum install -y libseccomp-devel

2.5. 启动

启动服务

systemctl start docker

开机默认启动

systemctl enable docker

验证

docker info

2.6. 配置镜像服务地址

服务默认是从https://hub.docker.com/拉取,有时会很慢,这个时候就要改成国内的镜像。
vi /etc/docker/daemon.json
内容如下:

[root@localhost docker]# cat /etc/docker/daemon.json 
{
    "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com","https://hub.docker.com"]
}

修改完后,重启:

systemctl restart docker

docker info查看一下当前的配置是否生效了
在这里插入图片描述

2.7. centos镜像yum的修复以及网络工具安装

镜像一个操作系统,yum不能用很郁闷的,yum是因为centos被移除,暂时不知道什么原因。
所以要进行修复。
修复原理,另外一篇文章也有:
到 cd /etc/yum.repos.d下面
rm CentOS-AppStream.repo CentOS-Base.repo CentOS-Extras.repo CentOS-PowerTools.repo CentOS-centosplus.repo
注意一下文件名,不一定都是一个文件名哈,有可能是CentOS-Linux-xxx的命名方式的。
然后:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-8-reg.repo
就搞定了

安装网络:
yum install net-tools -y
这样就可以使用ifconfig 查看当前的ip地址了。

3. Docker网络

3.1. Docker的四种网络类型

host模式
这种应该适合我的。就是无网络隔离,无新建虚拟网卡。虚拟机完全共用宿主机的一切网络。

container
这种模式比较奇葩,就是使得新建的容器和之前的某个容器共用网络

none
其实也是网桥模式,只不过以切都要自己手动配置,手动指定IP地址

Bridge网桥模式
也是默认模式,虚拟出新的网卡,用网桥作隔离。

3.2. Docker Bridge网络原理

Docker创建的时候其实是使用了虚拟网络,网桥等技术组成网络的:
在这里插入图片描述
如上图,新建一个容器,相当于就是在容器里面和外面增加了一个虚拟网络。然后这个虚拟网络,放置在一个命名空间中。
然后把网桥创建在这个命名空间中。网桥的一端链接虚拟网络,另外一端链接物理网卡。
我们看看一下:
Docker容器中的网卡信息:
在这里插入图片描述
容器内部eth0就是
在这里插入图片描述
看到没,这里docker0就是网桥。
下面vethxxxx(数字)就是另外一端的虚拟网卡。
观察一下ip地址,网桥会给容器里面的虚拟设备分配一个虚拟的ip地址。

另外我们可以用traceroute命令查看和跟踪实际的路由情况。
当然这个要先安装:
yum install -y traceroute

4. 使用

4.1. 概述

Docker使用就是把docker的虚拟机拉起。
虚拟机就是安装好的应用,很方便。有三个特性特别要注意:

  1. 绑定端口
    虚拟机可以通过端口映射将虚拟机内部的端口映射到外面,从而达到应用内部统一监听一个端口,而外包可以映射成不同的端口,灵活的在各个机器上使用
  2. Mount磁盘,可以将宿主机器上的一个磁盘路径,直接映射到虚拟机中的一个指定位置。这样更灵活的使用文件系统,同时也可以保存IO的信息。
  3. 伪终端,打开容器后,可以通过命令,直接进入到容器当前的虚拟机中。

4.2. 查看现成的官方镜像

到这里来:
https://hub.docker.com/
进去后,直接可以搜索
在这里插入图片描述

4.3. 日常查看

docker info 查看当前docker的相关信息
docker ps 可以查看当前的容器有一些参数
docker ps -a查看所有容器
docker ps -l 查看最近新启动的容器。
docker image ls 查看有哪些镜像
docker history [image] 查看[image]镜像的构建历史
docker inspect [image] 查看某个镜像的详细信息

4.4. 启动容器

docker start 容器id

docker run -d 容器名

docker exec -it <运行id> bash 可以进入到容器内部,这里面t其实就是伪终端的意思

4.5. 重启后自动重启

–restart=always

–restart还有其他参数:
no - 容器退出时,不重启容器;

on-failure - 只有在非0状态退出时才从新启动容器;

always - 无论退出状态是如何,都重启容器;

4.6. 其他命令

docker pull [image] 下载镜像
docker image prune 清除那些悬挂着的镜像,加-a会删除所有没有和容器关联的镜像
docker save [image] -o xxx.tar 将一个镜像导出成一个文件
docker load -I xxx.tar 将一个导出的镜像文件内导出到镜像中

docker stop [CONTAINER ID] 停止容器
docker rm [CONTAINER ID]删除容器

docker image rm [镜像名] 删除镜像

4.7. 常用参数说明

-i: 交互式操作
-t: 终端
-d 后台运行
-p 容器端口映射 (宿主机端口:容器端口)

5. docker-compose

5.1. 概述

我理解,docker-compose就是通过配置yml把多个容器启动关联统一起来一起管理。

5.2. 安装

先到官网下载:
https://github.com/docker/compose/releases
下载下来后,改个名字:docker-compose
然后,把文件放置到:/usr/local/bin/docker-compose
加权限:
chmod +x /usr/local/bin/docker-compose
创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
$ docker-compose –version

6. 实战案例

6.1. 从网上一键安装mysql的主从库

概述
Mysql的一个主从库安装,非常迅速的将主从库安装上去。
这个安装是私人做的,他在gitee下:
https://gitee.com/lookingdreamer/SPPPOTools/tree/master
当然,慕课网培训的一个人,把他复刻到GitHub上了:
https://github.com/lly835/SPPPOTools
当然,这个案例必须安装了docker-compose
安装
将内容克隆下来,进入下面目录:
在这里插入图片描述
这里的README.md写的非常清楚:
修改setup.sh中的密码:
在这里插入图片描述
然后执行:

/bin/bash setup.sh install [宿主机IP]

这里注意几点:

  1. 宿主机器一定是内外的ip,不能是127.0.0.1
  2. 这里可能会出现要给错误就是mysql报一个错:
    runc: symbol lookup error: runc: undefined symbol: seccomp_api_get
    是这是缺少头文件或者相关的库之类的问题,运行如下命令解决:
yum install libseccomp-devel

6.2. 安装redis

先下载

docker pull redis

然后启动

docker run -d -p 6379:6379 redis

6.3. 安装rabbitmq

下载镜像

docker pull rabbitmq:management

启动镜像

docker run -dit --name myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management

说明:
下载时management标签的含义是下载的镜像包含manage模块。包含web管理页面。
安装时:
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin指定manage模块的用户名和密码,我执行完后是报错的,也可以完全省略参数。
如果不指定默认用户名密码,系统会有默认用户名密码:guest guest
所以,可以用下面命令。

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5673:5672 rabbitmq:management

现在可以通过访问http://linuxip:15672,访问web界面

6.4. 安装mysql

https://hub.docker.com/_/mysql?tab=tags
这里看到mysql的相关版本信息。

docker pull mysql:latest

或docker pull mysql:指定的tag(版本号)

docker run -itd --name mysql-azkaban -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.38

mysql:5.7.38
这个是版本号,和前面pull的保持一致,或者不要pull直接执行。不写就是最新版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值