Docker是一个虚拟机,但是他是在虚拟设备上直接运行应用,少了一层虚拟操作系统:
所以他相对虚拟机,更加轻便,更快,性能损耗更少。
应用都是运行在app上的,所以安装一些应用,可以直接以打包的方式,拖下来就用。
比如jdk,和一套完整的应用方案等,拖来来就可以直接使用,非常方便。
比如一套应用,像java啊tomcat啊等。所以像mysql,nginx等,用这种方式就是可以直接的
Docker本身是一个服务,需要独立的安装。
安装好后,就可以单独的使用容器,容器容器就是制作好的容器包,做好后随时用。
Docker有几大问题,我们需要弄清除:
安装,镜像使用,镜像制作,仓库。
Docker既然是虚拟机,那么就有镜像。
镜像就是把当前运行的系统的某一个点的情况,序列化下来,或者放到磁盘上,或者放到仓库中等等。就是一个镜像。
镜像是静态的,就是代表某个时刻,把系统快照下来。
Docker将会运行启动镜像。一旦运行启动,相当于就是顺着这个系统的这个点继续运行了。概念上,被启动继续运行的就是容器。
所以,容器,是由镜像创建的。
容器,是真正在跑的虚拟机了,是动态的,可以创建,停止,启动等。
当然一个镜像可以创建多个容器。
官网:https://www.docker.com/,但是安装跑这里https://docs.docker.com/
安装不慌docker不需要下载包,用yum安装。
看官网,介绍即可:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
直接设置:
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
官网是这样的:
yum install docker-ce docker-ce-cli containerd.io
但实际上,应该可以直接安装的
yum install docker-ce
但实际上,应该可以直接安装的
顺利的话,直接安装就好了
但不顺利的话就要折腾了。
首先有可能会出现:
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
启动服务
systemctl start docker
开机默认启动
systemctl enable docker
验证
docker info
服务默认是从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查看一下当前的配置是否生效了
镜像一个操作系统,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地址了。
host模式
这种应该适合我的。就是无网络隔离,无新建虚拟网卡。虚拟机完全共用宿主机的一切网络。
container
这种模式比较奇葩,就是使得新建的容器和之前的某个容器共用网络
none
其实也是网桥模式,只不过以切都要自己手动配置,手动指定IP地址
Bridge网桥模式
也是默认模式,虚拟出新的网卡,用网桥作隔离。
Docker创建的时候其实是使用了虚拟网络,网桥等技术组成网络的:
如上图,新建一个容器,相当于就是在容器里面和外面增加了一个虚拟网络。然后这个虚拟网络,放置在一个命名空间中。
然后把网桥创建在这个命名空间中。网桥的一端链接虚拟网络,另外一端链接物理网卡。
我们看看一下:
Docker容器中的网卡信息:
容器内部eth0就是
看到没,这里docker0就是网桥。
下面vethxxxx(数字)就是另外一端的虚拟网卡。
观察一下ip地址,网桥会给容器里面的虚拟设备分配一个虚拟的ip地址。
另外我们可以用traceroute命令查看和跟踪实际的路由情况。
当然这个要先安装:
yum install -y traceroute
Docker使用就是把docker的虚拟机拉起。
虚拟机就是安装好的应用,很方便。有三个特性特别要注意:
到这里来:
https://hub.docker.com/
进去后,直接可以搜索
docker info 查看当前docker的相关信息
docker ps 可以查看当前的容器有一些参数
docker ps -a查看所有容器
docker ps -l 查看最近新启动的容器。
docker image ls 查看有哪些镜像
docker history [image] 查看[image]镜像的构建历史
docker inspect [image] 查看某个镜像的详细信息
docker start 容器id
docker run -d 容器名
docker exec -it <运行id> bash 可以进入到容器内部,这里面t其实就是伪终端的意思
–restart=always
–restart还有其他参数:
no - 容器退出时,不重启容器;
on-failure - 只有在非0状态退出时才从新启动容器;
always - 无论退出状态是如何,都重启容器;
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 [镜像名] 删除镜像
-i: 交互式操作
-t: 终端
-d 后台运行
-p 容器端口映射 (宿主机端口:容器端口)
我理解,docker-compose就是通过配置yml把多个容器启动关联统一起来一起管理。
先到官网下载:
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
概述
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]
这里注意几点:
yum install libseccomp-devel
先下载
docker pull redis
然后启动
docker run -d -p 6379:6379 redis
下载镜像
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界面
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直接执行。不写就是最新版本