docker的基本管理

一、初识Docker(概述)

1、Docker是什么?

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

2、Docker与虚拟机的区别

虚拟机

容器

启动时间


快速

容量



系统

逻辑隔离

依赖于内核

安全性



Docker是毫秒级别的启动

3、Docker的使用场景

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

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

(1)Docker核心概念

镜像

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

容器

  • 从镜像创建的运行实例

仓库

  • 集中保存镜像的地方

docker环境如何打堆栈_centos

(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

docker环境如何打堆栈_docker_02

2、设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

docker环境如何打堆栈_linux_03

3、安装Docker-CE
yum install -y docker-ce
systemctl start docker
systemctl enable docker

docker环境如何打堆栈_docker环境如何打堆栈_04

4、镜像加速

docker环境如何打堆栈_docker_05

做了这一步之后,你下载镜像就不会出现卡死状态,反而速度会起飞

5、网络优化
vim /etc/sysctl.conf
#添加 net.ipv4.ip_forward=1

sysctl -p
service network restart
systemctl restart docker

docker环境如何打堆栈_docker_06


docker环境如何打堆栈_centos_07

四、docker中一些基础命令

1、查看docker版本
docker version

docker环境如何打堆栈_centos_08

2、查找指定镜像
例如 我要查找nginx的镜像
docker search 关键字

docker环境如何打堆栈_java_09

3、查看镜像列表
docker images 仓库名称[:标签]

docker环境如何打堆栈_docker环境如何打堆栈_10

4、下载镜像
docker pull 仓库名称[:标签]

docker环境如何打堆栈_linux_11


再次查看镜像列表

docker images

docker环境如何打堆栈_docker环境如何打堆栈_12

5、删除镜像
docker rmi 仓库名称[:标签]  ## 删除nginx镜像
或
docker rmi 镜像ID号

docker环境如何打堆栈_linux_13


也可以用ID镜像号进行删除

docker环境如何打堆栈_linux_14

6、添加标签
docker  tag 名称[:标签] 新名称[:新标签]

docker环境如何打堆栈_java_15

7、查看
docker images | grep nginx

可以配合grep进行搜索查看

docker环境如何打堆栈_centos_16

8、存出镜像名为123存在当前目录下
docker save -o 123 nginx:latest

docker环境如何打堆栈_java_17

9、载入镜像
方法一:docker load < abcx
方法二: docker --input abc

docker环境如何打堆栈_docker_18

五、容器命令

1、容器创建、查看容器
docker create  [选项]镜像运行的程序

-i  让容器的标准输入保持打开
-t  让Docker分配一个伪终端

这里先下载一个centos7内核的镜像方便示例,内核镜像较小两百多兆

docker环境如何打堆栈_java_19


docker环境如何打堆栈_docker环境如何打堆栈_20

docker ps  ## 查看运行中的容器
docker ps -a  查看全部容器

-a 列出所有的容器,包括未运行的容器

docker环境如何打堆栈_centos_21

run命令

从没有镜像到生成一个运行的容器总结为三个步骤

1、下载镜像
2、创建容器
3、启动容器

但是在生产环境中是怎么方便怎么来
run命令会将他三合一
所以我用较多的是 run

举例:

docker run -d nginx /bin/bash

-d 是daemon 开启守护进程,这里不加-d是开启不了容器的

docker环境如何打堆栈_docker环境如何打堆栈_22

#简单操作
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

docker环境如何打堆栈_docker环境如何打堆栈_23

9、容器导入
cat nginx_c | docker import - nginx:web

docker环境如何打堆栈_linux_24

六、私有仓库建立

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环境如何打堆栈_centos_25


重启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

docker环境如何打堆栈_docker_26

docker环境如何打堆栈_docker环境如何打堆栈_27

# 将nginx镜像上传到私有仓库
docker push 192.168.168.11:5000/nginx
# 获取私有仓库列表
curl -XGET http://192.168.126.70:5000/v2/_catalog

docker环境如何打堆栈_docker_28

七、Docker数据卷

首先下载一个centos的内核镜像用于实验
docker pull centos:7
# 宿主机目录/var/www挂载容器中的/data1
docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash

docker环境如何打堆栈_java_29

八、数据卷容器

# 数据卷容器
docker run --name web2 -v /data1 -v /data2 -it centos:7/bin/bash

docker环境如何打堆栈_java_30

# 新容器挂载数据卷容器web2
docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash

docker环境如何打堆栈_centos_31

九、端口映射

端口映射就是为了方便外面的人能够直接访问

docker run -d -P nginx:latest   #-P 随机映射端口

docker环境如何打堆栈_centos_32


docker环境如何打堆栈_docker环境如何打堆栈_33

docker run -d -P 14777:80 nginx:latest  # -p指定映射端口

docker环境如何打堆栈_centos_34

十、容器互联

容器互联:指两个容器之间相互的通讯,你可以访问对方容器的名称就可以跟对方容器进行通讯

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

docker环境如何打堆栈_java_35


进入web22容器内 pingweb11 看看网络是否连接正常

docker环境如何打堆栈_linux_36

总结

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: 端口/名称)--->上传/下载