docker

虚拟机和容器对比

操作系统

虚拟机:

在宿主机机,虚拟硬件,在虚拟的硬件安装操作系统

docker

轻量级虚拟机、对于容器而言,不需要在宿主机上虚拟硬件,而是直接使用宿主机的硬件,一个容器会包含操作系统和一个应用程序,可以看作具备用户空间的进程而已

 

容器引擎

包含计算、存储、网络

提供网络、计算、存储的能力

容器运行时 

只能提供计算能力、containerd


cni:容器网络接口

*网络 :calico、flannel、cannel、contiv

csi:容器存储接口

*存储:ceph、nfs、disk、...

cri: 容器运行时接口

  • 计算:containerd


安装docker

有线部署

1、修改名称

2、配置yum源和epel源

2、修改镜像源

https://developer.aliyun.com/mirror/docker-ce

3、systemctl start docker

4、systemctl enable docker


docker是CS架构的

服务端 dockerd

客户端命令 docker

离线部署

docker镜像

包含操作系统和应用程序

镜像仓库

私有仓库

容器镜像服务 (aliyun.com)

推送镜像
1、登录docker私有仓库 
    docker login + 仓库地址
2、打tag
    docker tag redis:7.0.4 registry.cn-hangzhou.aliyuncs.com/命名空间/redis:7.0.4
3、推送镜像
    docker push registry.cn-hangzhou.aliyuncs.com/命名空间/redis:7.0.4
http默认不能拉取、推送镜像,https不安全证书
​
1、进入配置文件
vi /etc/docker/daemon.json
​
2、加入
{
    "insecure-registris":["http://xxx.xxx.com","https://xxx.xxx.com"]
}
​
3、修改后,需要重启docker
/etc/docker/daemon.json文件解析
​
{
    "exec-opts":["native.cgroupdriver=systemd"], #指定cgroup驱动
    "log-driver":"json-file", #docker日志存储位置及格式
    "log-level":"info", #日志存储级别
    "log-opes":{
         "max-size":"100m"
         "max-file":"10"
    },
    "registry-mirrors":["https://pqbap4ya.mirror.aliyuncs.com"], #镜像加速器
"live-restore":true #当dockerd被重启时,容器不会退出
}
​
1、本地日志存放位置: /var/lib/docker/containers
2、1000m=1G

公有仓库

library是公共空间

hub.docker.com:latest

拉取镜像命令:

docker pull nginx:1.2

! 建议拉取镜像写明版本、见名知意

docker pull

docker rmi redis:7.0.4

参数:-f  强制删除容器(包括在运行容器)

镜像不能修改

查看镜像列表 :

docker image ls

查看镜像详情:

docker inspect redis:7.0.4

Repository:镜像仓库名称 ​ 
TAG: 标签 
​CREATED: 镜像创建时间
SIZE:大小

docker容器

将镜像运行起来就是一个容器,容器为任务而生,不可以空跑、任务退出、容器就退出。

运行容器:docker run -d -p 80:80 nginx:1.23.1

 
启动参数
-d:将容器放到后台运行,以守护进程
-i: 交互式运行
-t: 为容器分配一个终端、-it组合使用
-p:端口映射
-P:宿主机随机映射容器端口
-v:持久化挂载
-e:容器启动时传递容器变量,可多次-e
--name:指定容器运行的名称
--dns:默认使用宿主机dns
--restart:默认no(no、always),当为always,重启后容器自动运行
--rm :退出自动删除容器
docker run -it nginx:1.23.1 /bin/bash
/bin/bash会覆盖docker-entrypoint在前台终端执行
容器怎么知道进程执行完了?
在容器内部开启一个虚拟tty,然后要求将这个进程以前台的方式运行在这个tty上,这个tty不能退出,否则进程就退
容器里必须有 ps -ef  | grep tty
任何容器在运行会执行一个任务,这个任务被称之为command
进入一个已经运行的容器
docker exec -it <容器id> /bin/bash

--name参数案例

--dns参数案例

-restart参数案例

-v参数案例 

docker run -d   -e MYSQL_ROOT_PASSWORD=cka01 -e MYSQL_DATABASE=lsz -v /data/mysql:/var/lib/mysql mysql:5.7
-v前面是宿主机路径、后面是容器路径
​
再新建容器可以直接-v路径继承之前的源数据
docker run -d  -v /data/mysql:/var/lib/mysql mysql:5.7
挂载本地时间到容器里面
-v /etc/localtime:/etc/localtime
-v /etc/localtime:/etc/localtime:ro #只读挂载
:ro #只读挂载
:rw #读写挂载、默认读写
​
#容器卷挂载
第一种   
-v /var/lib/mysql  #匿名卷
容器直接在宿主机自动新建一个目录路径,容器覆盖宿主机的
可以通过inspect查看
​
第二种
docker volume create webdir1  #新建卷
docker run -d -v webdir:/usr/share/nginx/html nginx:1.23.1  #容器的内容挂载到宿主机卷

容器网络

安装好docker默认会安装一块网卡,每创建一个容器会创建一个网桥

docker网卡有DHCP的能力,各容器默认通信

容器三种网络方式

--net
1、bridge:使用iptables实现端口映射、-p、-P   #默认
2、host: 不为容器配置网卡,而直接使用宿主机网卡,获得最佳网络性能,但例如有两个nginx,会产生同一宿主机ip,端口被占用的问题
3、none: 不为容器分配任何IP地址

-p

-p 80:80 #前面是宿主机端口

123和8015都是宿主机的端口

-P

以nginx为例,宿主机会自动映射容器80端口,宿主机端口随机

删除容器:docker rm 容器id

注:运行容器不能直接删除,需要

停止容器: docker stop <容器id>

docker kill <容器id>

或 强制 rm -f

删除所有容器:

docker ps -aq | xargs docker rm -f

重启容器:docker restart <容器id>

暂停容器 :docker pause <容器id>

恢复暂停容器: docker unpause <容器id>

启动后,参数无法被修改,容器里面数据可以修改

查看容器命令参数:docker run --help

看容器运行状态: docker ps -a

container ID : 容器id
IMAGE: 使用的镜像
COMMAND: 启动执行的命令
CREATED: 创建时间
STATUS: 运行状态
PORTS: 端口映射
NAMES: 随机生成的容器名字

查看容器详情: docker inspect 容器id

查看容器日志:docker logs 容器id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值