Docker基础命令和部署详解——(20版)

一、Docker概述

Docker是什么

  • 是一种轻量级的“虚拟机”
  • 在Linux容器里运行应用的开源工具

Docker与虚拟机的区别

不同点containerVM
启动速度秒级(和宿主机共用内核)分钟级
运行性能接近原生(直接在内核中运行)5%左右损失
磁盘占用MBGB
数量成百上千一般几十台
隔离性进程级别系统级别(更彻底)
操作系统主要支持Linux几乎所有
提供服务沙箱机制/只需要docker引擎需要完整的操作系统
封装程度只打包项目代码和依赖关系,共享宿主机内核完整的操作系统,与宿主机隔离
解决孤岛问题可以无法解决

Docker的使用场景

  • 打包应用程序简化部署
  • 可脱离底层硬件任意迁移
  • 例:服务器从腾讯云迁移到阿里云

1.1、Docker的核心概念及安装方式

Docker核心概念
● 镜像(只读模板)

  • 一个面向Docker容器引擎的只读模板

● 容器

  • 从镜像创建的运行实例

● 仓库

  • 集中保存镜像的地方

CentOS安装Docker的两种方式

  1. 使用CURL获得Docker的安装脚本进行安装
  2. 使用YUM仓库来安装Docker

1.2、docker架构

在这里插å¥å›¾ç‰‡æè¿°

  • 默认Client和DOCKER_HOST是在同一个宿主机里面,假设Registry是公共镜像(另一台服务器上)
  • 本地安装完docker引擎会帮助安装服务端和客户端
  • 服务端是以daemon守护进程的方式工作在后台,Client工作在前台
  • 服务端在后台会构建镜像、读取镜像,(镜像可以由远端去下载),Images会对镜像进行构建为容器的方式跑起来
  • 客户端的终端上执行创建命令、下载命令、运行命令来告诉服务端具体执行什么操作

二、Docker部署

2.1、安装依赖包

[root@docker ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
#yum-utils yum仓库的工具
#device-mapper docker的引擎	
#lvm2 lvm的一种加强性管理工具

2.2、设置阿里云镜像(加速)

[root@docker ~]# cd /etc/yum.repos.d
[root@mysql yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3、安装docker-ce社区版

[root@docker yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@docker yum.repos.d]# yum -y install docker-ce
[root@docker ~]# systemctl start docker   #启动docker
[root@docker ~]# systemctl enable docker  #设置开机自启

2.4、设置镜像加速

[root@docker ~]# tee /etc/docker/daemon.json <<-'EOF'

> {
> "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
> }
> EOF
> {
>   "registry-mirrors": ["https://76ipfsjf.mirror.aliyuncs.com"]
> }
> [root@docker ~]# systemctl daemon-reload    #开启守护进程(服务端)
> [root@docker ~]# systemctl restart docker      #重启docker的客户端

2.5、网络优化

[root@docker ~]# vim /etc/sysctl.conf           #开启路由转发

[root@docker ~]# sysctl -p
[root@docker ~]# systemctl restart network
[root@docker ~]# systemctl restart docker
#docker配置文件
{
"graph": "/data/docker",          #数据目录
"storage-driver": " overlay2",   #存储引擎
"insecure-registries": ["registry.access.redhat.com"," quary.io"]    #私有仓库
"registry-mirrors": ["https://q"]        #镜像加速
"bip": "172.7.5.1/24",                     #docker网络(面试题—如何永久配置docker网络地址,就是在daemon.json 里面配置"bip"字段)
"exec-opts": ["native.cgroupdriver=systemd"],        #启动时候的额外参数(驱动)
"live-restore": true           #当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)
}
docker容器网络生产经验
docker 的网络建议和宿主机的IP“对照”
比如宿主机10.2.5.6容器的地址就可以修改为172.5.6.1,这样方便在故障发生时,更容易定位故障节点位置

2.6、docker镜像操作

[root@docker ~]# docker run hello-world
注:docker run
1、先检测本地是否有镜像
2、本地没有该镜像,则会向镜像仓库拉取这个镜像
3、先create、再start把该镜像的容器运行起来
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:

 - The Docker client contacted the Docker daemon.
 - The Docker daemon pulled the "hello-world" image from the Docker Hub.
     (amd64)
 - The Docker daemon created a new container from that image which runs the
     executable that produces the output you are currently reading.
 - The Docker daemon streamed that output to the Docker client, which sent it
     to your terminal.

解析:

  • docker client客户端连接到了服务端(服务端是以一个守护进程的形式跑在操作系统里面的)典型的C/S架构
  • 由docker服务端的守护进程从docker hub 上下载了镜像
  • 服务端创建了一个新的容器,然后从拉去的这个镜像启动了一个容器,容器执行了脚本/可执行程序让我们可以查看/使用
  • docker服务端把这些信息流(传递)返回到客户端并展示出来,(展示在终端上)
  • docker client可以是多种形式,比如"docker"命令工具所在的终端

2.6.1、查询docker版本(两种方式)

[root@docker ~]# docker version
[root@docker ~]# docker info

2.6.2、搜索镜像

[root@docker ~]# docker search nginx

2.6.3、下载镜像

docker pull 镜像名称
例如:docker pull nginx
[root@docker ~]# docker pull nginx
[root@docker ~]# docker images   #查看镜像列表
[root@docker ~]# docker inspect f6d0b4767a6c    #获取镜像信息
[root@docker ~]# docker tag nginx:latest nginx:lnmp   #给镜像添加标签
[root@docker ~]# docker images
[root@docker ~]# docker rmi nginx:lnmp   #删除标签

2.6.4、镜像导出和导入

docker save -o 文件名 镜像名
示例:
docker save -o nginx nginx:latest
[root@docker docker]# docker save -o nginx nginx:latest
[root@docker docker]# ls
daemon.json  key.json  nginx
[root@docker docker]# docker rmi nginx:latest
[root@docker docker]# docker images
[root@docker docker]# docker load < nginx    #导入镜像
[root@docker docker]# docker images

:使用场景,有的生产环境,企业不直接使用docker私有仓库,而是存放在一个ftp服务器中,按需上传下载

2.7、容器操作

2.7.1、查询容器

[root@docker docker]# docker ps -a

2.7.2、创建容器

[root@docker docker]# docker create -it nginx:latest /bin/bash
# -i:让容器的标准输入保持打开
# -t:分配一个伪终端
# /bin/bash 给予执行环境

2.7.3、启动容器

[root@docker docker]# docker start ec05ddece00d

2.7.4、启动容器(一次性执行)

[root@docker docker]# docker run centos:7 /usr/bin/bash -c ls /

2.7.5、停止容器

[root@docker docker]# docker stop ec05ddece00d

2.7.6、持续后台运行

[root@docker docker]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"

2.8、进入容器

2.8.1、使用run

[root@docker docker]# docker run -it nginx:latest /bin/bash

退出

  1. Ctrl+d
  2. exit

2.8.2、exec(容器必须正常运行)

[root@docker docker]# docker exec -it ec05ddece00d /bin/bash

2.8.3、容器导出

[root@docker docker]# docker export ec05ddece00d > nginx_1
[root@docker docker]# ls

2.8.4、容器导入(生成镜像)

[root@docker docker]# cat nginx_1 | docker import - nginx:latest

2.9、删除容器

[root@docker docker]# docker rm 7510b623832b  #这个命令无法删除正在运行的容器,rm -f 可以强制删除

2.9.1、批量删除

[root@docker docker]# docker ps -a | awk '{print docker rm "$1"}' | bash

2.9.2、批量删除"exit"状态的容器

[root@docker docker]# for i in `docker ps -a | grep -i exit | awk '{print $1}'`; do docker rm -f $i;done #过滤异常退出的容器

2.9.3、批量关闭正在运行的容器

[root@docker ~]# for i in `docker ps -a | grep -i up | awk '{print $1}'`; do docker stop $i;done
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值