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

一、Docker概述

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

■ Docker与虚拟机的区别
在这里插入图片描述

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

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

■ Docker核心概念
● 镜像(只读模板)
◆ 一个面向Docker容器引擎的只读模板
● 容器
◆ 从镜像创建的运行实例
● 仓库
◆ 集中保存镜像的地方

■ CentOS安装Docker的两种方式
● 使用CURL获得Docker的安装脚本进行安装
● 使用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:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. 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

猜你喜欢

转载自blog.csdn.net/weixin_50344814/article/details/114631262