docker的基本管理
一、初识Docker(概述)
1、Docker是什么?
- 是一种轻量级的“虚拟机“
- 在linux容器里运行应用的开源工具
2、Docker与虚拟机的区别
虚拟机 | 容器 | |
启动时间 | 慢 | 快速 |
容量 | 大 | 小 |
系统 | 逻辑隔离 | 依赖于内核 |
安全性 | 强 | 弱 |
Docker是毫秒级别的启动
3、Docker的使用场景
- 打包应用程序简化部署
- 可脱离底层硬件任意迁移
例如:服务器从腾讯云迁移到阿里云
二、Docker的核心概念以及安装方式
(1)Docker核心概念
⚪镜像
- 一个面向Docker容器引擎的只读模板
⚪容器
- 从镜像创建的运行实例
⚪仓库
- 集中保存镜像的地方
(2)、CentOS安装Docker的两种方式
- 使用CURL获得Docker的安装脚本进行安装
- 使用YUM仓库来安装Docker
三、安装部署19版Docker
首先关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
1、安装依赖包
安装时要用在线源安装,这里我用的是阿里云的在线源
yum install -y yum-utils device-mapper-persistent-data lvm2
2、设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装Docker-CE
yum install -y docker-ce
systemctl start docker
systemctl enable docker
4、镜像加速
做了这一步之后,你下载镜像就不会出现卡死状态,反而速度会起飞
5、网络优化
vim /etc/sysctl.conf
#添加 net.ipv4.ip_forward=1
sysctl -p
service network restart
systemctl restart docker
四、docker中一些基础命令
1、查看docker版本
docker version
2、查找指定镜像
例如 我要查找nginx的镜像
docker search 关键字
3、查看镜像列表
docker images 仓库名称[:标签]
4、下载镜像
docker pull 仓库名称[:标签]
再次查看镜像列表
docker images
5、删除镜像
docker rmi 仓库名称[:标签] ## 删除nginx镜像
或
docker rmi 镜像ID号
也可以用ID镜像号进行删除
6、添加标签
docker tag 名称[:标签] 新名称[:新标签]
7、查看
docker images | grep nginx
可以配合grep进行搜索查看
8、存出镜像名为123存在当前目录下
docker save -o 123 nginx:latest
9、载入镜像
方法一:docker load < abcx
方法二: docker --input abc
五、容器命令
1、容器创建、查看容器
docker create [选项]镜像运行的程序
-i 让容器的标准输入保持打开
-t 让Docker分配一个伪终端
这里先下载一个centos7内核的镜像方便示例,内核镜像较小两百多兆
docker ps ## 查看运行中的容器
docker ps -a 查看全部容器
-a 列出所有的容器,包括未运行的容器
run命令
从没有镜像到生成一个运行的容器总结为三个步骤
1、下载镜像
2、创建容器
3、启动容器
但是在生产环境中是怎么方便怎么来
run命令会将他三合一
所以我用较多的是 run
举例:
docker run -d nginx /bin/bash
-d 是daemon 开启守护进程,这里不加-d是开启不了容器的
#简单操作
docker run 镜像标识|镜像名称[:tag]
#常用参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像标识|镜像名称[:tag]
选项:
-d:后台运行容器
-p:宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
--name 容器名称:指定容器的名称
--it 使用交互方式运行,进入容器查看内容
-P:指定容器端口
-p:随机指定端口
例:docker run --name mynginx -p 80:80 nginx #操作台运行
docker run -di --name mynginx -p 80:80 nginx #后台运行
2、运行启动容器
#简单操作
docker run 镜像标识|镜像名称[:tag]
#常用参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像标识|镜像名称[:tag]
选项:
-d:后台运行容器
-p:宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
--name 容器名称:指定容器的名称
--it 使用交互方式运行,进入容器查看内容
-P:指定容器端口
-p:随机指定端口
例:docker run --name mynginx -p 80:80 nginx #操作台运行
docker run -di --name mynginx -p 80:80 nginx #后台运行
3、查看正在运行的容器
docker ps
选项:
-f:过滤
-a:查看全部的容器,包括没有运行的
-q:只查看容器的标识
-n=?:显示最近创建的容器
-l:查看最后创建的容器
例:docker ps -f status=exited #过滤已经存在但停止的容器
docker ps -n 5 #列出最近创建的n个容器
4、进入到容器内部
docker exec -it 容器id/容器名称 /bin/bash
docker attach 容器id
区别:
docker exec:进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach:进入容器正在执行的终端,不会启动新的进程
5、删除容器(删除容器前,需要先停止容器)
docker stop 容器id #停止指定的容器
docker stop $(docker ps -qa) #停止全部容器
docker rm 容器名/容器id #删除指定的容器,删除前该容器需要停止
docker rm $(docker ps -qa) #删除状态不是up外的所有容器
docker ps -a | awk '{print "docker rm "$1}'|bash #删除状态不是up外的所有容器
6、启动容器
docker start 容器id/容器名称
7、退出容器
exit #直接容器停止并退出
Ctrl+P+Q #容器不停止退出
8、容器导出
docker export f0d1777bd2a3 > /opt/nginx_c
ls /opt/nginx_c
9、容器导入
cat nginx_c | docker import - nginx:web
六、私有仓库建立
DockerHub为我们提供了很多官方镜像和个人上传的镜像,我们可以下载机构或个人提供的镜像,也可以上传我们自己的本地镜像,但缺点是:
- 由于网络的原因,从DockerHub下载和上传镜像速度可能会比较慢;
- 在生产上使用的Docker镜像可能包含我们的代码、配置信息等,不想被外部人员获取,只允许内网的开发人员下载。
为了解决以上问题,Docker 官方提供了一个叫做 registry 的镜像用于搭建本地私有仓库使用。在内部网络措建的Docker 私有仓库可以使内网人员下载、上传都非常快速, 不受外网带宽等因素的影响,同时不在内网的人员也无法下载我们的镜像,并且私有仓库也支持配置仓库认证功能。接下来详细讲解registry 私有仓库的搭建过程。
1.从公有仓库下载registry镜像
从公有仓库下载registry镜像
docker pull registry
2.修改配置
修改 daemon.json 文件。
vi /etc/docker/daemon.json
添加以下内容,用于让Docker信任私有仓库地址,保存退出。
{
......
"insecure-registries": ["192.168.168.11:5000"]
}
重启Docker服务
#重新启动docker
systemctl restart docker
systemctl status docker #查看docker状态
3、建立私有仓库
# docker create -it registry /bin/bash
# docker ps -a
# docker start 73f639d806c1
# #宿主机的/data/registry自动创建挂载容器中的/tmp/registry
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
#更改标记为192.168.182.11:5000/nginx
docker tag nginx:latest 192.168.182.11:5000/nginx
# 将nginx镜像上传到私有仓库
docker push 192.168.168.11:5000/nginx
# 获取私有仓库列表
curl -XGET http://192.168.126.70:5000/v2/_catalog
七、Docker数据卷
首先下载一个centos的内核镜像用于实验
docker pull centos:7
# 宿主机目录/var/www挂载容器中的/data1
docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
八、数据卷容器
# 数据卷容器
docker run --name web2 -v /data1 -v /data2 -it centos:7/bin/bash
# 新容器挂载数据卷容器web2
docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash
九、端口映射
端口映射就是为了方便外面的人能够直接访问
docker run -d -P nginx:latest #-P 随机映射端口
docker run -d -P 14777:80 nginx:latest # -p指定映射端口
十、容器互联
容器互联:指两个容器之间相互的通讯,你可以访问对方容器的名称就可以跟对方容器进行通讯
docker run -itd -P --name web11 centos:7 /bin/bash
#创建并运行容器取名web11,端口号自动映射
docker run -itd -P --name web22 --link web11:web11 centos:7 /bin/bash
#创建并运行容器取名web2,链接到web11和其通信进web22容器
# link 就是连接 前面的web11是容器名称 后面的web11是别名可以自己随便取
docker exec -it c0a29e12b5da /bin/bash 进入web22容器
ping web11
进入web22容器内 pingweb11 看看网络是否连接正常
总结
1、镜像上传(push) / 下载(pull) / 打标签(tag) / 删除(rmi) / 导出(save -o) / 导入(load)
2、容器创建(create) / 进入(exec) / 运行(run) / 删除(rm) / 导出(export) / 导入(import)
数据卷(-v) / 数据卷容器(--volumes-from) / 链接容器(--link) / 暴露端口(随机:-P 指定:-p)
3、仓库下载registry镜像-->运行容器暴露端口5000---->修改daemon.json文件---->重启docker----->打标签(IP: 端口/名称)--->上传/下载