目录
- 引出
- Docker是啥?
- Docker是啥?
- Docker VS 虚拟机
- 1.特性优势
- 2.资源优势
- Docker的架构
- Docker常用命令
- (0)docker run
- (1)docker ps
- (2)docker stop + 容器名称
- (3)docker ps -a
- (4)docker restart/start
- (5)docker rm + 容器名称
- (6)docker image ls
- (7)docker search 镜像名称
- (8)docker pull 镜像名称
- (9)docker logs 容器名称
- (10)docker inspect 查询容器内部的ip地址
- (11)docker exec进入容器内部
- 附录:把容器名字改一下
- Linux的centos中安装docker
- 删除之前的docker后安装
- docker常见问题
- 1.容器中没有linux命令
- 2.容器中下载缓慢
- 3.IPv4转发已禁用问题
- 总结
引出
1.认识docker,docker和虚拟机对比;
2.docker的架构,客户端,镜像,容器,仓库;
3.docker常用的命令,docker exec,inspect,ps;
4.Linux安装docker,更换镜像源,ipv4转发开启;
Docker是啥?
Docker是啥?
Docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署。
Docker利用容器(Container)来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看成是一个简易版的Linux环境(包括ROOT用户权限、进程空间、用户空间、网络等)和运行在其中的应用程序。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker的英文翻译是”搬运工“的意思,他搬运的东西就是我们常说的集装箱Container,Container 里面装的是任意类型的App,我们的开发人员可以通过Docker 将App变成一种标准化的、可移植的、自管理的组件,我们可以在任何主流的操作系统中开发、调试和运行。
简单的理解,docker就是一个软件集装箱化平台,就像船只、火车、卡车运输集装箱而不论其内部的货物一样,软件容器充当软件部署的标准单元,其中可以包含不同的代码和依赖项。
按照这种方式容器化软件,开发人员和 IT 专业人员只需进行极少修改或不修改,即可将其部署到不同的环境,如果出现的故障,也可以通过镜像,快速恢复服务。
Docker VS 虚拟机
1.特性优势
Docker | VMware | |
---|---|---|
虚拟化 | 轻量级虚拟化(只虚拟出来容器所需要的资源,软件层面) | 完全虚拟化(虚拟化硬件) |
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生 | 5%左右损失 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 一般几十台 |
隔离性 | 进程级别 | 系统级(更彻底) |
操作系统 | 主要支持Linux | 几乎所有 |
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统 |
2.资源优势
Docker的架构
Client(客户端):是Docker的用户端,可以接受用户命令和配置标识,并与Docker daemon通信。
Images(镜像):是一个只读模板,含创建Docker容器的说明,它与操作系统的安装光盘有点像。
Containers(容器):镜像的运行实例,镜像与容器的关系类比面向对象中的类和对象。
Registry(仓库):是一个集中存储与分发镜像的服务。最常用的Registry是官方的Docker Hub 。
Docker常用命令
Docker command line
拉取MySQL的docker镜像流程
(0)docker run
docker run
- -i:以交互模式运行容器
- -t:为容器重新分配一个伪输入终端
- —name :容器名称
- —privileged: 设置容器公开权限(默认为true)
- -p :映射端口 linux端口: 容器内置端口(mysql默认端口为3306)
- -v : linux挂载文件夹/文件和容器内路径的映射
- -e: 容器的环境变量(设置mysql默认用户名&密码)
- -d: 后台运行容器,并返回容器ID
docker run -it \
--name mysql_3306 \
--privileged \
-p 3306:3306 \
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
(1)docker ps
ps——process进程
(2)docker stop + 容器名称
停止容器
(3)docker ps -a
查看启动过的容器,所有容器
(4)docker restart/start
(5)docker rm + 容器名称
删除指定的容器
docker image rm + 镜像名字
先停止后删除
(6)docker image ls
查看镜像的名称
(7)docker search 镜像名称
从docker库中搜索docker的镜像
根据版本搜索 docker search mysql:5
(8)docker pull 镜像名称
从docker库中拉取镜像
(9)docker logs 容器名称
docker 日志,查看容器运行时的日志
(10)docker inspect 查询容器内部的ip地址
docker inspect mysql_3306
进行流处理,管道,过滤
docker inspect mysql_3306 | grep IP
[root@localhost ~]# docker inspect mysql_3306 |grep IPA
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAMConfig": null,
"IPAddress": "172.17.0.2",
(11)docker exec进入容器内部
docker exec -it 容器名称 bash
进入容器实质上也是进入了一个linux环境。
docker exec
- -it:以交互模式运行容器 ,为容器重新分配一个伪输入终端。
- bash: bash(GNU Bourne-Again Shell)是最常用的一种shell(运行在终端的互动程序)。
附录:把容器名字改一下
问题:进入容器显示bash-4.4的解决方案
进入容器后输入以下两个命令
cp /etc/skel/.bashrc /root/
cp /etc/skel/.bash_profile /root/
退出容器后再次进入
bash-4.4# cp /etc/skel/.bashrc /root/
bash-4.4# cp /etc/skel/.bash_profile /root/
bash-4.4# exit
exit
[root@localhost 3306]# docker exec -it mysql_3306 bash
[root@ed5404afb218 /]#
Linux的centos中安装docker
删除之前的docker后安装
停止docker服务
[root@localhost ~]# systemctl stop docker
查询安装的docker服务
[root@localhost ~]# yum list installed |grep docker
删除docker的组件
[root@localhost ~]# yum -y remove docker-*
删除docker文件夹
[root@localhost ~]# rm -rf /var/lib/docker
安装docker
使用yum安装docker不适用官方的安装方式,发现:官方的安装方式容器中的内容不完整。
[root@localhost ~]# yum install -y docker
启动docker
[root@localhost ~]#
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker -v
Docker version 1.13.1, build 7d71120/1.13.1
image-20230608120142044
设置docker在linux启动时启动
systemctl enable docker
配置本地镜像库
从网络获取docker镜像太慢,设置阿里云的镜像库。
修改:/etc/docker/daemon.json文件
[root@localhost ~]# vim /etc/docker/daemon.json
[root@localhost ~]# cat /etc/docker/daemon.json
{
"registry-mirrors":["https://ung2thfc.mirror.aliyuncs.com"]
}
[root@localhost ~]# systemctl restart docker
docker常见问题
1.容器中没有linux命令
当使用linux命令时,显示“command not found”。
问题描述
解决方案
(1)更新容器中linux
apt-get update
root@1aba593b6c47:/etc/mysql# apt-get update
(2)安装程序
apt-get install 命令
root@130dddbf14ee:/# apt-get install vim
2.容器中下载缓慢
问题描述
运行apt-get update 时显示错误:
Err:1 http://deb.debian.org/debian buster InRelease 。
解决方案
编辑 /etc/docker/daemon.json, 修改dns
[root@localhost ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://ung2thfc.mirror.aliyuncs.com"]
}
{
"dns":["114.114.114.114","8.8.8.8"]
}
重启docker
[root@localhost ~]# systemctl restart docker
单纯下载缓慢,输入下面命令解决
输入下面命令,设置镜像源
vim /etc/docker/daemon.json
{"registry-mirrors":["https://ung2thfc.mirror.aliyuncs.com"]}
cat /etc/docker/daemon.json
3.IPv4转发已禁用问题
问题描述
解决方案
[root@localhost master]# vim /etc/sysctl.conf
navicat连接mysql的docker时报错:
该问题可能是ipv4端口没开导致的
放开ipv4端口,重启网络
vim /etc/sysctl.conf
systemctl restart network
可以重启一下docker,选做
删除容器,再重新启动一下docker
systemctl restart docker
docker ps -a
docker rm mysql
docker run -itd --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 docker.io/mysql
总结
1.认识docker,docker和虚拟机对比;
2.docker的架构,客户端,镜像,容器,仓库;
3.docker常用的命令,docker exec,inspect,ps;
4.Linux安装docker,更换镜像源,ipv4转发开启;